diff --git a/.agents/skills/splix/SKILL.md b/.agents/skills/splix/SKILL.md new file mode 100644 index 00000000..cb110a32 --- /dev/null +++ b/.agents/skills/splix/SKILL.md @@ -0,0 +1,54 @@ +# SpliX Development Patterns + +> CUPS printer driver for Samsung/Xerox/Dell QPDL printers + +## Overview +SpliX is a Linux CUPS filter driver that converts raster data into the Samsung QPDL (Quick Page Description Language) byte-stream protocol. It supports ~100 printer models across Samsung, Xerox, Dell, Lexmark, and Toshiba brands. + +## Architecture +- **Language**: C++23 (compiled with `-std=c++23`) +- **Build System**: CMake 3.16+ with presets (amd64, arm64, debug, ASan) +- **Testing**: Google Test (GTest) + functional shell tests + ASan/UBSan CI +- **Packaging**: CPack `.deb` for Debian/Ubuntu + +## Key Binaries +| Binary | Purpose | +|--------|---------| +| `rastertoqpdl` | CUPS raster → QPDL converter (main filter) | +| `pstoqpdl` | PostScript preprocessor → chains to rastertoqpdl | + +## Coding Conventions +- **Memory**: `std::unique_ptr`, `std::vector`, `std::span` — zero raw `new`/`delete` +- **Errors**: `SP::Result` (alias for `std::expected`) +- **Threads**: `std::jthread` with `stop_token`, `std::mutex`, `std::counting_semaphore` +- **Includes**: System headers via `<>`, project headers via `""` from `include/` +- **Comments**: Original French comments preserved alongside English translations + +## Compression Algorithms +| ID | Class | Description | +|----|-------|-------------| +| 0x0D | `Algo0x0D` | Samsung SPL-C run-length (with 0x0E fallback) | +| 0x0E | `Algo0x0E` | Complementary to 0x0D | +| 0x11 | `Algo0x11` | LZS-variant compression | +| 0x13 | `Algo0x13` | JBIG whole-page compression | +| 0x15 | `Algo0x15` | JBIG banded compression (CLP-315, M2026) | + +## Build Commands +```bash +# Native debug build +cmake --preset linux-debug && cmake --build --preset linux-debug + +# Release + package +cmake --preset linux-amd64-release && cmake --build --preset linux-amd64-release +cd build-amd64 && cpack -G DEB + +# Run tests +cd build-debug && ctest --output-on-failure + +# ASan build +cmake --preset linux-asan && cmake --build --preset linux-asan +``` + +## Testing +- Test files: `tests/splix_gtest.cpp` (unit), `tests/functional_test.sh` (integration) +- CI runs: native amd64 + cross-compiled arm64 + ASan/UBSan sanitizer check diff --git a/.githooks/pre-push b/.githooks/pre-push new file mode 100644 index 00000000..73468667 --- /dev/null +++ b/.githooks/pre-push @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# Pre-push hook: Runs the SpliX QA tests locally before allowing a push. +# If the CMake configuration or binary syntax tests fail, the push is aborted. + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(dirname "$SCRIPT_DIR")" + +echo "==================================================" +echo " Running Git pre-push hook for SpliX..." +echo "==================================================" + +# Execute the local QA test script +if ! "$ROOT_DIR/tests/test_build.sh"; then + echo + echo "❌ Pre-push checks failed! Push aborted." + echo "Please fix the build or syntax errors before pushing to the repository." + exit 1 +fi + +echo "✅ Pre-push checks passed! Proceeding with git push." +exit 0 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5c58345a..baeeb04e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,77 +1,163 @@ -name: Build SpliX +name: Build Splix .deb Packages (CMake) on: push: - paths: - - 'src/**' + branches: [master, main, modernized-2026] + tags: ['v*'] pull_request: - paths: - - 'src/**' + branches: [master, main, modernized-2026] workflow_dispatch: jobs: build: + name: Build ${{ matrix.deb_arch }} runs-on: ubuntu-latest - name: Build + strategy: + fail-fast: false + matrix: + include: + # ── AMD64 (native) ────────────────────────────────────────────── + - deb_arch: amd64 + cmake_preset: ci-amd64 + + # ── ARM64 (cross-compiled) ───────────────────────────────────── + - deb_arch: arm64 + cmake_preset: ci-arm64 + + # ── ARMHF (cross-compiled) ───────────────────────────────────── + - deb_arch: armhf + cmake_preset: ci-armhf + + # ── i386 (cross-compiled) ────────────────────────────────────── + - deb_arch: i386 + cmake_preset: ci-i386 + + # ── RISCV64 (cross-compiled) ─────────────────────────────────── + - deb_arch: riscv64 + cmake_preset: ci-riscv64 + steps: - - name: Git checkout + - name: Checkout code uses: actions/checkout@v4 + with: + fetch-depth: 0 # Fetch all history for all branches and tags + + - name: Restore ccache + uses: actions/cache@v4 + with: + path: .ccache + key: ccache-cmake-${{ matrix.deb_arch }}-${{ github.sha }} + restore-keys: | + ccache-cmake-${{ matrix.deb_arch }}- - - name: Declare short commit variable - id: vars + - name: Build and package inside Debian oldstable run: | - echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + mkdir -p "${PWD}/artifacts" "${PWD}/.ccache" + + docker run --rm \ + --platform linux/amd64 \ + -v "${PWD}:/workspace" \ + -v "${PWD}/.ccache:/root/.ccache" \ + -w /workspace \ + -e CCACHE_DIR=/root/.ccache \ + -e DEB_ARCH="${{ matrix.deb_arch }}" \ + -e CMAKE_PRESET="${{ matrix.cmake_preset }}" \ + -e GITHUB_REF_NAME="${{ github.ref_name }}" \ + debian:oldstable \ + bash -c ' + set -euo pipefail + + # ── Base dependencies ────────────────────────────────────────── + apt-get update -y + apt-get install -y --fix-missing \ + build-essential cmake \ + cups libcups2-dev libcupsimage2-dev libjbig-dev \ + pkg-config ccache git ca-certificates + + # ── Cross-compilation dependencies ─────────────────────── + if [ "${DEB_ARCH}" != "amd64" ]; then + dpkg --add-architecture "${DEB_ARCH}" + apt-get update -y + + case "${DEB_ARCH}" in + arm64) CROSS_PKG="gcc-aarch64-linux-gnu g++-aarch64-linux-gnu" ;; + armhf) CROSS_PKG="gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf" ;; + i386) CROSS_PKG="gcc-i686-linux-gnu g++-i686-linux-gnu" ;; + riscv64) CROSS_PKG="gcc-riscv64-linux-gnu g++-riscv64-linux-gnu" ;; + esac + + apt-get install -y --fix-missing ${CROSS_PKG} \ + libcups2-dev:${DEB_ARCH} \ + libcupsimage2-dev:${DEB_ARCH} \ + libjbig-dev:${DEB_ARCH} + fi + + # Put ccache wrappers first so they intercept gcc/g++ calls. + # For cross-compilation ccache transparently wraps the cross-compiler. + export PATH="/usr/lib/ccache:${PATH}" + + # ── CMake configure + build ──────────────────────────────────── + rm -rf /tmp/splix-build - - name: Create cache directory - run: mkdir ~/cache + cmake --preset "${CMAKE_PRESET}" + cmake --build --preset "${CMAKE_PRESET}" - - id: cache - name: Initialize cache - uses: actions/cache@v5 + # ── Package as .deb via CPack ────────────────────────────────── + cd /tmp/splix-build + cpack -G DEB + + # Copy the generated .deb to the artifacts directory + cp -v /tmp/splix-build/*.deb /workspace/artifacts/ + + echo "── Packaged artifacts ──────────────────────────────" + ls -lh /workspace/artifacts/ + ' + + - name: Upload .deb artifact + uses: actions/upload-artifact@v4 with: - path: ~/cache - key: cache-${{ runner.os }} + name: splix-deb-${{ matrix.deb_arch }} + path: artifacts/*.deb + if-no-files-found: error - - name: APT install - run: | - sudo sed -i 's~Types: ~Types: deb-src ~' /etc/apt/sources.list.d/ubuntu.sources - sudo apt update - sudo DEBIAN_FRONTEND=noninteractive apt install -y build-essential libcups2-dev cups groff nano less ninja-build - sudo DEBIAN_FRONTEND=noninteractive apt build-dep -y cups + # On version tags (e.g. v2.0.2) attach both .deb files to the GitHub + # Release created for that tag. + - name: Attach to GitHub Release (version tags only) + if: startsWith(github.ref, 'refs/tags/v') + uses: softprops/action-gh-release@v2 + with: + files: artifacts/*.deb - - if: steps.cache.outputs.cache-hit != 'true' - name: Build polyfill-glibc - run: | - git clone https://github.com/corsix/polyfill-glibc.git && cd polyfill-glibc && ninja - cp polyfill-glibc ~/cache/ + # ── Sanitizer Check ──────────────────────────────────────────────────────── + # Runs the functional test suite under AddressSanitizer and + # UndefinedBehaviorSanitizer to catch memory bugs in PRs. + security-audit: + name: Sanitizer Check (ASan/UBSan) + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 - - if: steps.cache.outputs.cache-hit != 'true' - name: Build libjbig + - name: Build and Test with Sanitizers run: | - mkdir jbig && cd jbig && apt source jbigkit - cd jbigkit-* && make -j4 - cp libjbig/libjbig85.a ~/cache/ + docker run --rm \ + -v "${PWD}:/workspace" \ + -w /workspace \ + debian:oldstable \ + bash -c ' + set -euo pipefail + apt-get update -y + apt-get install -y build-essential cmake cups libcups2-dev \ + libcupsimage2-dev libjbig-dev pkg-config \ + git ca-certificates xxd - - name: Build SpliX - run: | - JB=$(realpath ~/cache/libjbig85.a) - echo $JB - ls -la $JB - # use static libjbig - sed -i "s~-ljbig85~/${JB}~" module.mk - # force libcupsimage dynamic linking, as newer cups on newer ubuntu links it from libcups - sed -i 's~rastertoqpdl_LIBS.*:= ~rastertoqpdl_LIBS := -lcupsimage ~' module.mk - grep 'libjbig' module.mk - make DRV_ONLY=1 -j4 - rm -rf optimized/src - - - name: Patch for older glibc - run: | - ~/cache/polyfill-glibc --target-glibc=2.17 optimized/rastertoqpdl - ~/cache/polyfill-glibc --target-glibc=2.17 optimized/pstoqpdl + # Configure with ASan preset + cmake --preset linux-asan + cmake --build --preset linux-asan - - name: Save build artifacts - uses: actions/upload-artifact@v7 - with: - name: splix_x86_64_${{ steps.vars.outputs.sha_short }} - path: optimized/ + # Run tests (ctest will invoke functional_test.sh) + cd build-asan + ctest --output-on-failure + ' diff --git a/.gitignore b/.gitignore index 2d0a4db2..e0bbe528 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,16 @@ gmon.out optimized ppd/*.drv tmp + +# CMake build directories +build/ +build-*/ + +# CI artifacts +artifacts/ + +# Compiler cache +.ccache/ + +# CMake user presets (local overrides, not committed) +CMakeUserPresets.json diff --git a/BUILDING.md b/BUILDING.md new file mode 100644 index 00000000..bc54a0ec --- /dev/null +++ b/BUILDING.md @@ -0,0 +1,408 @@ +# Building SpliX + +This document explains the build system, what changed from the original, and +how to build SpliX locally or understand what the CI pipeline does. + +--- + +## Table of Contents + +1. [Quick Start (Local Build)](#quick-start) +2. [Cross-Compilation (ARM64)](#cross-compilation-arm64) +3. [What Changed and Why](#what-changed-and-why) +4. [File-by-File Change Log](#file-by-file-change-log) +5. [CMake Variable Reference](#cmake-variable-reference) +6. [CI / GitHub Actions](#ci--github-actions) +7. [PPD File Map (Brand → Directory)](#ppd-file-map) +8. [Troubleshooting](#troubleshooting) + +--- + +## Quick Start + +### Prerequisites + +```bash +# Debian / Ubuntu +sudo apt-get install \ + build-essential cmake pkg-config \ + cups \ # runtime: creates /usr/lib/cups/filter/, needed for path queries + libcups2-dev \ # build: cups/cups.h headers + cups.pc for pkg-config + libcupsimage2-dev \ + libjbig-dev +``` + + +### Build + +```bash +# Out-of-tree build (recommended — keeps the source tree clean) +cmake -S . -B build -DCMAKE_BUILD_TYPE=Release +cmake --build build --parallel +``` + +### Using CMake Presets (recommended) + +The project includes `CMakePresets.json` with ready-made configurations. +Presets require CMake 3.25+ but the project itself builds with CMake 3.16+. + +```bash +# AMD64 release build +cmake --preset linux-amd64-release +cmake --build --preset linux-amd64-release + +# ARM64 cross-compiled release build +cmake --preset linux-arm64-release +cmake --build --preset linux-arm64-release + +# Debug build for development +cmake --preset linux-debug +cmake --build --preset linux-debug +``` + +### Install + +```bash +# System-wide (requires root) +sudo cmake --install build + +# Staging directory (for packaging) +cmake --install build --destdir /tmp/splix-stage +``` + +### Override install paths + +```bash +cmake -S . -B build \ + -DSPLIX_FILTER_DIR=/usr/lib/cups/filter \ + -DSPLIX_PPD_DIR=/usr/share/cups/model +``` + +### Generating `.deb` with CPack + +CPack is configured automatically. After building: + +```bash +# Via presets: +cpack --preset linux-amd64-release + +# Or manually: +cd build && cpack -G DEB +``` + +The output is `splix-2.0.2-amd64.deb` (or `arm64`). + +--- + +## Cross-Compilation (ARM64) + +CMake supports cross-compilation natively via **toolchain files**. A toolchain +file tells CMake which compiler to use and where the target system's libraries +live. The cross-compiler builds ARM64 binaries directly on the x86-64 host — +no QEMU emulation required. + +**Why this matters:** QEMU emulation of ARM64 on x86-64 takes 15-25 minutes +for a cold build. Native cross-compilation takes 2-5 minutes. + +### Prerequisites (install once) + +```bash +# Enable ARM64 multiarch so apt can install :arm64 packages +sudo dpkg --add-architecture arm64 +sudo apt-get update + +# Cross-compiler and ARM64 development libraries +sudo apt-get install \ + gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \ + libcups2-dev:arm64 libcupsimage2-dev:arm64 libjbig-dev:arm64 +``` + +### Build for ARM64 + +```bash +cmake -S . -B build-arm64 \ + -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm64.cmake \ + -DCMAKE_BUILD_TYPE=Release +cmake --build build-arm64 --parallel +``` + +### How `cmake/toolchain-arm64.cmake` works + +| Setting | Value | Purpose | +|---|---|---| +| `CMAKE_C_COMPILER` | `aarch64-linux-gnu-gcc` | Cross-compiler binary | +| `CMAKE_CXX_COMPILER` | `aarch64-linux-gnu-g++` | Cross-compiler binary | +| `CMAKE_FIND_ROOT_PATH` | `/usr/lib/aarch64-linux-gnu` | Where to find ARM64 libraries | +| `CMAKE_FIND_ROOT_PATH_MODE_LIBRARY` | `ONLY` | Never fall back to host libraries | +| `PKG_CONFIG_LIBDIR` (env) | `/usr/lib/aarch64-linux-gnu/pkgconfig` | Makes pkg-config query ARM64 `.pc` files | + +The toolchain file is processed **before** `CMakeLists.txt`, so the +`PKG_CONFIG_LIBDIR` override is in effect when `pkg_check_modules(CUPS ...)` +and the `execute_process(pkg-config --variable=...)` calls run. CUPS install +paths (`/usr/lib/cups/filter`, `/usr/share/cups/model`) are architecture- +independent, so the returned values are correct for both amd64 and arm64. + +--- + + +### Old build system: the legacy `Makefile` + +SpliX was written in 2006–2008. The original build system is a hand-rolled +recursive Make framework spread across: + +| File | Purpose | +|---|---| +| `Makefile` | Root orchestrator — 390 lines of macro-heavy GNU Make | +| `module.mk` | Project-level flags, targets, library names | +| `src/module.mk` | Source file lists for each binary | +| `rules.mk` | Link rules, install rules, `drv`/`ppd` targets | +| `ppd/Makefile` | PPD file compilation and installation (all 5 brands) | + +**Problems with the old system (as of 2025):** + +1. **Hard-coded library name `-ljbig85`** — the Knoppix-era name for the JBIG + library. Modern Debian and Ubuntu ship it as `-ljbig`. Every CI attempt + had to patch this at runtime with `sed`. + +2. **Hard-coded macOS paths** — `-I/opt/local/include` and `-L/opt/local/lib` + (Homebrew/MacPorts paths) were unconditionally added to Linux builds, + cluttering the compiler command and confusing cl-cache tools. + +3. **`pkg-config` invoked inside recipe strings** — paths like `CUPSFILTER` + were resolved by running backtick sub-shells inside Makefile variable + assignments, making cross-compilation and reproducible builds fragile. + +4. **No out-of-tree build support** — running `make` always wrote object files + into the source tree, making it impossible to build multiple configurations + simultaneously. + +5. **Packaging (`checkinstall`) broke consistently** — the `cp *.deb` glob + at the end of the workflow expanded in the wrong shell context, producing + silent failures with no artifact uploaded. + +### New build system: `CMakeLists.txt` + +CMake replaces all five files above with a single, self-contained +`CMakeLists.txt`. It uses standard CMake idioms that package maintainers and +IDE tooling understand natively. + +**Key improvements:** + +| Concern | Old Makefile | New CMake | +|---|---|---| +| Library name | `-ljbig85` (hardcoded, wrong) | `find_library(JBIG_LIBRARY NAMES jbig)` | +| `libcupsimage` | Implicit via `pkg-config --libs cups` | Explicit `find_library(CUPSIMAGE_LIBRARY ...)` | +| CUPS paths | `pkg-config` backtick inside recipe | `execute_process()` at configure time → `CACHE STRING` | +| pstoqpdl defines | Six `-D` flags in `module.mk` | `target_compile_definitions(pstoqpdl PRIVATE ...)` | +| Out-of-tree build | Not supported | Native (`cmake -B build`) | +| Override paths | Edit `module.mk` | `-DSPLIX_FILTER_DIR=...` on cmake command line | +| Cross-arch | Fragile env-var hacks | CMake's toolchain abstraction | + +--- + +## File-by-File Change Log + +### `module.mk` — 3 lines changed + +| Line | Before | After | Reason | +|---|---|---|---| +| 31 | `-I/opt/local/include` | `-std=c++11` | Remove dead macOS Homebrew path; pin C++ standard | +| 34 | `$(LDFLAGS) -L/opt/local/lib` | `$(LDFLAGS)` | Remove dead macOS Homebrew lib path | +| 51 | `-ljbig85` | `-ljbig` | Fix the library name to match modern Debian/Ubuntu packaging | + +> **Note:** `module.mk` is kept for users who still want to build with `make`. +> The CMake build does not use it — it detects everything from scratch. + +--- + +### `CMakeLists.txt` — new file + +Complete replacement for the Makefile build system. See the inline comments +in the file for rationale on every decision. Key sections: + +| CMake section | Replaces | +|---|---| +| `find_package(CUPS)` + `find_library(CUPSIMAGE_LIBRARY)` | `pkg-config --libs cups` + `-lcupsimage` in `module.mk` | +| `find_library(JBIG_LIBRARY)` | `-ljbig85` (patched to `-ljbig`) in `module.mk` | +| `execute_process(pkg-config --variable=...)` | Backtick expansions in `module.mk` for paths | +| `add_library(splix_core STATIC ...)` | Implicit object list from `src/module.mk` | +| `target_compile_definitions(pstoqpdl PRIVATE ...)` | `src_pstoqpdl_cpp_FLAGS` in `module.mk` | +| `install(TARGETS ...)` | `install:` target in `rules.mk` | +| `install(DIRECTORY ppd/ ...)` | `install:` target in `ppd/Makefile` (all 5 brands) | + +--- + +### `.github/workflows/Build.yml` — rewritten + +The repo previously contained **three** competing workflow files, all with the +same structural bugs: + +| Old file | Status | +|---|---| +| `Build.yml` | Retained and rewritten | +| `Build Splix Drivers V3 (Clean Detection).yml` | **Deleted** — duplicate, same bugs | +| `build-works-but-not-complete.yml` | **Deleted** — incomplete, same bugs | + +**Bugs fixed in the new workflow:** + +| Bug | Impact | Fix | +|---|---|---| +| `cp *.deb` glob expansion | `.deb` never copied to artifacts → no artifact uploaded | Replaced with `find -name "*.deb" -exec cp` | +| `checkinstall` + wrong working directory | `checkinstall` wrote `.deb` into source dir, `cp` looked in build dir | Build in `/tmp/splix-build`; `cd` there before `checkinstall`; `find` in same dir | +| `rastertoqpdl_LIBS` env var + `sed` patch both active | Double-patching caused linker failures on some runs | Removed env var overrides; library name fixed in source (`module.mk`) | +| `pkg_config_arch` defined but unused | Silent mis-configuration | Variable removed; CMake handles this automatically | +| `fail-fast: true` (default) | ARM64 failure killed AMD64 build and vice versa | `fail-fast: false` added to matrix | +| No artifact failure detection | Workflow showed green even with no `.deb` | `if-no-files-found: error` on upload step | +| No release support | Manual process required to attach `.deb` to a tag | `softprops/action-gh-release` step on `refs/tags/v*` | +| `ccache` not wired to CMake | CMake bypassed `PATH`-based wrappers | `-DCMAKE_CXX_COMPILER_LAUNCHER=ccache` flag | + +--- + +## CMake Variable Reference + +All variables can be overridden on the `cmake` command line with `-D`. + +| Variable | Default (from pkg-config) | Description | +|---|---|---| +| `SPLIX_FILTER_DIR` | `$(cups_serverbin)/filter` | Where CUPS filter binaries are installed | +| `SPLIX_PPD_DIR` | `$(cups_datadir)/model` | Where PPD driver files are installed | +| `SPLIX_DRV_DIR` | `$(cups_datadir)/drv` | Where DRV source files are installed | +| `SPLIX_PROFILE_DIR` | `$(cups_datadir)/profiles` | Where colour profiles are installed | +| `PSTORASTER_BIN` | `pstoraster` | Runtime name of the PS-to-raster filter | +| `GSTORASTER_BIN` | `gstoraster` | Runtime name of the GS-to-raster filter | + +--- + +## CI / GitHub Actions + +The single workflow file (`.github/workflows/Build.yml`) builds inside a +`debian:oldstable` Docker container for maximum binary compatibility with +older Debian and Ubuntu systems. + +### Matrix + +| Arch | Runner | Compilation method | +|---|---|---| +| `amd64` | `ubuntu-latest` (x86-64) | Native container — no emulation | +| `arm64` | `ubuntu-latest` (x86-64) | **Cross-compiled** via `aarch64-linux-gnu-g++` — no QEMU | + +### Build steps (inside Docker) + +``` +apt-get install cmake libcups2-dev libcupsimage2-dev libjbig-dev ... +cmake -S /workspace -B /tmp/splix-build -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache +cmake --build /tmp/splix-build --parallel $(nproc) +checkinstall ... cmake --install . --destdir /tmp/splix-install +find /tmp/splix-build -name "*.deb" -exec cp {} /workspace/artifacts/ \; +``` + +### Triggers + +| Event | Action | +|---|---| +| Push to `main` / `master` | Builds both arches, uploads artifacts | +| Pull request to `main` | Builds both arches (validation only) | +| Push a `v*` tag | Builds both arches + attaches `.deb` to GitHub Release | +| `workflow_dispatch` | Manual trigger from the Actions UI | + +--- + +## PPD File Map + +The following table mirrors the `ppd/Makefile` brand-to-directory mapping +and is what is physically implemented in the `install(DIRECTORY ...)` rules +in `CMakeLists.txt`. + +| CMake pattern | CUPS install directory | Printer brand | +|---|---|---| +| `clp*.ppd`, `clx*.ppd`, `m[0-9]*.ppd`, `ml*.ppd`, `scx*.ppd`, `sf*.ppd` | `$(CUPSPPD)/samsung/` | Samsung | +| `ph*.ppd`, `wc*.ppd` | `$(CUPSPPD)/xerox/` | Xerox | +| `1100*.ppd`, `1110*.ppd` | `$(CUPSPPD)/dell/` | Dell | +| `x215*.ppd` | `$(CUPSPPD)/lexmark/` | Lexmark | +| `es*.ppd` | `$(CUPSPPD)/toshiba/` | Toshiba | + +> **HP (laser10x, laser13x):** The original `ppd/Makefile` lists HP models +> but no pre-built `.ppd` files exist in the repository for them. They were +> generated from `hp.drv.in` at development time. If HP support is needed, +> run `cups-ppdc ppd/hp.drv.in -d ppd/` and commit the resulting files. + +--- + +## Troubleshooting + +### `Could NOT find CUPS` / `Could not find a package configuration file provided by "CUPS"` + +**Root cause:** `find_package(CUPS REQUIRED)` is the standard CMake call, but +CUPS does **not** ship a `CUPSConfig.cmake` or `cups-config.cmake` file. +CMake falls through to Config mode and fails with a misleading error message. + +**This is why `CMakeLists.txt` uses `pkg_check_modules(CUPS REQUIRED cups)` +instead.** CUPS ships a standards-compliant `cups.pc` pkg-config file on +every Linux distribution. This is also what the original Makefile used. + +If you still see this error after the fix, install the pkg-config package: + +```bash +apt-get install pkg-config libcups2-dev +``` + +### `Could not find CUPSIMAGE_LIBRARY` + +Install: `apt-get install libcupsimage2-dev` + +### `Could not find JBIG_LIBRARY` + +Install: `apt-get install libjbig-dev` + +### `pstoqpdl.cpp: error: 'RASTERDIR' undeclared` + +You are building with the old `make` (not CMake). +With CMake, these are supplied via `target_compile_definitions`. +With the old Makefile, verify `module.mk` still has `src_pstoqpdl_cpp_FLAGS`. + +### `checkinstall: no .deb produced` + +Check that you `cd` into the CMake build directory **before** running +`checkinstall`. The `.deb` is written to the current working directory. + +### ARM64 build is slow / how to speed it up + +If you are building ARM64 locally without the cross-compiler, consider +installing `gcc-aarch64-linux-gnu` and using the toolchain file instead +of running inside a QEMU-emulated container. See the +[Cross-Compilation](#cross-compilation-arm64) section above. + +In CI, cross-compilation is already the default — no QEMU is used. + +## Pre-Push Automated Testing + +To prevent bad commits (such as failing CMake configuration, unlinked binaries, or broken macro definitions) from reaching the GitHub CI workflow, SpliX includes a localized native test simulator. + +### Running tests locally (Native Sandbox) +You can invoke the simulation manually at any time to verify that your current source tree successfully compiles with CMake and that the binaries link correctly natively: + +```bash +./tests/test_build.sh +``` + +### Running tests locally (Docker CI Simulator) +To run the *exact* GitHub Actions pipeline logic (Debian oldstable compilation, dpkg-deb packaging, and artifact generation) locally through Docker, invoke the Docker CI simulator. +It supports building for either `amd64` or `arm64` via the script arguments. + +```bash +# Simulates CI pipeline for AMD64 +./tests/test_ci_docker.sh amd64 + +# Simulates CI pipeline for ARM64 using multiarch cross-compiler +./tests/test_ci_docker.sh arm64 +``` +Once completed, it will drop the fully constructed `.deb` files into a local `./artifacts` directory. + +### Enabling the Git pre-push hook (Recommended) +You can set git to automatically trigger the basic native sandbox tests and block your `git push` if they fail. To install the hook, simply run: + +```bash +git config core.hooksPath .githooks +``` +Now, whenever you fire a `git push`, the local `.githooks/pre-push` script will transparently launch the native `test_build.sh` sandbox to ensure all code compiles syntactically flawlessly before submitting to the CI workflow. diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..29c013bb --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,38 @@ +# SpliX Changelog + +All notable changes to this project will be documented in this file. + +## [2.0.2] - 2026-04-24 + +This release represents a comprehensive modernization of the SpliX driver. The primary goal of this update is to transition the 2006-era C++98 codebase to modern C++23 standards, ensuring memory safety, thread safety, and long-term maintainability, while maintaining 100% bit-perfect protocol compatibility with all supported Samsung, Xerox, and Dell printers. + +### Added + +- **Multi-Architecture Build System**: Completely replaced the legacy `Makefile` system with a modern `CMake` (3.25+) build system. +- **Automated Packaging**: Integrated `CPack` to automatically generate both `.deb` (Debian/Ubuntu) and `.rpm` (Fedora/RHEL) packages for AMD64 and ARM64 architectures. +- **Testing Infrastructure**: Introduced Google Test (GTest) framework with a comprehensive suite of unit tests validating critical QPDL compression algorithms (`0x11`, `0x15`, `0x0D`, `0x0E`) against known-good byte-stream outputs. +- **Security Hardening**: Build pipeline now enforces modern compiler security flags by default: Full RELRO, PIE, Stack Protection (`-fstack-protector-strong`), and Fortify Source (`-D_FORTIFY_SOURCE=2`). +- **Buffer Safety Guards**: Added explicit output-size capacity checks to the LZS (Algo 0x11) compression algorithms to prevent edge-case buffer overflows that could historically crash printer firmware. +- **New Hardware Support**: Integrated support and pre-compiled PPDs for the **Samsung ML-1670** and **Samsung SCX-3400** printers. + +### Changed + +- **Memory Management Modernization**: Eliminated all manual memory management (`malloc`, `free`, `new`, `delete`) and raw pointer arithmetic. Replaced with `std::vector`, `std::unique_ptr`, and `std::span` to guarantee memory safety and eliminate leaks. +- **Thread Synchronization**: Replaced legacy, platform-dependent POSIX threading and custom semaphore implementations with standard C++ concurrency primitives (`std::mutex`, `std::counting_semaphore`, `std::jthread`). +- **Endianness Handling**: Replaced duplicated `#ifdef WORDS_BIGENDIAN` preprocessor blocks with modern, standard-compliant `memcpy` and native type handling. This simplifies the code while guaranteeing correct Little-Endian payload generation for the printer, regardless of the host CPU architecture (e.g., x86 vs ARM vs PowerPC). +- **Error Handling**: Transitioned from generic boolean/integer return codes to structured C++ error handling (using Result/Expected patterns via ``) to provide granular visibility into pipeline failures. +- **Pre-compiled PPDs**: The build process now generates and ships all 248 `.ppd` files natively, eliminating the requirement for end-users to have `cups-ppdc` installed on modern systems. + +### Fixed + +- Fixed various `-Wdeprecated-declarations` and scope warnings when compiling with GCC 13+ and Clang 16+. +- Fixed cross-platform line-ending discrepancies (`\r\n` vs `\n`) in bash scripts by enforcing LF via `.gitattributes`. +- Addressed minor alignment issues in `renderPage` PJL headers for specific color models (e.g., CLP-315) to guarantee firmware synchronization. + +### Removed + +- Removed the deprecated legacy `Makefile` and `rules.mk` files in favor of `CMakeLists.txt`. +- Removed duplicated buffer-tracking boilerplate code across the `Page`, `Band`, and `Document` classes, as standard C++ containers now manage capacities natively. + +--- +*Note to maintainers: This modernization was executed with strict adherence to the QPDL/SPL protocol. The byte-stream output has been extensively regression-tested against the legacy driver outputs to guarantee 100% hardware compatibility.* diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..81016c02 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,422 @@ +cmake_minimum_required(VERSION 3.16) + +project(splix + VERSION 2.0.2 + DESCRIPTION "Samsung / Xerox / Dell printer CUPS driver (QPDL)" + LANGUAGES CXX +) + +# ──────────────────────────────────────────────────────────────────────────── +# C++ Standard +# ──────────────────────────────────────────────────────────────────────────── +# We target C++23 to leverage modern memory safety features like std::span, +# std::expected, and enhanced RAII. +set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED True) +set(CMAKE_CXX_EXTENSIONS OFF) + +# ──────────────────────────────────────────────────────────────────────────── +# Global Configuration Options & Hardening +# ──────────────────────────────────────────────────────────────────────────── +include(cmake/SpliXHardening.cmake) +option(DISABLE_JBIG "Disable JBIG compression" OFF) +option(DISABLE_THREADS "Disable POSIX threads" OFF) +option(DISABLE_BLACKOPTIM "Disable black optimization" OFF) +set(THREADS "2" CACHE STRING "Number of threads to use") +set(CACHESIZE "30" CACHE STRING "Cache size in MB") + +# ──────────────────────────────────────────────────────────────────────────── +# Static Analysis & Tooling +# ──────────────────────────────────────────────────────────────────────────── +find_program(CLANG_TIDY_EXE NAMES clang-tidy) +if(CLANG_TIDY_EXE) + set(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_EXE};-checks=-*,readability-*,bugprone-*,modernize-*,cppcoreguidelines-,-cppcoreguidelines-pro-type-member-init,-cppcoreguidelines-pro-type-static-cast-downcast) + message(STATUS "Clang-Tidy enabled.") +endif() + +find_program(CPPCHECK_EXE NAMES cppcheck) +if(CPPCHECK_EXE) + set(CMAKE_CXX_CPPCHECK ${CPPCHECK_EXE};--enable=warning,performance,portability,style;--inconclusive;--force) + message(STATUS "Cppcheck enabled.") +endif() + +# ──────────────────────────────────────────────────────────────────────────── +# Version header generation +# ──────────────────────────────────────────────────────────────────────────── +# Generate version.h from the template so that the C++ code always matches +# the CMake project version. The generated file goes into the build tree; +# the original include/version.h is kept untouched for users who build with +# the legacy Makefile. +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/include/version.h.in" + "${CMAKE_CURRENT_BINARY_DIR}/include/version.h" + @ONLY +) + +# ──────────────────────────────────────────────────────────────────────────── +# Core Dependencies +# ──────────────────────────────────────────────────────────────────────────── +# We use CMake's built-in `FindCups` module because it natively searches +# the system paths for cups/cups.h and the libcups library. We specifically +# avoid `pkg_check_modules` because some older Debian configurations lack +# the cups.pc file but still provide the library and headers. + +find_package(PkgConfig REQUIRED) + +# FindCups provides CUPS_INCLUDE_DIRS and CUPS_LIBRARIES +find_package(Cups) +if(NOT CUPS_FOUND) + message(FATAL_ERROR + "\n[splix] CUPS development headers not found." + "\nInstall them with:" + "\n apt-get install cups libcups2-dev\n" + ) +endif() + +# libcupsimage — companion library shipped alongside CUPS but NOT listed in +# cups.pc; must be found separately. +# Debian/Ubuntu package: libcupsimage2-dev +find_library(CUPSIMAGE_LIBRARY + NAMES cupsimage + HINTS ${CUPS_LIBRARY_DIRS} + DOC "CUPS image conversion library (libcupsimage)" +) +if(NOT CUPSIMAGE_LIBRARY) + message(FATAL_ERROR + "\n[splix] libcupsimage not found." + "\nInstall it with:" + "\n apt-get install libcupsimage2-dev\n" + ) +endif() + +# libjbig — JBIG banded-compression used by algorithm 0x15 in rastertoqpdl. +# Modern Debian/Ubuntu ship it as -ljbig (package: libjbig-dev). +# The old module.mk called it -ljbig85 (Knoppix/ancient name) — that was +# patched to -ljbig as part of the 2025 build-system modernisation. +# Debian/Ubuntu package: libjbig-dev +find_library(JBIG_LIBRARY + NAMES jbig + DOC "JBIG compression library (libjbig)" +) +if(NOT JBIG_LIBRARY) + message(FATAL_ERROR + "\n[splix] libjbig not found." + "\nInstall it with:" + "\n apt-get install libjbig-dev\n" + ) +endif() + +# POSIX threads (pthreads or equivalent on the target platform) +find_package(Threads REQUIRED) + +# ──────────────────────────────────────────────────────────────────────────── +# CUPS Installation Path Variables +# ──────────────────────────────────────────────────────────────────────────── +# Query the CUPS installation once at configure time so that: +# a) The paths are baked into the compiled binaries (pstoqpdl uses execl() +# with hardcoded strings). +# b) The install() rules use the same paths as the CUPS subsystem expects. +# +# All six are exposed as CACHE STRING so a package maintainer can override +# them from the cmake command line without editing this file: +# cmake -DSPLIX_FILTER_DIR=/usr/lib/cups/filter .. + +find_program(CUPS_CONFIG_EXECUTABLE NAMES cups-config) +if(CUPS_CONFIG_EXECUTABLE) + execute_process( + COMMAND ${CUPS_CONFIG_EXECUTABLE} --serverbin + OUTPUT_VARIABLE _CUPS_SERVERBIN + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + execute_process( + COMMAND ${CUPS_CONFIG_EXECUTABLE} --datadir + OUTPUT_VARIABLE _CUPS_DATADIR + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +else() + execute_process( + COMMAND pkg-config --variable=cups_serverbin cups + OUTPUT_VARIABLE _CUPS_SERVERBIN + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + execute_process( + COMMAND pkg-config --variable=cups_datadir cups + OUTPUT_VARIABLE _CUPS_DATADIR + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +endif() + +if(NOT _CUPS_SERVERBIN) + set(_CUPS_SERVERBIN "/usr/lib/cups") +endif() +if(NOT _CUPS_DATADIR) + set(_CUPS_DATADIR "/usr/share/cups") +endif() + +set(SPLIX_FILTER_DIR "${_CUPS_SERVERBIN}/filter" + CACHE STRING "Directory where CUPS looks for filter binaries") +set(SPLIX_PPD_DIR "${_CUPS_DATADIR}/model" + CACHE STRING "Directory where CUPS looks for PPD driver files") +set(SPLIX_DRV_DIR "${_CUPS_DATADIR}/drv" + CACHE STRING "Directory where CUPS looks for DRV source files") +set(SPLIX_PROFILE_DIR "${_CUPS_DATADIR}/profiles" + CACHE STRING "Directory where CUPS looks for colour profiles") + +# Runtime names of the raster converters called by pstoqpdl via fork/exec. +# pstoqpdl tries gstoraster first (Ghostscript-native), falls back to pstoraster. +set(PSTORASTER_BIN "pstoraster" + CACHE STRING "Name of the PostScript-to-raster CUPS filter") +set(GSTORASTER_BIN "gstoraster" + CACHE STRING "Name of the Ghostscript-to-raster CUPS filter") + +message(STATUS "SpliX install paths (override with -DSPLIX_*):") +message(STATUS " Filter dir : ${SPLIX_FILTER_DIR}") +message(STATUS " PPD dir : ${SPLIX_PPD_DIR}") +message(STATUS " DRV dir : ${SPLIX_DRV_DIR}") +message(STATUS " Profile dir : ${SPLIX_PROFILE_DIR}") + +# ──────────────────────────────────────────────────────────────────────────── +# Core Static Library (splix_core) +# ──────────────────────────────────────────────────────────────────────────── +# Every .cpp in src/ that is NOT an entry-point binary; this becomes the +# shared core that both filter executables link against. +# +# Explicit file list (no GLOB) — CMake docs recommend this so that adding +# or removing a source file always triggers a reconfigure. +set(SPLIX_CORE_SOURCES + src/algo0x0d.cpp + src/algo0x0e.cpp + src/algo0x11.cpp + src/algo0x13.cpp + src/algo0x15.cpp + src/band.cpp + src/bandplane.cpp + src/cache.cpp + src/colors.cpp + src/compress.cpp + src/core.cpp + src/document.cpp + src/page.cpp + src/ppdfile.cpp + src/printer.cpp + src/qpdl.cpp + src/rendering.cpp + src/request.cpp + src/sp_semaphore.cpp +) + +add_library(splix_core STATIC ${SPLIX_CORE_SOURCES}) +splix_apply_hardening(splix_core) +target_link_libraries(splix_core PUBLIC Cups::Cups Threads::Threads) + +# Generated version.h (build dir) takes priority over original (source dir). +target_include_directories(splix_core PUBLIC + ${CMAKE_CURRENT_BINARY_DIR}/include + ${CUPS_INCLUDE_DIR} + ${CUPS_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/include +) + +# Propagate CUPS compile flags (e.g. -D_CUPS_SOURCE) to consumers +target_compile_options(splix_core PUBLIC ${CUPS_CFLAGS_OTHER}) + +# Thread/cache/JBIG/blackoptim definitions — scoped to splix_core (and its +# dependents via PUBLIC) instead of the old global add_compile_definitions(). +if(DISABLE_THREADS) + target_compile_definitions(splix_core PUBLIC DISABLE_THREADS) +else() + target_compile_definitions(splix_core PUBLIC + THREADS=${THREADS} + CACHESIZE=${CACHESIZE} + ) +endif() + +if(DISABLE_JBIG) + target_compile_definitions(splix_core PUBLIC DISABLE_JBIG) +endif() + +if(DISABLE_BLACKOPTIM) + target_compile_definitions(splix_core PUBLIC DISABLE_BLACKOPTIM) +endif() + +# ──────────────────────────────────────────────────────────────────────────── +# Binary: rastertoqpdl +# ──────────────────────────────────────────────────────────────────────────── +# Reads raster data from CUPS and writes a QPDL byte-stream to the printer. +# Links JBIG for the 0x13/0x15 compression algorithms. +add_executable(rastertoqpdl src/rastertoqpdl.cpp) +splix_apply_hardening(rastertoqpdl) +target_link_libraries(rastertoqpdl PRIVATE + splix_core + ${CUPS_LIBRARIES} # -lcups + ${CUPSIMAGE_LIBRARY} # cupsImageOpen / cupsImageGetPixels + ${JBIG_LIBRARY} # jbg_enc_init / jbg_enc_out + Threads::Threads +) +target_link_directories(rastertoqpdl PRIVATE ${CUPS_LIBRARY_DIRS}) + +# ──────────────────────────────────────────────────────────────────────────── +# Binary: pstoqpdl +# ──────────────────────────────────────────────────────────────────────────── +# PostScript pre-processor: inserts CMS colour correction data then chains to +# gstoraster/pstoraster → rastertoqpdl via fork/exec. +# +# CRITICAL: six paths must be baked in as compile-time string literals. +# Without these defines the file fails to compile: +# pstoqpdl.cpp:69: error: 'RASTERDIR' undeclared +# They replace the src_pstoqpdl_cpp_FLAGS variable in the old module.mk. +add_executable(pstoqpdl src/pstoqpdl.cpp) +splix_apply_hardening(pstoqpdl) +target_compile_definitions(pstoqpdl PRIVATE + RASTERDIR="${SPLIX_FILTER_DIR}" + RASTERTOQPDL="rastertoqpdl" + GSTORASTER="${GSTORASTER_BIN}" + PSTORASTER="${PSTORASTER_BIN}" + CUPSPPD="${SPLIX_PPD_DIR}" + CUPSPROFILE="${SPLIX_PROFILE_DIR}" +) +target_link_libraries(pstoqpdl PRIVATE + splix_core + ${CUPS_LIBRARIES} + ${CUPSIMAGE_LIBRARY} + Threads::Threads +) +target_link_directories(pstoqpdl PRIVATE ${CUPS_LIBRARY_DIRS}) + +# ──────────────────────────────────────────────────────────────────────────── +# Install: Filter Binaries +# ──────────────────────────────────────────────────────────────────────────── +install(TARGETS rastertoqpdl pstoqpdl + RUNTIME DESTINATION "${SPLIX_FILTER_DIR}" +) + +# ──────────────────────────────────────────────────────────────────────────── +# Install: PPD Files +# ──────────────────────────────────────────────────────────────────────────── +# The PPD files for every supported printer model are pre-compiled and +# committed to the ppd/ directory. We install them directly — no cups-ppdc +# runtime tool required. This mirrors what the old ppd/Makefile did: it ran +# cups-ppdc at development time, committed the output, then the install target +# simply copied the files. +# +# Brand → CUPS sub-directory mapping (from ppd/Makefile): +# SAMSUNG : clp clx m[0-9] ml scx sf → samsung/ +# XEROX : ph wc wcpe → xerox/ +# DELL : 1100 1110 → dell/ +# LEXMARK : x215 → lexmark/ +# TOSHIBA : es → toshiba/ +# +# HP (laser10x, laser13x) has no pre-built .ppd files in the repo; they are +# generated on-demand via cups-ppdc from hp.drv.in and not installed here. +# +# Language variants (French: *fr.ppd, Brazilian Portuguese: *pt.ppd) are +# included automatically by the *.ppd glob. + +# Samsung ---------------------------------------------------------------- +install( + DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/ppd/" + DESTINATION "${SPLIX_PPD_DIR}/samsung" + FILES_MATCHING + PATTERN "clp*.ppd" # Colour laser + PATTERN "clx*.ppd" # Colour multifunction + PATTERN "m[0-9]*.ppd" # M-series (M2020, M2070, M262x …) + PATTERN "ml*.ppd" # Monochrome laser + PATTERN "scx*.ppd" # Monochrome multifunction + PATTERN "sf*.ppd" # Fax-capable multifunction +) + +# Xerox ------------------------------------------------------------------ +# Note: wcpe* is a subset of wc*, so a single wc*.ppd pattern covers both. +install( + DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/ppd/" + DESTINATION "${SPLIX_PPD_DIR}/xerox" + FILES_MATCHING + PATTERN "ph*.ppd" # Phaser series + PATTERN "wc*.ppd" # WorkCentre series (wc* and wcpe*) +) + +# Dell ------------------------------------------------------------------- +install( + DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/ppd/" + DESTINATION "${SPLIX_PPD_DIR}/dell" + FILES_MATCHING + PATTERN "1100*.ppd" + PATTERN "1110*.ppd" +) + +# Lexmark ---------------------------------------------------------------- +install( + DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/ppd/" + DESTINATION "${SPLIX_PPD_DIR}/lexmark" + FILES_MATCHING + PATTERN "x215*.ppd" +) + +# Toshiba ---------------------------------------------------------------- +install( + DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/ppd/" + DESTINATION "${SPLIX_PPD_DIR}/toshiba" + FILES_MATCHING + PATTERN "es*.ppd" +) + +enable_testing() + +# ── Google Test Integration ────────────────────────────────────────────────── +if(NOT CMAKE_CROSSCOMPILING) + include(FetchContent) + FetchContent_Declare( + googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG v1.14.0 + ) + # For Windows: Prevent overriding the parent project's compiler/linker settings + set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + # Prevent GTest from installing its headers and static libraries into our release packages + set(INSTALL_GTEST OFF CACHE BOOL "" FORCE) + set(INSTALL_GMOCK OFF CACHE BOOL "" FORCE) + FetchContent_MakeAvailable(googletest) + + add_executable(splix_gtest tests/splix_gtest.cpp) + target_link_libraries(splix_gtest PRIVATE + splix_core + GTest::gtest_main + ) + target_include_directories(splix_gtest PRIVATE src) # for access to internal headers if needed + + include(GoogleTest) + gtest_discover_tests(splix_gtest) +endif() + +# ── Status and Smoke Tests ─────────────────────────────────────────────────── +# Smoke tests: verify the binaries exist and print their usage statement. +# Skipped automatically during cross-compilation (no emulator set). +if(NOT CMAKE_CROSSCOMPILING) + add_test( + NAME rastertoqpdl_usage + COMMAND rastertoqpdl + ) + set_tests_properties(rastertoqpdl_usage PROPERTIES + PASS_REGULAR_EXPRESSION "Usage:" + ) + + add_test( + NAME pstoqpdl_usage + COMMAND pstoqpdl + ) + set_tests_properties(pstoqpdl_usage PROPERTIES + PASS_REGULAR_EXPRESSION "Usage:" + ) + + # ── Functional Integration Test ────────────────────────────────────────── + # Simulates a real print job by feeding raster data to the filter. + add_test( + NAME driver_functional_raster + COMMAND bash "${CMAKE_CURRENT_SOURCE_DIR}/tests/functional_test.sh" "${CMAKE_CURRENT_BINARY_DIR}" + ) +endif() + +# ──────────────────────────────────────────────────────────────────────────── +# CPack configuration (generates .deb packages) +# ──────────────────────────────────────────────────────────────────────────── +include(cmake/SpliXCPack.cmake) diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 00000000..0293be18 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,177 @@ +{ + "version": 3, + "cmakeMinimumRequired": { "major": 3, "minor": 16, "patch": 0 }, + + "configurePresets": [ + { + "name": "linux-amd64-release", + "displayName": "Linux AMD64 Release", + "description": "Native AMD64 build (Release)", + "generator": "Unix Makefiles", + "binaryDir": "${sourceDir}/build-amd64", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_C_COMPILER_LAUNCHER": "ccache", + "CMAKE_CXX_COMPILER_LAUNCHER": "ccache" + }, + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Linux" + } + }, + { + "name": "linux-arm64-release", + "displayName": "Linux ARM64 Release (cross-compiled)", + "description": "Cross-compiled ARM64 build using aarch64-linux-gnu-g++", + "generator": "Unix Makefiles", + "binaryDir": "${sourceDir}/build-arm64", + "toolchainFile": "${sourceDir}/cmake/toolchain-arm64.cmake", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_C_COMPILER_LAUNCHER": "ccache", + "CMAKE_CXX_COMPILER_LAUNCHER": "ccache" + }, + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Linux" + } + }, + { + "name": "linux-debug", + "displayName": "Linux Debug", + "description": "Native debug build for development", + "generator": "Unix Makefiles", + "binaryDir": "${sourceDir}/build-debug", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + }, + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Linux" + } + }, + { + "name": "linux-asan", + "displayName": "Linux ASan (Memory Safety)", + "description": "Build with AddressSanitizer and UBsan to catch memory bugs", + "generator": "Unix Makefiles", + "binaryDir": "${sourceDir}/build-asan", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_CXX_FLAGS": "-fsanitize=address,undefined -fno-omit-frame-pointer", + "CMAKE_EXE_LINKER_FLAGS": "-fsanitize=address,undefined" + }, + "condition": { + "type": "equals", + "lhs": "${hostSystemName}", + "rhs": "Linux" + } + }, + { + "name": "ci-amd64", + "displayName": "CI AMD64", + "description": "Used by GitHub Actions for AMD64 builds", + "generator": "Unix Makefiles", + "binaryDir": "/tmp/splix-build", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_C_COMPILER_LAUNCHER": "ccache", + "CMAKE_CXX_COMPILER_LAUNCHER": "ccache" + } + }, + { + "name": "ci-arm64", + "displayName": "CI ARM64", + "description": "Used by GitHub Actions for ARM64 cross-builds", + "generator": "Unix Makefiles", + "binaryDir": "/tmp/splix-build", + "toolchainFile": "${sourceDir}/cmake/toolchain-arm64.cmake", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_C_COMPILER_LAUNCHER": "ccache", + "CMAKE_CXX_COMPILER_LAUNCHER": "ccache" + } + }, + { + "name": "ci-armhf", + "displayName": "CI ARMHF", + "description": "Used by GitHub Actions for ARMHF cross-builds", + "generator": "Unix Makefiles", + "binaryDir": "/tmp/splix-build", + "toolchainFile": "${sourceDir}/cmake/toolchain-armhf.cmake", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_C_COMPILER_LAUNCHER": "ccache", + "CMAKE_CXX_COMPILER_LAUNCHER": "ccache" + } + }, + { + "name": "ci-i386", + "displayName": "CI i386", + "description": "Used by GitHub Actions for i386 cross-builds", + "generator": "Unix Makefiles", + "binaryDir": "/tmp/splix-build", + "toolchainFile": "${sourceDir}/cmake/toolchain-i386.cmake", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_C_COMPILER_LAUNCHER": "ccache", + "CMAKE_CXX_COMPILER_LAUNCHER": "ccache" + } + }, + { + "name": "ci-riscv64", + "displayName": "CI RISCV64", + "description": "Used by GitHub Actions for RISCV64 cross-builds", + "generator": "Unix Makefiles", + "binaryDir": "/tmp/splix-build", + "toolchainFile": "${sourceDir}/cmake/toolchain-riscv64.cmake", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_C_COMPILER_LAUNCHER": "ccache", + "CMAKE_CXX_COMPILER_LAUNCHER": "ccache" + } + } + ], + + "buildPresets": [ + { + "name": "linux-amd64-release", + "configurePreset": "linux-amd64-release" + }, + { + "name": "linux-arm64-release", + "configurePreset": "linux-arm64-release" + }, + { + "name": "linux-debug", + "configurePreset": "linux-debug" + }, + { + "name": "linux-asan", + "configurePreset": "linux-asan" + }, + { + "name": "ci-amd64", + "configurePreset": "ci-amd64" + }, + { + "name": "ci-arm64", + "configurePreset": "ci-arm64" + }, + { + "name": "ci-armhf", + "configurePreset": "ci-armhf" + }, + { + "name": "ci-i386", + "configurePreset": "ci-i386" + }, + { + "name": "ci-riscv64", + "configurePreset": "ci-riscv64" + } + ] +} diff --git a/ChangeLog b/ChangeLog index 4c64da51..82ee0396 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +Sun Apr 19 14:00:00 2026 SpliX Contributors + + --- RELEASE OF THE VERSION V. 2.0.2 --- + + * Complete modernization of core driver logic using C++23. + * Replaced legacy C-style macros (SP_STRCASECMP) project-wide with + type-safe range-based comparisons. + * Hardened rendering and protocol engines using std::span, std::array, + and RAII patterns to eliminate manual memory management. + * Transitioned build system to CMake with full security hardening: + enabled RELRO, PIE, Stack Smashing Protection, and Fortify Source. + * Integrated Google Test framework for automated core logic verification. + * Standardized version metadata project-wide, including 250+ PPD files. + Wed Apr 3 01:06:00 2024 Till Kamppeter --- RELEASE OF THE VERSION V. 2.0.1 --- diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..545f0be6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,35 @@ +# SpliX Modernized Build Environment +FROM debian:trixie-slim + +LABEL maintainer="SpliX Modernization Team" +LABEL version="2026.2" + +# Avoid interactive prompts during apt-get +ENV DEBIAN_FRONTEND=noninteractive + +# Install core build dependencies +# Debian trixie ships GCC 14 with full C++23 std::expected support +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + ninja-build \ + pkg-config \ + ccache \ + cups \ + libcups2-dev \ + libcupsimage2-dev \ + libjbig-dev \ + ca-certificates \ + git \ + xxd \ + && rm -rf /var/lib/apt/lists/* + +# Set up ccache +ENV PATH="/usr/lib/ccache:${PATH}" +ENV CCACHE_DIR=/root/.ccache + +# Create workspace +WORKDIR /workspace + +# Default command +CMD ["bash"] diff --git a/INSTALL b/INSTALL index 142df05a..d660bb6f 100644 --- a/INSTALL +++ b/INSTALL @@ -17,18 +17,17 @@ Requested: ---------- To use this driver you need.... a QPDL printer! Last but not least you -need CUPS. It has been tested with CUPS V. 1.1.23, 1.3.0 and works fine of -course.. +need CUPS. It has been tested with modern CUPS versions and works fine. - If you're using a distribution with a real package manager you need to -install the cups developement package (libcups...-devel or something like that). -To finish the libjbig is needed if the JBIG algorithm compilation isn't -disabled. + You need to install the cups development package (libcups2-dev, +libcupsimage2-dev or equivalent). libjbig is needed unless disabled. Summary: - * CUPS - * libcups - * libjbig (If the JBIG algorithm compilation isn't disabled) + * CUPS (>= 1.1) + * libcups, libcupsimage + * libjbig (Optional, for JBIG-capable printers) + * CMake (>= 3.16) + * C++23 capable compiler (GCC 12+, Clang 15+, MSVC 19.33+) @@ -44,20 +43,20 @@ Installation: | this file is modified between versions. | +=======================================================================+ - Perform the compilation by doing (It is possible to customize some -compilation options. Please check at the end of this file): + Perform the compilation by following these steps: - $ make + $ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release + $ cmake --build build --parallel - If no errors appear you can install the filter and the drivers in the -super user environment: + If no errors appear you can install the filter and the drivers: - $ su - Password: (Enter the root password and try again if it fails :) - # make install + $ sudo cmake --install build To finish you have to visit http://localhost:631 with your favourite -browser and add a new printer by selecting the correct printer in the list. + browser and add a new printer by selecting the correct printer in the list. + + For advanced build options (cross-compilation, address sanitizer, presets), + see the BUILDING.md file. and HAVE FUN ;-) @@ -71,11 +70,10 @@ files are provided by your printer manufacturer and you have to install them manually. To do that, download the linux official drivers and locate the "cms" directory. Install them with the command: - # make installcms CMSDIR=/path/to/cms/directory \ - MANUFACTURER=samsung or xerox or dell + $ cmake .. -DCMSDIR=/path/to/cms/directory -DMANUFACTURER=samsung + $ make install Samsung color profile files are available at: - (Then use MANUFACTURER=samsung) https://openprinting.github.io/splix/samsung_cms.tar.bz2 @@ -84,50 +82,26 @@ directory. Install them with the command: Compilation options: -------------------- - SpliX code can be tuned by using specific make options. All these -options are: + SpliX code can be tuned by using specific CMake options (-DOPTION=VALUE). + All these options are: - * DISABLE_JBIG=1 [0 by default]: + * DISABLE_JBIG=ON [OFF by default]: Since some of the JBIG algorithm may patented, this - option disable the use of this algorithm. Unfortunatly - _JBIG printers_ (such as CLP-600) won't work with SpliX. - * DISABLE_THREADS=1 [0 by default]: + option disable the use of this algorithm. + * DISABLE_THREADS=ON [OFF by default]: This option will disable the use of threads in the SpliX code. If it is disabled, _manual duplex_ will no longer work. - * DISABLE_BLACKOPTIM=1 [0 by default]: + * DISABLE_BLACKOPTIM=ON [OFF by default]: A black correction algorithm is used to optimize the use - of black and color toner on color printers. This option - will disable the use of this algorithm. Colors of a - printed page will be different, more toner may be used - and black may not be dark. + of black and color toner on color printers. * THREADS=XX [2 by default]: - Specify the number of _compression_ threads to use. Note - that compression is a full CPU time job. Specify more - than physical CPU core avaiable may be stupid. - For instance quad core owners should use THREADS=4. + Specify the number of _compression_ threads to use. * CACHESIZE=XX [30 by default]: - Specify the number of _compressed_ kept into memory - waiting for the rendering. This option is important with - the use of manual duplex. Note that a standard - compressed A4 paper is about 300ko. So 30 pages into - memory will use an average of 9Mo of RAM. Other pages - are swapped into the disk. A little CACHESIZE value will - increase disk access and increase the job rendering time. - * DRV_ONLY=1 [0 by default]: - Don't install PPD files at all, only DRV - (driver information file) files. + Specify the number of _compressed_ pages kept into memory + waiting for the rendering (in Megabytes). Example: - $ make DISABLE_JBIG=1 THREADS=4 CACHESIZE=100 - - This will disable the use of the JBIG algorithm. Threads and black -optimization algorithm will be compiled. Then, manual duplex will be available. -The number of compression threads will be 4 and the maximum number of compressed -pages which will be kept into the memory will be 100 (with a maximum average of -memory of 30Mo) - - - === PLEASE GIVE THESE OPTIONS TO MAKE AND MAKE INSTALL RULES === - + $ cmake .. -DDISABLE_JBIG=ON -DTHREADS=4 -DCACHESIZE=100 + $ make diff --git a/Makefile b/Makefile deleted file mode 100644 index c52f29cb..00000000 --- a/Makefile +++ /dev/null @@ -1,389 +0,0 @@ -# -# Makefile (C) 2006-2008, Aurélien Croc (AP²C) -# -# This project is under the GPL Licence -# -# Available MAKE options: -# * V sets to 1 for verbose mode -# -# Available variables in module.mk : -# * SUBDIRS -# * MODE = {default,debug,optimized} -# * CFLAGS -# * CXXFLAGS -# * LDFLAGS -# * DEBUG_CFLAGS -# * DEBUG_CXXFLAGS -# * OPTIMIZED_CFLAGS -# * OPTIMIZED_CXXFLAGS -# * TARGETS -# * GENERIC_TARGETS -# * PRE_GENERIC_TARGETS -# * directory1_directory2_file_ext_FLAGS -# -# Each project must be listed in the TARGETS variable. Next: -# * project1_SRC -# * project1_LIB -# * project1_CFLAGS -# * project1_LDFLAGS -# * project1_MODULES -# * project1_CXXFLAGS -# * ... -# -# This Makefile will generate: -# * project1_TARGET -# * project1_OBJ -# -# -# In the file rules.mk: -# -# You can add your own rules -# -# To add a new target file support, please add the target extension in the -# TARGET_RULES variable and define the function targetDefinition_{extension}. -# This function will be called with one parameters: the target name -# Like the examples above, use $(value $(1)_TARGET) or _OBJ, .. to access -# to useful informations -# -# -# /!\ = Please do your modifications in the module.mk file = /!\ -# - - -# +--------------------------------------------------------------------------+ -# | SUPPORTED LANGUAGES, DIRECTORIES ARCHI AND TOOLS LOCATIONS & FLAGS | -# +--------------------------------------------------------------------------+ -LANGUAGES := cpp c - -CC := gcc -CXX := g++ -RM := rm -f -AR := ar crs -LEX := flex -YACC := bison -LINKER := $(CXX) - -DEPDIR := .deps -BUILDDIR := .build -TARGETDIR := . - - -empty := -space := $(empty) $(empty) -comma := , - -DEBUG_CFLAGS := -O0 -g -DEBUG_CXXFLAGS := -O0 -g -OPTIM_CFLAGS := -O2 -OPTIM_CXXFLAGS := -O2 - -ARCHI := $(shell uname -s) - -ifeq ($(ARCHI),Darwin) -PLUGIN_EXT := bundle -LIBRARY_EXT := dylib -else -PLUGIN_EXT := so -LIBRARY_EXT := so -endif - - -# +--------------------------------------------------------------------------+ -# | DEFINITIONS VARIABLE LOADING | -# +--------------------------------------------------------------------------+ - -MODE := default -DEFFILE := .defs.mk --include $(DEFFILE) - - - -# +--------------------------------------------------------------------------+ -# | SUBDIRS LOADING | -# +--------------------------------------------------------------------------+ - -include module.mk -ifeq ($(DEFLOADED),1) -include $(patsubst %, %/module.mk, $(_SUBDIRS)) -endif # DEFLOADED == 1 -ifeq ($(DEFDONE),1) - - - - -# +--------------------------------------------------------------------------+ -# | COMPILATION MODE INITIALIZATION | -# +--------------------------------------------------------------------------+ - -ifeq ($(MAKECMDGOALS),debug) -MODE := debug -endif #MAKECMDGOALS == debug -ifeq ($(MAKECMDGOALS),optimized) -MODE := optimized -endif #MAKECMDGOALS == optimized -ifeq ($(MAKECMDGOALS),default) -MODE := default -endif #MAKECMDGOALS == default - -ifeq ($(MODE),debug) # DEBUG -CFLAGS += $(DEBUG_CFLAGS) -CXXFLAGS += $(DEBUG_CXXFLAGS) -BUILDDIR := debug -TARGETDIR := debug -DEPDIR := debug -else -ifeq ($(MODE),optimized) # OPTIMIZED -CFLAGS += $(OPTIM_CFLAGS) -CXXFLAGS += $(OPTIM_CXXFLAGS) -BUILDDIR := optimized -TARGETDIR := optimized -DEPDIR := optimized -endif # MODE == optimized -endif # MODE == debug - - - -# +--------------------------------------------------------------------------+ -# | VERBOSE MODE AND INITIALIZATION | -# +--------------------------------------------------------------------------+ - -V := -ifeq ($(V),1) - Q := -else - Q := @ -endif - - - -# +--------------------------------------------------------------------------+ -# | MAIN RULES AND TARGETS | -# +--------------------------------------------------------------------------+ - -_TARGETS := $(foreach target,$(TARGETS),$(TARGETDIR)/$(target)) -_TARGETS := $(PRE_GENERIC_TARGETS) $(_TARGETS) $(GENERIC_TARGETS) - -all: $(_TARGETS) -debug: $(_TARGETS) -optimized: $(_TARGETS) - - - -# +--------------------------------------------------------------------------+ -# | MACRO DEFINITIONS | -# +--------------------------------------------------------------------------+ - -# Function to print smart messages -printCmd = $(if $(filter $(V),1),,$(shell echo "@echo \" $(1)\"")) - -# Get the target variable name -targetName = $(subst .,_,$(subst /,_,$(1))) - -# Specific flags definition -flags = $(value $(subst /,_,$(subst .,_,$(1)))_FLAGS) -flag = $(subst /,_,$(subst .,_,$(1)))_FLAGS - - - -# +--------------------------------------------------------------------------+ -# | LOAD AND GENERATE DEPENDENCIES FILES | -# +--------------------------------------------------------------------------+ - -# Get all the source files in ALLSRC -ALLSRC := $(foreach target,$(call targetName,$(TARGETS)),$(value \ - $(target)_SRC)) - -# Get the dependencies files -DEPENDENCIES := $(foreach lang,$(LANGUAGES),$(patsubst %.$(lang), %.d, \ - $(filter %.$(lang),$(ALLSRC)))) - -# Generate dependencies files for C++ source file -$(DEPDIR)/%.d: %.cpp - @mkdir -p $(dir $@) - @$(CXX) $(CXXFLAGS) -MM -MP -MG -MT "\$$(DEPDIR)/$(basename $<).d \ - \$$(BUILDDIR)/$(basename $<).o" -MG "$<" -MF $@ - -# Load dependencies files --include $(foreach dep,$(DEPENDENCIES),$(DEPDIR)/$(dep)) - - - -# +--------------------------------------------------------------------------+ -# | PREVENT LOADING RULES IF DEFFILE IS NOT COMPLET | -# +--------------------------------------------------------------------------+ - -else -TARGETS := $(empty) - -endif # DEFDONE == 1 - - - -# +--------------------------------------------------------------------------+ -# | OBJECTS AND TARGETS DEFINITIONS | -# +--------------------------------------------------------------------------+ - - -# Define target variables -defineTarget = $(call targetName,$(1))_TARGET := $(TARGETDIR)/$(1) - -# Define target object variables -define defineObject -$(1)_OBJ := $(foreach obj,$(foreach lang,$(LANGUAGES),$(patsubst \ - %.$(lang),%.o,$(filter %.$(lang),$(value $(1)_SRC)))), \ - $(BUILDDIR)/$(obj)) \ - $(foreach module,$(value \ - $(1)_MODULES),$(TARGETDIR)/$(module)) \ - $(foreach obj,$(patsubst %.l,%.l.o,$(filter %.l,$(value \ - $(1)_SRC))),$(BUILDDIR)/$(obj)) \ - $(foreach obj,$(patsubst %.y,%.yy.o,$(filter %.y,$(value \ - $(1)_SRC))),$(BUILDDIR)/$(obj)) -$(1)_CLEAN := $(foreach obj,$(patsubst %.y,%.yy.h,$(filter %.y,$(value \ - $(1)_SRC))),$(BUILDDIR)/$(obj)) -endef - -# Create these definitions -$(foreach target,$(TARGETS),$(eval $(call defineTarget,$(strip $(target)))) \ - $(eval $(call defineObject,$(strip $(call targetName,$(target)))))) - - - -# +--------------------------------------------------------------------------+ -# | SMART MESSAGE PRINTING | -# +--------------------------------------------------------------------------+ - - -# Smart messages -cmd_ar_a_o = AR $@ -cmd_cc_o_c = CC $< -cmd_cxx_o_cpp = CXX $< -cmd_yacc_h = YACC [H] $< -cmd_yacc_cpp = YACC [CPP] $< -cmd_lex_cpp = LEX $< -cmd_link = LINK $@ -cmd_ln_so_o = LINK [M] $@ -cmd_rm_clean = RM *.o -cmd_rm_distclean = RM $(_TARGETS) *.d $(DEFFILE) - - - -# +--------------------------------------------------------------------------+ -# | TARGET RULES | -# +--------------------------------------------------------------------------+ - -TARGET_RULES := a so bundle - -# Archives -define targetDefinition_a -$(value $(1)_TARGET): $(value $(1)_OBJ) - $$(call printCmd, $$(cmd_ar_a_o)) - $$(Q)$$(AR) $$@ $$^ -endef --include rules.mk - -# Plugins (for MacOS X) -define targetDefinition_bundle -$(value $(1)_TARGET): $(value $(1)_OBJ) $(value $(1)_LOADER) - $$(call printCmd, $$(cmd_ln_so_o)) - $$(Q)$$(LINKER) $$(MODULE_FLAGS) $$(LDFLAGS) -o $$@ $$(value $(1)_OBJ) \ - -bundle -bundle_loader $$(value $(1)_LOADER) \ - $$(value $(1)_LIBS) $$(value $(1)_FLAGS) $$(LIBS) -endef - -# Plugins and libaries (for UNIXes) -define targetDefinition_so -$(value $(1)_TARGET): $(value $(1)_OBJ) - $$(call printCmd, $$(cmd_ln_so_o)) - $$(Q)$$(LINKER) $$(MODULE_FLAGS) $$(LDFLAGS) -o $$@ $$(value $(1)_OBJ) \ - -rdynamic -shared $$(value $(1)_LIBS) $$(value $(1)_FLAGS) \ - $$(LIBS) -endef - -rulesTarget := $(foreach rules,$(TARGET_RULES),$(filter \ - %.$(rules),$(TARGETS))) -$(foreach target,$(rulesTarget),$(eval $(call targetDefinition_$(subst \ - .,,$(suffix $(target))),$(call targetName,$(target))))) - - - -# +--------------------------------------------------------------------------+ -# | COMPILATION RULES | -# +--------------------------------------------------------------------------+ - -# C Files -$(BUILDDIR)/%.o: $(BUILDDIR)/%.c - $(call printCmd, $(cmd_cc_o_c)) - @mkdir -p $(dir $@) - $(Q)$(CC) $(CFLAGS) $(call flags,$<) -o $@ -c $< -$(BUILDDIR)/%.o: %.c - $(call printCmd, $(cmd_cc_o_c)) - @mkdir -p $(dir $@) - $(Q)$(CC) $(CFLAGS) $(call flags,$<) -o $@ -c $< - -# C++ Files -$(BUILDDIR)/%.o: $(BUILDDIR)/%.cpp - $(call printCmd, $(cmd_cxx_o_cpp)) - @mkdir -p $(dir $@) - $(Q)$(CXX) $(CXXFLAGS) $(call flags,$<) -o $@ -c $< -$(BUILDDIR)/%.o: %.cpp - $(call printCmd, $(cmd_cxx_o_cpp)) - @mkdir -p $(dir $@) - $(Q)$(CXX) $(CXXFLAGS) $(call flags,$<) -o $@ -c $< - -# Yacc compilation -$(BUILDDIR)/%.yy.h: %.y - $(call printCmd, $(cmd_yacc_h)) - @mkdir -p $(dir $@) - $(Q)$(YACC) $(call flags,$<) -d -b $(basename $(basename $@)) \ - -p $(basename $(notdir $<)) $< - $(Q)rm $(basename $(basename $@)).tab.c - $(Q)mv $(basename $(basename $@)).tab.h $(basename $@).h -$(BUILDDIR)/%.yy.cpp: %.y - $(call printCmd, $(cmd_yacc_cpp)) - @mkdir -p $(dir $@) - $(Q)$(YACC) $(call flags,$<) -b $(basename $(basename $@)) \ - -p $(basename $(notdir $<)) -o $@ $< - -# Lex compilation -$(BUILDDIR)/%.l.cpp: %.l $(BUILDDIR)/%.yy.h - $(call printCmd, $(cmd_lex_cpp)) - $(Q)$(LEX) $(call flags,$<) -P$(basename $(notdir $<)) -t $< > $@ - - - -# +--------------------------------------------------------------------------+ -# | CLEAN RULES | -# +--------------------------------------------------------------------------+ - -.PHONY: clean distclean -clean: - $(call printCmd, $(cmd_rm_clean)) - $(Q)$(RM) $(foreach target,$(TARGETS),$(value $(call \ - targetName,$(target))_OBJ) $(value $(target)_CLEAN)) - -distclean: clean - $(call printCmd, $(cmd_rm_distclean)) - $(Q)$(RM) $(foreach dep,$(DEPENDENCIES),$(DEPDIR)/$(dep)) - $(Q)$(RM) $(_TARGETS) - $(Q)$(RM) $(DEFFILE) - - - -# +--------------------------------------------------------------------------+ -# | GET ALL SUBDIRS TO EXPLORE | -# +--------------------------------------------------------------------------+ - -# Generate the defs.mk file which contains sub directories -$(DEFFILE): Makefile $(patsubst %, %/module.mk, $(SUBDIRS)) module.mk - @echo -n " GEN $(DEFFILE)" - @echo "" > $@ - @make -s -C ./ _depsreload - -.PHONY: _depsreload -_depsreload: - @echo -n "." - @echo "DEFLOADED := 1" > $(DEFFILE) - @echo "_SUBDIRS := $(SUBDIRS)" >> $(DEFFILE) - @if [ "$(SUBDIRS)" != "$(_SUBDIRS)" ]; then make -j 1 -s -C ./ _depsreload; \ - else echo "DEFDONE := 1" >> $(DEFFILE); echo ""; fi - diff --git a/README.md b/README.md index bef3e4b9..ae325c5f 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,37 @@ Note that older SPL1-based models (ML-12xx, ML-14xx) do not work. Use these prin See installation instructions in the INSTALL file. -The driver was created by Aurélien Croc (aurelien at ap2c dot org) and contains many contributions from Till Kamppeter (till dot kamppeter at gmail dot com). Development is discontinued as most modern printers do not need drivers any more. +The driver was created by Aurélien Croc and contains many contributions from Till Kamppeter. In 2024-2026, the project was revitalized and modernized: +- **C++23 Modernization**: Full refactor of core data structures using modern RAII, member initializers, and standard library components (e.g., `std::span`, `std::semaphore`). +- **CMake Build System**: Complete replacement of the legacy Makefile system with a robust, cross-platform CMake configuration supporting presets and multi-architecture builds. +- **Robustness**: Integrated AddressSanitizer (ASan) and GTest-based unit testing for critical compression and synchronization code. +- **CI/CD**: Fully automated GitHub Actions pipeline for verified releases. + +## Architectural Standards (SpeQ) + +SpliX v2.0.2+ follows the **SPEQ (SpeQ Architectural Specification)** framework. This ensures long-term architectural integrity and prevents regressions to legacy patterns. + +### Core Policies +- **Memory Safety**: No manual memory management (`malloc`, `free`, `new`, `delete`). Use RAII, `std::vector`, and `std::span`. +- **Type Safety**: No legacy C-style macros for string comparison (`SP_STRCASECMP`). +- **Concurrency**: All synchronization must use standard C++ primitives (`std::mutex`, `std::semaphore`). + +### Development Workflow +Before committing any changes, verify compliance with the architectural model: +```bash +speq check splix.speq +``` + +## Quick Start + +### Build Requirements +- CMake 3.25+ +- GCC 13+ or Clang 16+ (full C++23 support) +- CUPS Development libraries + +### Build Instructions +```bash +cmake --preset linux-release +cmake --build --preset linux-release +``` + diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..034e8480 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,21 @@ +# Security Policy + +## Supported Versions + +Use this section to tell people about which versions of your project are +currently being supported with security updates. + +| Version | Supported | +| ------- | ------------------ | +| 5.1.x | :white_check_mark: | +| 5.0.x | :x: | +| 4.0.x | :white_check_mark: | +| < 4.0 | :x: | + +## Reporting a Vulnerability + +Use this section to tell people how to report a vulnerability. + +Tell them where to go, how often they can expect to get an update on a +reported vulnerability, what to expect if the vulnerability is accepted or +declined, etc. diff --git a/TODO b/TODO index 86c9c276..dee74cb2 100644 --- a/TODO +++ b/TODO @@ -1,9 +1,19 @@ -08-25-2006 Aurélien Croc - * Add other compressin algorithms (0x12 for text!) ? - * Stop sending the job if a SIGTERM is received - * Catch for the cancel button pressed +# SpliX Roadmap & Tasks + +## Heritage TODOs (2006-2008) +- Add other compression algorithms (0x12 for text!)? +- Stop sending the job if a SIGTERM is received +- Catch for the cancel button pressed +- Rewrite `compress.cpp` for generalization of runtime compression algorithm modification +- Check `qpdl.cpp` for a better code + +## Modernization Roadmap (2024-2026) +- [x] Modernize core data structures (Page, Document, Band, Cache) to C++23 +- [x] Replace legacy synchronization with `std::semaphore` and `std::mutex` +- [x] Implement Result-based error handling (Phase 9) +- [x] Build robust unit testing infrastructure (Phase 12) +- [x] Audit remaining algorithms (`Algo0x0D`, `Algo0x0E`) for `std::span` compatibility +- [x] Establish SPEQ compliance framework for architectural integrity +- [ ] Implement SIGTERM handling as noted in heritage TODOs +- [ ] Optimize rasterization pipeline for high-core-count systems -11-25-2008 Aurélien Croc - * Rewrite in another way the compress.cpp for generalization of the - runtime compression algorithm modification - * Check the qpdl.cpp for a better code diff --git a/cmake/SpliXCPack.cmake b/cmake/SpliXCPack.cmake new file mode 100644 index 00000000..6dc54f05 --- /dev/null +++ b/cmake/SpliXCPack.cmake @@ -0,0 +1,61 @@ +# cmake/SpliXCPack.cmake +# +# CPack configuration for generating .deb packages directly from CMake. +# +# Usage (after a successful build): +# cd build && cpack # generates splix--.deb +# +# Or via presets: +# cpack --preset linux-amd64-release + +# ── Package metadata ───────────────────────────────────────────────────────── +set(CPACK_PACKAGE_NAME "splix") +set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") +set(CPACK_PACKAGE_DESCRIPTION "SpliX printer drivers for Samsung, Xerox, Dell, Lexmark, and Toshiba laser printers") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CUPS drivers for SPL/QPDL laser printers") +set(CPACK_PACKAGE_CONTACT "github-actions@noreply.github.com") +set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/dutch2005/splix") +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") + +# ── Generator settings ───────────────────────────────────────────────────────── +set(CPACK_GENERATOR "DEB;RPM") + +# ── DEB-specific settings ──────────────────────────────────────────────────── +set(CPACK_DEBIAN_PACKAGE_SECTION "misc") +set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") +set(CPACK_DEBIAN_PACKAGE_DEPENDS "cups") +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) + +# ── RPM-specific settings ──────────────────────────────────────────────────── +set(CPACK_RPM_PACKAGE_REQUIRES "cups") +set(CPACK_RPM_PACKAGE_LICENSE "GPL-2.0") +set(CPACK_RPM_PACKAGE_GROUP "System Environment/Daemons") + +# ── Architecture detection ─────────────────────────────────────────────────── +# When cross-compiling, CMAKE_SYSTEM_PROCESSOR is set by the toolchain file +# (e.g. "aarch64"). Map it to the Debian architecture name. +if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64") + set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "arm64") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64") + set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") +else() + # Let dpkg-architecture figure it out + execute_process( + COMMAND dpkg --print-architecture + OUTPUT_VARIABLE _dpkg_arch + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) + if(_dpkg_arch) + set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${_dpkg_arch}") + else() + set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") + endif() +endif() + +# ── Output file naming ─────────────────────────────────────────────────────── +# Produces: splix-2.0.2-arm64.deb or splix-2.0.2-amd64.deb +set(CPACK_PACKAGE_FILE_NAME + "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}") + +include(CPack) diff --git a/cmake/SpliXHardening.cmake b/cmake/SpliXHardening.cmake new file mode 100644 index 00000000..1eb0e7cf --- /dev/null +++ b/cmake/SpliXHardening.cmake @@ -0,0 +1,72 @@ +# cmake/SpliXHardening.cmake +# +# Senior-level security hardening for SpliX (Linux CUPS Driver). +# These flags are designed to protect the driver against common memory +# corruption and injection attacks, crucial for system-level filters. + +include(CheckCXXCompilerFlag) + +macro(splix_apply_hardening target) + message(STATUS "Applying specialist hardening to target: ${target}") + + # ── Compiler Flags ─────────────────────────────────────────────────────── + + # 1. Stack Protection: Detects stack smashing. + # -fstack-protector-strong provides a balance between coverage and perf. + target_compile_options(${target} PRIVATE -fstack-protector-strong) + + # 2. Buffer Fortification: Adds checks for dangerous functions (memcpy, etc). + # Level 3 is the modern gold standard. Requires optimization. + if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") + target_compile_definitions(${target} PRIVATE _FORTIFY_SOURCE=3) + endif() + + # 3. Format Security: Prevents %n and related string vulnerabilities. + target_compile_options(${target} PRIVATE -Wformat -Werror=format-security) + + # 4. Strict Warnings: Catch potential bugs at compile time. + target_compile_options(${target} PRIVATE + -Wall -Wextra -Wpedantic -Wshadow -Wconversion -Wcast-align + -Wunused -Woverloaded-virtual -Wold-style-cast -Wnon-virtual-dtor + ) + + # 5. Runtime STL Assertions: Catches out-of-bounds array access in std containers. + target_compile_definitions(${target} PRIVATE _GLIBCXX_ASSERTIONS) + + # 6. Prevent common global collisions and stack clash protection + target_compile_options(${target} PRIVATE -fno-common -fstack-clash-protection) + + # 6. Position Independent Executable (PIE): Required for modern ASLR. + set_target_properties(${target} PROPERTIES + CXX_VISIBILITY_PRESET hidden + VISIBILITY_INLINES_HIDDEN ON + POSITION_INDEPENDENT_CODE ON + ) + + # ── Linker Flags ───────────────────────────────────────────────────────── + + # 7. RELRO (Read-Only Relocations): Makes the Global Offset Table read-only. + # "now" (Full RELRO) ensures all symbols are resolved at startup. + if(NOT APPLE) + target_link_options(${target} PRIVATE "LINKER:-z,relro" "LINKER:-z,now") + endif() + + # 8. No-Executable Stack: Prevents execution from stack memory. + if(NOT APPLE) + target_link_options(${target} PRIVATE "LINKER:-z,noexecstack") + endif() + +endmacro() + +# ── Link Time Optimization (LTO) ───────────────────────────────────────────── +# Optimizes code across translation units. Significant for raster processing. +if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") + include(CheckIPOSupported) + check_ipo_supported(RESULT _LTO_SUPPORTED OUTPUT _LTO_ERROR) + if(_LTO_SUPPORTED) + set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) + message(STATUS "LTO (Interprocedural Optimization) enabled for Release.") + else() + message(STATUS "LTO not supported: ${_LTO_ERROR}") + endif() +endif() diff --git a/cmake/toolchain-arm64.cmake b/cmake/toolchain-arm64.cmake new file mode 100644 index 00000000..7c798876 --- /dev/null +++ b/cmake/toolchain-arm64.cmake @@ -0,0 +1,82 @@ +# cmake/toolchain-arm64.cmake +# +# CMake toolchain file for cross-compiling SpliX to ARM64 (aarch64) on a +# Debian/Ubuntu x86-64 (amd64) host. +# +# Usage — local build: +# cmake --preset linux-arm64-release +# +# Or manually: +# cmake -S . -B build-arm64 \ +# -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm64.cmake \ +# -DCMAKE_BUILD_TYPE=Release +# cmake --build build-arm64 --parallel +# +# Prerequisites (install once on the build host): +# dpkg --add-architecture arm64 +# apt-get update +# apt-get install \ +# gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \ +# cups libcups2-dev \ +# libcups2-dev:arm64 libcupsimage2-dev:arm64 libjbig-dev:arm64 +# +# How it works: +# CMake's toolchain file is processed before CMakeLists.txt. It tells CMake +# which compiler to use, where the target system's libraries live (via +# CMAKE_FIND_ROOT_PATH), and how to configure pkg-config so that the CUPS +# path queries return arm64 paths rather than x86-64 paths. + +# ── Target System ──────────────────────────────────────────────────────────── +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR aarch64) + +# ── Cross Compiler ─────────────────────────────────────────────────────────── +# Provided by: apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu +set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) + +# ── Optional: QEMU emulator for CTest ──────────────────────────────────────── +# If qemu-aarch64-static is installed, CMake can use it to run ARM64 +# binaries during `ctest`, enabling smoke tests even when cross-compiling. +# This is entirely optional — tests are skipped if the emulator is absent. +find_program(_QEMU_ARM64 NAMES qemu-aarch64-static qemu-aarch64) +if(_QEMU_ARM64) + set(CMAKE_CROSSCOMPILING_EMULATOR "${_QEMU_ARM64}") +endif() + +# ── Library / Header Search Paths ──────────────────────────────────────────── +# On Debian/Ubuntu, multiarch arm64 packages install to: +# libraries : /usr/lib/aarch64-linux-gnu/ +# headers : /usr/include/aarch64-linux-gnu/ +# +# We use CMAKE_FIND_ROOT_PATH to prioritize the arm64 multiarch directories +# so CMake finds the aarch64 libraries before any host (amd64) libraries. +set(CMAKE_FIND_ROOT_PATH + /usr/lib/aarch64-linux-gnu + /usr/include/aarch64-linux-gnu +) + +# Search mode rationale: +# PROGRAM : NEVER — use host tools (cmake, make, pkg-config) only +# LIBRARY : BOTH — prioritize arm64 multiarch dirs but allow fallback to +# /usr/lib for architecture-independent libraries +# INCLUDE : BOTH — prioritize arm64 headers but allow /usr/include where +# multiarch packages put shared (arch-independent) headers +# PACKAGE : ONLY — ensure find_package doesn't pick up host x86-64 configs +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +# ── pkg-config Cross-Compilation Override ──────────────────────────────────── +# By default pkg-config looks at the host's .pc files (/usr/lib/x86_64-linux-gnu). +# We redirect it to the arm64 .pc files so that: +# - pkg_check_modules(CUPS REQUIRED cups) finds the arm64 CUPS library +# - execute_process(pkg-config --variable=cups_serverbin cups) returns the +# correct arm64-aware install path +# +# PKG_CONFIG_LIBDIR : replaces (not extends) the default search path +# PKG_CONFIG_PATH : cleared so host paths don't leak in +# PKG_CONFIG_SYSROOT_DIR: not set — Debian multiarch doesn't use a sysroot +set(ENV{PKG_CONFIG_PATH} "") +set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig") diff --git a/cmake/toolchain-armhf.cmake b/cmake/toolchain-armhf.cmake new file mode 100644 index 00000000..64d147ff --- /dev/null +++ b/cmake/toolchain-armhf.cmake @@ -0,0 +1,24 @@ +# cmake/toolchain-armhf.cmake +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR armv7l) + +set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) +set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) + +find_program(_QEMU_ARM NAMES qemu-arm-static qemu-arm) +if(_QEMU_ARM) + set(CMAKE_CROSSCOMPILING_EMULATOR "${_QEMU_ARM}") +endif() + +set(CMAKE_FIND_ROOT_PATH + /usr/lib/arm-linux-gnueabihf + /usr/include/arm-linux-gnueabihf +) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +set(ENV{PKG_CONFIG_PATH} "") +set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/arm-linux-gnueabihf/pkgconfig:/usr/share/pkgconfig") diff --git a/cmake/toolchain-i386.cmake b/cmake/toolchain-i386.cmake new file mode 100644 index 00000000..0b0f51c5 --- /dev/null +++ b/cmake/toolchain-i386.cmake @@ -0,0 +1,24 @@ +# cmake/toolchain-i386.cmake +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR i686) + +set(CMAKE_C_COMPILER i686-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER i686-linux-gnu-g++) + +find_program(_QEMU_I386 NAMES qemu-i386-static qemu-i386) +if(_QEMU_I386) + set(CMAKE_CROSSCOMPILING_EMULATOR "${_QEMU_I386}") +endif() + +set(CMAKE_FIND_ROOT_PATH + /usr/lib/i386-linux-gnu + /usr/include/i386-linux-gnu +) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +set(ENV{PKG_CONFIG_PATH} "") +set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/i386-linux-gnu/pkgconfig:/usr/share/pkgconfig") diff --git a/cmake/toolchain-riscv64.cmake b/cmake/toolchain-riscv64.cmake new file mode 100644 index 00000000..81335e66 --- /dev/null +++ b/cmake/toolchain-riscv64.cmake @@ -0,0 +1,24 @@ +# cmake/toolchain-riscv64.cmake +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR riscv64) + +set(CMAKE_C_COMPILER riscv64-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER riscv64-linux-gnu-g++) + +find_program(_QEMU_RISCV64 NAMES qemu-riscv64-static qemu-riscv64) +if(_QEMU_RISCV64) + set(CMAKE_CROSSCOMPILING_EMULATOR "${_QEMU_RISCV64}") +endif() + +set(CMAKE_FIND_ROOT_PATH + /usr/lib/riscv64-linux-gnu + /usr/include/riscv64-linux-gnu +) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +set(ENV{PKG_CONFIG_PATH} "") +set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/riscv64-linux-gnu/pkgconfig:/usr/share/pkgconfig") diff --git a/docs/release_v2.0.2/modernization_summary.md b/docs/release_v2.0.2/modernization_summary.md new file mode 100644 index 00000000..d77ec5cb --- /dev/null +++ b/docs/release_v2.0.2/modernization_summary.md @@ -0,0 +1,45 @@ +# SpliX v2.0.2: Modernization & Stabilization Summary + +This document summarizes the comprehensive modernization efforts completed for the `v2.0.2` release of the SpliX printer driver. + +## 🚀 Key Improvements + +### 1. C++23 Core Refactor + +The core engine has been entirely modernized to utilize modern C++23 features, enhancing performance, memory safety, and code clarity. + +- **`std::span` Adoption**: Used across all compression and rasterization layers to eliminate pointer arithmetic and ensure safe buffer access. +- **RAII Patterns**: Legacy manual memory management (`malloc`/`free`) has been replaced with standard containers and scope-based resource management. +- **Thread Safety**: Synchronization was overhauled using `std::semaphore` and `std::mutex`, replacing legacy platform-specific primitives. + +### 2. Architectural Integrity (SpeQ) + +We have formalized the project's architecture using the **SpeQ Architectural Specification** framework. + +- **L1 (CORE)**: Safe data structures and algorithms. +- **L2 (PROTOCOL)**: QPDL generation and orchestration. +- **L3 (ENGINE)**: Document and page management. +- **L4 (FILTER)**: CUPS boundary interface. +The project currently maintains 100% compliance with these standards. + +### 3. Build & CI Infrastructure + +- **CMake Conversion**: The legacy Makefile system was replaced with a modern CMake configuration, providing better dependency management and IDE integration. +- **Multi-Architecture Support**: Automated `.deb` packaging for both `amd64` and `arm64` via cross-compilation. +- **Security Hardening**: Build flags now include Full RELRO, PIE, Stack Protection, and Fortify Source. + +### 4. Verification & Testing + +- **GTest Integration**: Critical compression algorithms are now covered by unit tests. +- **Sanitizers**: Continuous Integration (CI) now runs AddressSanitizer (ASan) and UndefinedBehaviorSanitizer (UBSan) on every pull request. + +## 🛠 For Future Developers + +Before implementing new features: + +1. Ensure your environment supports **C++23**. +2. Run `speq check splix.speq` to verify that your changes do not violate architectural contracts. +3. Add unit tests in `tests/` for any new logic. + +--- +Date: April 19, 2026 diff --git a/docs/wiki_architecture.md b/docs/wiki_architecture.md new file mode 100644 index 00000000..9cbd2f74 --- /dev/null +++ b/docs/wiki_architecture.md @@ -0,0 +1,81 @@ +# SpliX Developer Wiki & Architecture Guide + +Welcome to the SpliX Developer Wiki. This guide provides a comprehensive overview of the source code architecture to help developers understand what each code part does. Because SpliX is a reverse-engineered CUPS driver for Samsung's SPL2/SPLc/QPDL proprietary printer protocols, understanding the responsibilities of each module is critical for preventing regressions. + +--- + +## 1. CUPS Entry Points (The Filters) + +These files serve as the integration points between the standard CUPS printing subsystem and the internal SpliX engine. + +* **`src/pstoqpdl.cpp`**: The PostScript wrapper. This executable intercepts PostScript jobs, applies Color Management System (CMS) profiles (for color matching), and pipes the job into Ghostscript (`gstoraster` or `pstoraster`), which then pipes the resulting raster image into `rastertoqpdl`. +* **`src/rastertoqpdl.cpp`**: The main CUPS filter. It receives standard CUPS raster data on `stdin` (from Ghostscript/macOS filter chains) and outputs raw QPDL (SPL) printer commands on `stdout` directly to the printer device. + +--- + +## 2. Document & Page Management + +These modules maintain the state of the print job as it passes through the filter. + +* **`src/core.cpp`**: Contains the main execution loop (`Splix::Core::run()`). It reads CUPS page headers, instantiates the `Document` and `Page` objects, manages the thread pool for compression, and coordinates the entire raster-to-QPDL pipeline. +* **`src/document.cpp`**: Represents a single print job. It manages job-level metadata, the total page count, user-selected PPD options (like resolution, color depth, duplexing), and initializes the connection with the printer via `Printer` classes. +* **`src/page.cpp`**: Represents a single page in the document. It manages the raster pixel data received from CUPS, breaking it down into individual horizontal "bands" (chunks of lines) which are then dispatched to worker threads for compression. + +--- + +## 3. Printer & Protocol Output (QPDL) + +These files implement the generation of the proprietary printer commands. + +* **`src/printer.cpp`**: The abstract interface and implementation for interacting with the hardware. It is responsible for injecting PJL (Printer Job Language) control headers and footers that wrap the QPDL byte-stream. +* **`src/qpdl.cpp`**: The heart of the protocol implementation. It formats the internal objects into the binary byte-stream expected by the printer. It generates the proprietary binary page headers, band headers, color-plane separations, and trailer bytes. **Warning:** Any byte misalignment or incorrect endianness here will cause the printer to reject the job or freeze. + +--- + +## 4. Band Management & Color Separation + +Because laser printers don't have enough RAM to process an entire page at once at high resolutions, the page is broken into horizontal strips (bands). + +* **`src/band.cpp`**: Represents a single horizontal strip of the page. A `Band` orchestrates multiple `BandPlane` objects. +* **`src/bandplane.cpp`**: Represents a specific color channel (Cyan, Magenta, Yellow, Black) for a single band. This module applies dithering and separates the raw chunky CUPS pixels into planar formats suitable for compression. +* **`src/colors.cpp`**: Handles color conversion (e.g., converting CUPS RGB or CMYK spaces into the specific device-dependent CMYK values needed by Samsung engines). + +--- + +## 5. Compression Algorithms + +Samsung printers support several proprietary or standard compression algorithms to reduce the size of the data sent to the printer. + +* **`src/compress.cpp`**: The abstract base class (`Compress`) and factory for all compression algorithms. It delegates the actual compression to the specific algorithm implementation based on the printer's capabilities (from the PPD). +* **`src/algo0x0d.cpp` (Algorithm 0x0D)**: A custom Run-Length Encoding (RLE) implementation used by older monochrome printers. +* **`src/algo0x0e.cpp` (Algorithm 0x0E)**: An advanced variation of RLE used by slightly newer printers. +* **`src/algo0x11.cpp` (Algorithm 0x11)**: A proprietary block-based Lempel-Ziv style compression algorithm heavily used by SPL2 color printers (e.g., CLP-300). +* **`src/algo0x13.cpp` (Algorithm 0x13)**: The standard JBIG compression wrapper used for high-end color and modern monochrome printers. It interfaces with `libjbig`. +* **`src/algo0x15.cpp` (Algorithm 0x15)**: Another variation of JBIG compression containing different header/band padding structures (e.g., used by CLP-600 series). + +--- + +## 6. Utilities & Infrastructure + +* **`src/cache.cpp`**: Manages a memory cache to avoid thrashing during band generation and compression. +* **`src/ppdfile.cpp`**: Parses the PostScript Printer Description (PPD) file provided by CUPS to extract the user's print settings (paper size, media type, duplexing, tray selection). +* **`src/sp_semaphore.cpp`**: A legacy wrapper that now wraps modern `std::counting_semaphore`. It coordinates the producer-consumer relationship between the CUPS raster reader (producer) and the compression worker threads (consumers). +* **`src/request.cpp`**: Represents an individual compression task requested by the producer to be picked up by the thread pool. + +--- + +## 7. Data Flow Summary + +1. CUPS executes `rastertoqpdl` and streams raster data into `stdin`. +2. `core.cpp` reads the CUPS header and initializes `document.cpp`. +3. `printer.cpp` writes the PJL initialization sequence to `stdout`. +4. `core.cpp` begins reading pixel rows, feeding them into `page.cpp`. +5. `page.cpp` buffers the rows until a full `band.cpp` is formed. +6. `band.cpp` separates the colors into `bandplane.cpp`s. +7. `core.cpp` queues the `bandplane.cpp` to be compressed. +8. A worker thread applies the correct `algo0x*.cpp` compression. +9. `qpdl.cpp` formats the compressed data with correct binary headers and writes it to `stdout`. +10. Once all pages are done, `printer.cpp` writes the PJL footer and exits. + +--- +Created during the Modernization Initiative, 2026. diff --git a/include/algo0x0d.h b/include/algo0x0d.h index 930e3af8..b78a518e 100644 --- a/include/algo0x0d.h +++ b/include/algo0x0d.h @@ -24,7 +24,8 @@ #define _ALGO0x0D_H_ #include "algorithm.h" -#include +#include +#include /** @@ -34,47 +35,43 @@ class Algo0x0D : public Algorithm { protected: inline void writeTwoBytesPacket( - unsigned char * output, - unsigned long & outputSize, - long int accumulatedHorizontalOffsetValue, - long int accumulatedVerticalOffsetValue, - unsigned long accumulatedRunCount ); + std::vector &output, + int32_t accumulatedHorizontalOffsetValue, + int32_t accumulatedVerticalOffsetValue, + uint32_t accumulatedRunCount ); inline void writeFourBytesPacket( - unsigned char * output, - unsigned long & outputSize, - long int accumulatedHorizontalOffsetValue, - long int accumulatedVerticalOffsetValue, - unsigned long accumulatedRunCount ); + std::vector &output, + int32_t accumulatedHorizontalOffsetValue, + int32_t accumulatedVerticalOffsetValue, + uint32_t accumulatedRunCount ); inline void writeSixBytesPacket( - unsigned char * output, - unsigned long & outputSize, - long int accumulatedCombinedOffsetValue, - unsigned long accumulatedRunCount ); + std::vector &output, + uint32_t accumulatedCombinedOffsetValue, + uint32_t accumulatedRunCount ); inline void selectPacketSize( - unsigned char * output, - unsigned long & outputSize, - unsigned long preAccumulatedHorizontalOffsetValue, - unsigned long accumulatedHorizontalOffsetValue, - unsigned long currentHorizontalPenPosition, - unsigned long accumulatedRunCount, - unsigned long consecutiveBlankScanLines, - unsigned long currentVerticalPenPosition, - const unsigned long wrapWidth ); + std::vector &output, + uint32_t preAccumulatedHorizontalOffsetValue, + uint32_t accumulatedHorizontalOffsetValue, + uint32_t currentHorizontalPenPosition, + uint32_t accumulatedRunCount, + uint32_t consecutiveBlankScanLines, + uint32_t currentVerticalPenPosition, + const uint32_t wrapWidth ); public: - Algo0x0D(); - virtual ~Algo0x0D(); + Algo0x0D() = default; + virtual ~Algo0x0D() = default; public: - virtual BandPlane* compress(const Request& request, - unsigned char *data, unsigned long width, - unsigned long height); - virtual bool reverseLineColumn() {return false;} - virtual bool inverseByte() {return false;} - virtual bool splitIntoBands() {return true;} + virtual SP::Result> compress(const Request& request, + std::span data, uint32_t width, + uint32_t height) override; + virtual bool reverseLineColumn() const override {return false;} + virtual bool inverseByte() const override {return false;} + virtual bool splitIntoBands() const override {return true;} }; #endif /* _ALGO0x0D_H_ */ diff --git a/include/algo0x0e.h b/include/algo0x0e.h index 7210cd59..6b9dae15 100644 --- a/include/algo0x0e.h +++ b/include/algo0x0e.h @@ -24,7 +24,10 @@ #define _ALGO0x0E_H_ #include "algorithm.h" -#include +#include +#include +#include +#include /** * @brief This class implements the type 0xe encoding. @@ -33,39 +36,33 @@ class Algo0x0E : public Algorithm { protected: inline void addLiteralSequence( - unsigned char * output, - unsigned long & outputSize, - unsigned char * data, - unsigned long position, - unsigned long length, - unsigned long blanks ); + std::vector &output, + std::span data, + uint32_t position, + uint32_t length, + uint32_t blanks ); inline void addReplicativeRun( - unsigned char * output, - unsigned long & outputSize, - unsigned long runs, - unsigned char value ); - unsigned long verifyGain(unsigned long e, - unsigned long L, - unsigned char * data); - unsigned long encodeReplications(unsigned long q, - unsigned long L, - unsigned char * data, - unsigned char * output, - unsigned long & outputSize); - unsigned long locateBackwardReplications(unsigned long L, - unsigned char * data); + std::vector &output, + uint32_t runs, + uint8_t value ); + uint32_t verifyGain(std::span data); + uint32_t encodeReplications(uint32_t q, + uint32_t L, + std::span data, + std::vector &output); + uint32_t locateBackwardReplications(std::span data); public: - Algo0x0E(); - virtual ~Algo0x0E(); + Algo0x0E() = default; + virtual ~Algo0x0E() = default; public: - virtual BandPlane* compress(const Request& request, - unsigned char *data, unsigned long width, - unsigned long height); - virtual bool reverseLineColumn() {return false;} - virtual bool inverseByte() {return true;} - virtual bool splitIntoBands() {return true;} + virtual SP::Result> compress(const Request& request, + std::span data, uint32_t width, + uint32_t height) override; + virtual bool reverseLineColumn() const override {return false;} + virtual bool inverseByte() const override {return true;} + virtual bool splitIntoBands() const override {return true;} }; #endif /* _ALGO0x0E_H_ */ diff --git a/include/algo0x11.h b/include/algo0x11.h index 590b8a58..be783ba2 100644 --- a/include/algo0x11.h +++ b/include/algo0x11.h @@ -1,5 +1,5 @@ /* - * algo0x11.h (C) 2006-2008, Aurélien Croc (AP²C) + * algo0x11.h (C) 2006-2008, Aurélien Croc (AP²C) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,53 +16,49 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * $Id$ - * */ #ifndef _ALGO0X11_H_ #define _ALGO0X11_H_ +#include +#include +#include +#include #include "algorithm.h" -#include - -#define COMPRESS_SAMPLE_RATE 0x800 -#define TABLE_PTR_SIZE 0x40 -#define MAX_UNCOMPRESSED_BYTES 0x80 -#define MAX_COMPRESSED_BYTES 0x202 -#define MIN_COMPRESSED_BYTES 0x2 - -#define COMPRESSION_FLAG 0x80 +#include "sp_result.h" /** * @brief This class implements the compression algorithm 0x11. */ class Algo0x11 : public Algorithm { + public: + static constexpr uint32_t COMPRESS_SAMPLE_RATE = 0x800; + static constexpr uint32_t TABLE_PTR_SIZE = 0x40; + static constexpr uint32_t MAX_UNCOMPRESSED_BYTES = 0x80; + static constexpr uint32_t MAX_COMPRESSED_BYTES = 0x202; + static constexpr uint32_t MIN_COMPRESSED_BYTES = 0x2; + static constexpr uint8_t COMPRESSION_FLAG = 0x80; + protected: uint32_t _ptrArray[TABLE_PTR_SIZE]; protected: - static int __compare(const void *n1, const void *n2); - bool _lookupBestOccurs(const unsigned char* data, - unsigned long size); - bool _compress(const unsigned char *data, - unsigned long size, - unsigned char* &output, - unsigned long &outputSize); + SP::Result<> _lookupBestOccurs(std::span data); + SP::Result<> _compress(std::span data, + std::vector &output); public: - Algo0x11(); - virtual ~Algo0x11(); + Algo0x11() = default; + virtual ~Algo0x11() = default; public: - virtual BandPlane* compress(const Request& request, - unsigned char *data, unsigned long width, - unsigned long height); - virtual bool reverseLineColumn() {return true;} - virtual bool inverseByte() {return true;} - virtual bool splitIntoBands() {return true;} + virtual SP::Result> compress(const Request& request, + std::span data, uint32_t width, + uint32_t height) override; + virtual bool reverseLineColumn() const override {return true;} + virtual bool inverseByte() const override {return true;} + virtual bool splitIntoBands() const override {return true;} }; #endif /* _ALGO0X11_H_ */ - -/* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ - diff --git a/include/algo0x13.h b/include/algo0x13.h index d7889082..752419da 100644 --- a/include/algo0x13.h +++ b/include/algo0x13.h @@ -24,6 +24,12 @@ #ifndef DISABLE_JBIG #include "algorithm.h" +#include +#include +#include +#include +#include + extern "C" { # include "jbig85.h" } @@ -34,35 +40,30 @@ extern "C" { class Algo0x13 : public Algorithm { protected: - typedef struct bandList_s { - BandPlane* band; - struct bandList_s* next; - } bandList_t; - - typedef struct info_s { - bandList_t** list; - bandList_t* last; - unsigned char* data; - unsigned long size; - unsigned long maxSize; - } info_t; + struct info_t { + std::deque>* list; + std::vector currentData; + uint32_t maxSize; + }; protected: - bool _compressed; - bandList_t* _list; - + bool _compressed = false; + std::deque> _list; public: - Algo0x13(); - virtual ~Algo0x13(); + Algo0x13() = default; + virtual ~Algo0x13() = default; public: static void _callback(unsigned char *data, size_t len, void *arg); public: - virtual BandPlane* compress(const Request& request, - unsigned char *data, unsigned long width, - unsigned long height); + virtual SP::Result> compress(const Request& request, + std::span data, uint32_t width, + uint32_t height) override; + virtual bool reverseLineColumn() const override {return false;} + virtual bool inverseByte() const override {return false;} + virtual bool splitIntoBands() const override {return false;} }; #endif /* DISABLE_JBIG */ diff --git a/include/algo0x15.h b/include/algo0x15.h index cce9d9c6..4c6b4b1f 100644 --- a/include/algo0x15.h +++ b/include/algo0x15.h @@ -26,35 +26,43 @@ #ifndef DISABLE_JBIG -#include #include "algorithm.h" +#include +#include +#include +#include +#include + /** * @brief This class implements the compression algorithm 0x15. */ class Algo0x15 : public Algorithm { protected: - bool _error; - bool _has_bih; - unsigned char _bih[20]; - unsigned char* _data; - unsigned long _size; - unsigned long _maxSize; + bool _error = false; + SP::Error _errorCode = SP::Error::None; + bool _has_bih = false; + std::array _bih = {}; + std::vector _data; + uint32_t _maxSize = 0; public: Algo0x15(); - virtual ~Algo0x15(); + virtual ~Algo0x15() = default; public: static void _callback(unsigned char *data, size_t len, void *arg); public: - virtual BandPlane* compress(const Request& request, - unsigned char *data, unsigned long width, - unsigned long height); + virtual SP::Result> compress(const Request& request, + std::span data, uint32_t width, + uint32_t height) override; /* Returns BIH for the compressed image band, after compress has been called. */ - const unsigned char* getBIHdata() const { return _bih; } + const uint8_t* getBIHdata() const { return _bih.data(); } + virtual bool reverseLineColumn() const override {return false;} + virtual bool inverseByte() const override {return false;} + virtual bool splitIntoBands() const override {return false;} }; #endif /* DISABLE_JBIG */ diff --git a/include/algorithm.h b/include/algorithm.h index 46d931df..b786806e 100644 --- a/include/algorithm.h +++ b/include/algorithm.h @@ -21,6 +21,11 @@ #ifndef _ALGORITHM_H_ #define _ALGORITHM_H_ +#include +#include +#include +#include "sp_result.h" + class Request; class BandPlane; @@ -36,11 +41,11 @@ class Algorithm /** * Initialize the instance. */ - Algorithm(); + Algorithm() = default; /** * Destroy the instance. */ - virtual ~Algorithm(); + virtual ~Algorithm() = default; public: /** @@ -49,33 +54,32 @@ class Algorithm * @param data the data to compress * @param width the width of the data / band / page * @param height the height of the data / band / page - * @return a pointer to a @ref BandPlane instance or NULL. + * @return a Result containing the @ref BandPlane instance or an error. */ - virtual BandPlane* compress(const Request& request, - unsigned char *data, unsigned long width, - unsigned long height) = 0; + virtual SP::Result> compress(const Request& request, + std::span data, uint32_t width, + uint32_t height) = 0; /** * Reverse line and column. * the byte at (x=1, y=0) is placed at (x=0, y=1) etc. * This is used by algorithm 0x11 (at least). * @return TRUE if this operation is needed. Otherwise returns FALSE. */ - virtual bool reverseLineColumn() {return false;} + virtual bool reverseLineColumn() const {return false;} /** * Inverse the byte. * Do a NOT operation on each byte. * @return TRUE if this operation is needed. Otherwise returns FALSE. */ - virtual bool inverseByte() {return false;} + virtual bool inverseByte() const {return false;} /** * Split into bands * @return TRUE if each planes has to ben split into bands. Otherwise * it returns FALSE. */ - virtual bool splitIntoBands() {return false;} + virtual bool splitIntoBands() const {return false;} }; #endif /* _ALGORITHM_H_ */ /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ - diff --git a/include/band.h b/include/band.h index 6363e475..7a99aee2 100644 --- a/include/band.h +++ b/include/band.h @@ -21,7 +21,11 @@ #ifndef _BAND_H_ #define _BAND_H_ -#include +#include +#include +#include +#include +#include "sp_result.h" class Page; class BandPlane; @@ -33,13 +37,12 @@ class BandPlane; class Band { protected: - unsigned long _bandNr; - const Page* _parent; - unsigned char _colors; - BandPlane* _planes[4]; - unsigned long _width; - unsigned long _height; - Band* _sibling; + uint32_t _bandNr = 0; + const Page* _parent = nullptr; + std::vector> _planes; + uint32_t _width = 0; + uint32_t _height = 0; + std::unique_ptr _sibling = nullptr; public: /** @@ -52,7 +55,7 @@ class Band * @param width the band width * @param height the band height */ - Band (unsigned long nr, unsigned long width, unsigned long height); + Band (uint32_t nr, uint32_t width, uint32_t height); /** * Destroy the instance */ @@ -63,7 +66,7 @@ class Band * Set the band number. * @param nr the band number */ - void setBandNr(unsigned long nr) {_bandNr = nr;} + void setBandNr(uint32_t nr) {_bandNr = nr;} /** * Register the parent @ref Page instance. * @param parent the parent page instance @@ -74,36 +77,34 @@ class Band * Register a new plane. * @param plane the band plane */ - void registerPlane(BandPlane* plane) - {if (_colors < 4) {_planes[_colors] = plane; - _colors++;}} + void registerPlane(std::unique_ptr plane); /** * Set the band width. * @param width the band width */ - void setWidth(unsigned long width) + void setWidth(uint32_t width) {_width = width;} /** * Set the band height. * @param height the band height */ - void setHeight(unsigned long height) + void setHeight(uint32_t height) {_height = height;} /** * Register sibling. * @param sibling the sibling. */ - void registerSibling(Band* sibling) - {_sibling = sibling;} + void registerSibling(std::unique_ptr sibling) + {_sibling = std::move(sibling);} /** * @return the band number. */ - unsigned long bandNr() const {return _bandNr;} + uint32_t bandNr() const {return _bandNr;} /** * @return the number of registered planes. */ - unsigned long planesNr() const {return _colors;} + size_t planesNr() const {return _planes.size();} /** * @return the parent @ref Page instance. */ @@ -114,39 +115,42 @@ class Band * @return the @ref BandPlane instance if it exists. Otherwise it * returns NULL. */ - const BandPlane* plane(unsigned char nr) const - {return nr < _colors ? _planes[nr] : NULL;} + const BandPlane* plane(size_t nr) const + {return nr < _planes.size() ? _planes[nr].get() : nullptr;} + /** + * @return a view of the planes. + */ + auto planes() const { + return _planes | std::views::transform([](const auto& p) { return p.get(); }); + } /** * @return the band width. */ - unsigned long width() const {return _width;} + uint32_t width() const {return _width;} /** * @return the band height. */ - unsigned long height() const {return _height;} + uint32_t height() const {return _height;} /** * @return the next sibling or NULL if there is no sibling. */ - Band* sibling() const {return _sibling;} + Band* sibling() const {return _sibling.get();} public: /** * Swap this instance on the disk. * @param fd the file descriptor where the instance has to be swapped - * @return TRUE if the instance has been successfully swapped. - * Otherwise it returns FALSE. + * @return a Result indicating success or the specific error. */ - bool swapToDisk(int fd); + SP::Result<> swapToDisk(int fd); /** * Restore an instance from the disk into memory. * @param fd the file descriptor where the instance has been swapped - * @return a band instance if it has been successfully restored. - * Otherwise it returns NULL. + * @return a Result containing the band instance or an error. */ - static Band* restoreIntoMemory(int fd); + static SP::Result> restoreIntoMemory(int fd); }; #endif /* _BAND_H_ */ /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ - diff --git a/include/bandplane.h b/include/bandplane.h index 9be99e60..fe137cde 100644 --- a/include/bandplane.h +++ b/include/bandplane.h @@ -21,6 +21,12 @@ #ifndef _BANDPLANE_H_ #define _BANDPLANE_H_ +#include +#include +#include +#include +#include "sp_result.h" + /** * @brief This class contains data related to a band plane. * @@ -28,7 +34,7 @@ class BandPlane { public: - enum Endian { + enum class Endian : uint8_t { /** Machine dependant */ Dependant, /** Big endian */ @@ -38,37 +44,33 @@ class BandPlane }; protected: - unsigned char _colorNr; - unsigned long _size; - unsigned char* _data; - unsigned long _checksum; - Endian _endian; - unsigned char _compression; + uint8_t _colorNr = 0; + std::vector _data; + uint32_t _checksum = 0; + Endian _endian = Endian::Dependant; + uint8_t _compression = 0; public: /** * Initialize the band plane instance. */ - BandPlane(); + BandPlane() = default; /** * Destroy the instance */ - virtual ~BandPlane(); + virtual ~BandPlane() = default; public: /** * Set the color number of this plane. * @param nr the color number */ - void setColorNr(unsigned char nr) {_colorNr = nr;} + void setColorNr(uint8_t nr) {_colorNr = nr;} /** * Set the data buffer. - * The buffer will be freed during the destruction of this instance. * @param data the data buffer - * @param size the size of the data */ - void setData(unsigned char *data, - unsigned long size); + void setData(std::vector data); /** * Set the endian to use. * @param endian the endian to use. @@ -78,21 +80,25 @@ class BandPlane * Set the compression algorithm used. * @param compression the compression algorithm used. */ - void setCompression(unsigned char compression) + void setCompression(uint8_t compression) {_compression = compression;} /** * @return the color number. */ - unsigned char colorNr() const {return _colorNr;} + uint8_t colorNr() const {return _colorNr;} /** * @return the data size. */ - unsigned long dataSize() const {return _size;} + size_t dataSize() const {return _data.size();} /** * @return the data. */ - const unsigned char* data() const {return _data;} + const uint8_t* data() const {return _data.data();} + /** + * @return a span viewing the buffer data. + */ + std::span data_span() const noexcept { return _data; } /** * @return the endian to use. */ @@ -100,27 +106,25 @@ class BandPlane /** * @return the checksum. */ - unsigned long checksum() const {return _checksum;} + uint32_t checksum() const {return _checksum;} /** * @return the compression algorithm used. */ - unsigned char compression() const {return _compression;} + uint8_t compression() const {return _compression;} public: /** * Swap this instance on the disk. * @param fd the file descriptor where the instance has to be swapped - * @return TRUE if the instance has been successfully swapped. - * Otherwise it returns FALSE. + * @return a Result indicating success or error. */ - bool swapToDisk(int fd); + SP::Result<> swapToDisk(int fd); /** * Restore an instance from the disk into memory. * @param fd the file descriptor where the instance has been swapped - * @return a bandplane instance if it has been successfully restored. - * Otherwise it returns NULL. + * @return a Result containing the bandplane instance or an error. */ - static BandPlane* restoreIntoMemory(int fd); + static SP::Result> restoreIntoMemory(int fd); }; #endif /* _BANDPLANE_H_ */ diff --git a/include/cache.h b/include/cache.h index 60981174..8e8e41c4 100644 --- a/include/cache.h +++ b/include/cache.h @@ -21,6 +21,11 @@ #ifndef _CACHE_H_ #define _CACHE_H_ +#include +#include +#include +#include "sp_result.h" + class Page; /** @@ -51,16 +56,16 @@ extern bool uninitializeCache(); /** * Extract the next page (depending on the curernt cache policy) - * @return the instance of the page. Otherwise it returns NULL if no page are - * found. + * @return a Result containing the instance of the page. On EOF, the Result + * contains a null unique_ptr. */ -extern Page* getNextPage(); +extern SP::Result> getNextPage(); /** * Register a new page in the cache. * @param page the page instance to register in the cache */ -extern void registerPage(Page* page); +extern void registerPage(std::unique_ptr page); /** * Set the new cache policy. @@ -72,7 +77,7 @@ extern void setCachePolicy(CachePolicy policy); * Set the number of pages in the document. * @param nr the number of pages */ -extern void setNumberOfPages(unsigned long nr); +extern void setNumberOfPages(uint32_t nr); /** @@ -81,17 +86,18 @@ extern void setNumberOfPages(unsigned long nr); */ class CacheEntry { protected: - Page* _page; - CacheEntry* _previous; - CacheEntry* _next; - char* _tempFile; + std::unique_ptr _page = nullptr; + CacheEntry* _previous = nullptr; + CacheEntry* _next = nullptr; + std::string _tempFile = ""; + SP::Error _error = SP::Error::None; public: /** * Initialize the cache entry instance. * @param page the page instance associated to this entry. */ - CacheEntry(Page* page); + CacheEntry(std::unique_ptr page); /** * Destroy the cache entry instance. */ @@ -111,21 +117,23 @@ class CacheEntry { {_previous = entry;} /** * Swap the page instance on the disk. - * @return TRUE if the page has been successfully swapped. Otherwise it - * returns FALSE. + * @return a Result indicating success or error. */ - bool swapToDisk(); + SP::Result<> swapToDisk(); /** * Restore a previously swapped page into memory. - * @return TRUE if the page has been successfully restored. Otherwise - * it returns FALSE. + * @return a Result indicating success or error. */ - bool restoreIntoMemory(); + SP::Result<> restoreIntoMemory(); /** - * @return the page instance. + * @return the page instance pointer. + */ + Page* page() const {return _page.get();} + /** + * @return the unique_ptr to the page. */ - Page* page() const {return _page;} + std::unique_ptr releasePage(); /** * @return the next instance. */ @@ -135,13 +143,20 @@ class CacheEntry { */ CacheEntry* previous() const {return _previous;} /** - * @return TRUE if the page is currently swapped on disk. Otherwise - * returns FALSE. - */ + * @return TRUE if the page is currently swapped on disk. Otherwise + * returns FALSE. + */ bool isSwapped() const - {return _tempFile ? true : false;} + {return !_tempFile.empty();} + /** + * @return the error associated with this entry, if any. + */ + SP::Error error() const {return _error;} + /** + * Set the error associated with this entry. + */ + void setError(SP::Error err) {_error = err;} }; #endif /* _CACHE_H_ */ /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ - diff --git a/include/compress.h b/include/compress.h index 7d8092b9..b5a98924 100644 --- a/include/compress.h +++ b/include/compress.h @@ -24,7 +24,9 @@ class Page; class Request; -extern bool compressPage(const Request& request, Page* page); +#include "sp_result.h" + +extern SP::Result<> compressPage(const Request& request, Page* page); #endif /* _COMPRESS_H_ */ diff --git a/include/document.h b/include/document.h index 9b4a5c3f..356a2aa1 100644 --- a/include/document.h +++ b/include/document.h @@ -21,7 +21,9 @@ #ifndef _DOCUMENT_H_ #define _DOCUMENT_H_ +#include #include +#include "sp_result.h" class Page; class Request; @@ -34,20 +36,27 @@ class Request; */ class Document { + private: + struct RasterDeleter { + void operator()(cups_raster_t* r) const { + if (r) cupsRasterClose(r); + } + }; + protected: - cups_raster_t* _raster; - unsigned long _currentPage; - bool _lastPage; + std::unique_ptr _raster; + uint32_t _currentPage = 1; + bool _lastPage = false; public: /** * Initialize the instance. */ - Document(); + Document() = default; /** * Destroy the instance. */ - virtual ~Document(); + virtual ~Document() = default; public: /** @@ -55,28 +64,24 @@ class Document * The file have to be opened on the file descriptor 0 (STDIN_FILENO) * and be formatted as CUPS Raster. * @param request the request instance - * @return TRUE if it has been successfully opened. Otherwise it - * returns FALSE. + * @return a Result indicating success or error. */ - bool load(const Request& request); + SP::Result<> load(const Request& request); /** * Load the next page into memory and store all the needed information * in a @ref Page instance. - * If the page is empty, it means there is no more pages (check the - * @ref noMorePages method) or there is an error. * @param request the request instance - * @return a @ref Page instance containing the current page. + * @return a @ref Page instance containing the current page or a specific error. */ - Page* getNextRawPage(const Request& request); + SP::Result> getNextRawPage(const Request& request); /** * @return the number of pages or 0 if its number is not yet known. */ - unsigned long numberOfPages() const + uint32_t numberOfPages() const {return _lastPage ? _currentPage - 1: 0;} }; #endif /* _DOCUMENT_H_ */ /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ - diff --git a/include/errlog.h b/include/errlog.h index 96452de6..d0dd6513 100644 --- a/include/errlog.h +++ b/include/errlog.h @@ -21,21 +21,20 @@ #ifndef _ERRLOG_H_ #define _ERRLOG_H_ -#include +#include #define _(X) X #ifdef DEBUG -# define ERRORMSG(X, args ...) fprintf(stderr, "ERROR: " X "\n", ##args); -# define WARNMSG(X, args ...) fprintf(stderr, "WARNING: " X "\n", ##args); -# define DEBUGMSG(X, args ...) fprintf(stderr, "DEBUG: " X "\n", ##args); +# define ERRORMSG(X, ...) fprintf(stderr, " \033[33mERROR: " X " \033[0m\n", ##__VA_ARGS__) +# define WARNMSG(X, ...) fprintf(stderr, " \033[34mWARNING: " X " \033[0m\n", ##__VA_ARGS__) +# define DEBUGMSG(X, ...) fprintf(stderr, " \033[32mDEBUG: " X " \033[0m\n", ##__VA_ARGS__) #else -# define ERRORMSG(X, args ...) fprintf(stderr, "ERROR: SpliX " X "\n", ##args); -# define WARNMSG(X, args ...) fprintf(stderr, "WARNING: SpliX " X "\n", ##args); -# define DEBUGMSG(X, args ...) fprintf(stderr, "DEBUG: SpliX " X "\n", ##args); +# define ERRORMSG(X, ...) fprintf(stderr, "ERROR: SpliX " X "\n", ##__VA_ARGS__) +# define WARNMSG(X, ...) fprintf(stderr, "WARNING: SpliX " X "\n", ##__VA_ARGS__) +# define DEBUGMSG(X, ...) fprintf(stderr, "DEBUG: SpliX " X "\n", ##__VA_ARGS__) #endif /* DEBUG */ #endif /* _ERRLOG_H_ */ /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ - diff --git a/include/page.h b/include/page.h index 7268b363..31ac7ae4 100644 --- a/include/page.h +++ b/include/page.h @@ -21,7 +21,11 @@ #ifndef _PAGE_H_ #define _PAGE_H_ -#include +#include +#include +#include +#include +#include "sp_result.h" class Band; @@ -39,20 +43,20 @@ class Band; class Page { protected: - unsigned long _xResolution; - unsigned long _yResolution; - unsigned long _width; - unsigned long _height; - unsigned char _colors; - unsigned long _pageNr; - unsigned long _copiesNr; - unsigned long _compression; - unsigned char* _planes[4]; - bool _empty; - unsigned long _bandsNr; - unsigned char* _bih; - Band* _firstBand; - Band* _lastBand; + uint32_t _xResolution = 0; + uint32_t _yResolution = 0; + uint32_t _width = 0; + uint32_t _height = 0; + uint8_t _colors = 0; + uint32_t _pageNr = 0; + uint32_t _copiesNr = 0; + uint32_t _compression = 0; + std::array, 4> _planes; + bool _empty = true; + uint32_t _bandsNr = 0; + std::vector _bih; + std::unique_ptr _firstBand; + Band* _lastBand = nullptr; // Non-owning observer public: /** @@ -70,14 +74,14 @@ class Page * @param f the float to convert. * @return the converted value. */ - long double convertToXResolution(long double f) + long double convertToXResolution(long double f) const {return f * _xResolution / 72.;} /** * Convert a length (given for 72DPI) in the Y resolution. * @param f the float to convert. * @return the converted value. */ - long double convertToYResolution(long double f) + long double convertToYResolution(long double f) const {return f * _yResolution / 72.;} /** @@ -97,115 +101,125 @@ class Page * Set the X resolution. * @param xRes the X resolution */ - void setXResolution(unsigned long xRes) + void setXResolution(uint32_t xRes) {_xResolution = xRes;} /** * Set the Y resolution. - * @param xRes the Y resolution + * @param yRes the Y resolution */ - void setYResolution(unsigned long yRes) + void setYResolution(uint32_t yRes) {_yResolution = yRes;} /** * Set the page width. * @param width the page width */ - void setWidth(unsigned long width) + void setWidth(uint32_t width) {_width = width;} /** * Set the page height. * @param height the page height */ - void setHeight(unsigned long height) + void setHeight(uint32_t height) {_height = height;} /** * Set the number of colors. * @param nr the number of colors */ - void setColorsNr(unsigned char nr) {_colors = nr;} + void setColorsNr(uint8_t nr) {_colors = nr;} /** * Set this page number. * @param nr this page number */ - void setPageNr(unsigned long nr) {_pageNr = nr;} + void setPageNr(uint32_t nr) {_pageNr = nr;} /** * Set the number of copies needed. * @param nr the number of copies to do */ - void setCopiesNr(unsigned long nr) + void setCopiesNr(uint32_t nr) {_copiesNr = nr;} /** * Set the compression algorithm number to use. * @param nr this compression algorithm number */ - void setCompression(unsigned long nr) + void setCompression(uint32_t nr) {_compression = nr;} /** * Register a new color plane. * @param color the color number * @param buffer the plane buffer. + * @return a Result indicating success or MemoryError. */ - void setPlaneBuffer(unsigned char color, - unsigned char* buffer) - {_planes[color] = buffer; _empty = false;} + SP::Result<> setPlaneBuffer(uint8_t color, + std::vector buffer); /** * Register a new band. * Note that band instances will be destroyed when this instance will * be destroyed. * @param band the band instance. */ - void registerBand(Band *band); + void registerBand(std::unique_ptr band); /** - * Set this page empty. - * This is useful in case of compression error. - */ + * Set this page empty. + * This is useful in case of compression error. + */ void setEmpty() {_empty = true;} /** * @return the X resolution. */ - unsigned long xResolution() const {return _xResolution;} + uint32_t xResolution() const {return _xResolution;} /** * @return the Y resolution. */ - unsigned long yResolution() const {return _yResolution;} + uint32_t yResolution() const {return _yResolution;} /** * @return the page width. */ - unsigned long width() const {return _width;} + uint32_t width() const {return _width;} /** * @return the page height. */ - unsigned long height() const {return _height;} + uint32_t height() const {return _height;} /** * @return the number of colors. */ - unsigned char colorsNr() const {return _colors;} + uint8_t colorsNr() const {return _colors;} /** * @return the number of registered bands. */ - unsigned char bandsNr() const {return _bandsNr;} + uint32_t bandsNr() const {return _bandsNr;} /** * @return this page number. */ - unsigned long pageNr() const {return _pageNr;} + uint32_t pageNr() const {return _pageNr;} /** * @return the number of copies to do. */ - unsigned long copiesNr() const {return _copiesNr;} + uint32_t copiesNr() const {return _copiesNr;} /** * @return the compression algorithm number. */ - unsigned long compression() const {return _compression;} + uint32_t compression() const {return _compression;} /** * Get the buffer associated to a plane. * @param color the color plane number. - * @return the plane buffer. Otherwise it returns NULL if the color + * @return a pointer to the plane buffer. Otherwise it returns NULL if the color + * plane number is incorrect or if there is no plane + * associated. + */ + uint8_t* planeBuffer(uint8_t color) + {return color < _colors && !_planes[color].empty() + ? _planes[color].data() : nullptr;} + /** + * Get the buffer associated to a plane (const version). + * @param color the color plane number. + * @return a pointer to the plane buffer. Otherwise it returns NULL if the color * plane number is incorrect or if there is no plane * associated. */ - unsigned char* planeBuffer(unsigned char color) const - {return color < _colors ? _planes[color] : - NULL;} + const uint8_t* planeBuffer(uint8_t color) const + {return color < _colors && !_planes[color].empty() + ? _planes[color].data() : nullptr;} /** * @return TRUE if no planes has been set. Otherwise it returns FALSE. */ @@ -213,32 +227,31 @@ class Page /** * @return the first band or NULL if no bands has been registered. */ - const Band* firstBand() const {return _firstBand;} + const Band* firstBand() const {return _firstBand.get();} public: /** * Swap this instance on the disk. * @param fd the file descriptor where the instance has to be swapped - * @return TRUE if the instance has been successfully swapped. - * Otherwise it returns FALSE. + * @return a Result indicating success or error. */ - bool swapToDisk(int fd); + SP::Result<> swapToDisk(int fd); /** * Restore an instance from the disk into memory. * @param fd the file descriptor where the instance has been swapped - * @return a page instance if it has been successfully restored. - * Otherwise it returns NULL. + * @return a Result containing the page instance or an error. */ - static Page* restoreIntoMemory(int fd); + static SP::Result> restoreIntoMemory(int fd); /** * Register an independent copy of the BIH data. * @param bih_data the BIH for JBIG data. + * @param size the BIH size (default 20) */ - void setBIH(const unsigned char *bih_data); + void setBIH(const uint8_t *bih_data, size_t size = 20); /** * Returns the BIH data belonging to the Page object. */ - const unsigned char* getBIH() const { return _bih; } + const uint8_t* getBIH() const { return _bih.empty() ? nullptr : _bih.data(); } }; #endif /* _PAGE_H_ */ diff --git a/include/ppdfile.h b/include/ppdfile.h index 7685b78c..8376b00f 100644 --- a/include/ppdfile.h +++ b/include/ppdfile.h @@ -21,19 +21,22 @@ #ifndef _PPDFILE_H_ #define _PPDFILE_H_ +#include #include #include +#include +#include +#include +#include +#include +#include "sp_result.h" /** * @class PPDFile - * @brief This class provides an easy method to manage PPD files. + * @brief This class provides an easy method to manage printer capabilities. * - * This class provides methods to access in a easy way to data contained in PPD - * files. During the opening of the file, the PPD version can be compared with - * the current project version, default and user values are set as default. - * Next, data contained in the ppd file can be manipulated easily with two - * methods. The second one (@ref PPDValue::setPreformatted) allows the - * use of special bytes in strings. + * This class provides methods to access printer capabilities and job options + * using the modern CUPS Destination Information API. */ class PPDFile { @@ -42,171 +45,68 @@ class PPDFile * @brief This class manages a PPD value. * * Use the defined type PPDValue to use this class. - * - * In a PPD a string can be preformatted to contain unprintable - * characters. For that, insert the ASCII number between < and >. - * @code - * *QPDL beginPJL: "<1B>%-12345X" - * @endcode - * - * To decode these preformatted string, call the @ref setPreformatted - * method and read the string. - * */ class Value { protected: - const char* _value; - char* _preformatted; - const char* _out; + std::string _raw; + std::string _preformatted; float _width; float _height; float _marginX; float _marginY; public: - /** - * Initialize a new instance. - */ Value(); - /** - * Initialize a new instance with the specified string. - * @param value the specified value. - */ - Value(const char *value); - /** - * Destroy the instance. - */ + Value(std::string_view value); virtual ~Value(); public: - /** - * Set a string. - * @param value the string value. - * @return itself. - */ - PPDFile::Value& set(const char *value); - /** - * Set width, height and X, Y margins - * @param width the width. - * @param height the height. - * @param marginX the X margin. - * @param marginY the Y margin. - * @return itself. - */ - PPDFile::Value& set(float width, float height, float + Value& set(std::string_view value); + Value& set(float width, float height, float marginX, float marginY); - /** - * Specify the represented string is preformatted. - * @return itself. - */ - PPDFile::Value& setPreformatted(); + Value& setPreformatted(); public: - /** - * @return the width value. - */ float width() const {return _width;} - /** - * @return the height value. - */ float height() const {return _height;} - /** - * @return the X margin value. - */ float marginX() const {return _marginX;} - /** - * @return the Y margin value. - */ float marginY() const {return _marginY;} - /** - * @return TRUE if there is no associated string. Otherwise it - * returns FALSE. - */ - bool isNull() const {return _out ? false : true;} - - /** - * Copy the string into an allocated buffer. - * The user has to free the string at the end of its use. - * @return a pointer to an allocated buffer containing the - * string. If there is no string, it returns NULL. - */ - char* deepCopy() const; - - /** - * @return TRUE if the key is set to true, enable, enabled, - * yes, 1 or on. Otherwise it returns FALSE. - */ + bool isNull() const {return _out.empty() && !_hasValue;} + std::string deepCopy() const; bool isTrue() const; - /** - * @return FALSE if the key is set to true, enable, enabled, - * yes, 1 or on. Otherwise it returns TRUE. - */ bool isFalse() const {return !isTrue();} - - /** - * @return TRUE if the key is set to true, enable, enabled, - * yes, 1 or on. Otherwise it returns FALSE. - */ - operator bool() const {return isTrue();} - /** - * @return the string pointer. - */ - operator const char*() const {return _out;} - /** - * @return the unsigned long converted value. - */ - operator unsigned long() const - {return _out ? strtol(_out, (char**)NULL, 10) : 0;} - /** - * @return the long converted value. - */ - operator long() const - {return _out ? strtol(_out, (char**)NULL, 10) : 0;} - /** - * @return the float converted value. - */ - operator float() const - {return _out ? strtof(_out, (char**)NULL) : 0;} - /** - * @return the double converted value. - */ - operator double() const - {return _out ? strtod(_out, (char**)NULL) : 0;} - /** - * @return the long double converted value. - */ - operator long double() const - {return _out ? strtold(_out, (char**)NULL) : 0;} - /** - * Compare the value with a string. - * The comparison is case insensitive. - * @param val the string to compare to - * @return TRUE if the strings are equivalent. Otherwise it - * returns FALSE. - */ - bool operator == (const char* val) const; - /** - * Compare the value with a string. - * The comparison is case insensitive. - * @param val the string to compare to - * @return TRUE if the strings are different. Otherwise it - * returns FALSE. - */ - bool operator != (const char* val) const; - /** - * Assignment operator. - * @param val the specified value. - */ - void operator = (const Value &val); + operator bool() const {return !isNull();} + operator const char*() const {return isNull() ? nullptr : _out.c_str();} + operator unsigned long() const; + operator long() const; + operator float() const; + operator double() const; + operator long double() const; + bool operator == (std::string_view val) const; + bool operator == (const char *val) const; + bool operator != (std::string_view val) const; + bool operator != (const char *val) const; + private: + std::string _out; + bool _hasValue = false; + public: + Value(const Value& other); + Value& operator = (const Value &val); }; protected: - ppd_file_t* _ppd; + struct DestDeleter { void operator()(cups_dest_t *d) const { if (d) cupsFreeDests(1, d); } }; + struct DInfoDeleter { void operator()(cups_dinfo_t *d) const { if (d) cupsFreeDestInfo(d); } }; + struct PPDDeleter { void operator()(ppd_file_t *p) const { if (p) ppdClose(p); } }; + + std::unique_ptr _dest; + std::unique_ptr _dinfo; + std::unique_ptr _ppd; + int _num_options; + cups_option_t *_options; + std::string _ppdPath; public: - /** - * Initialize a new PPDFile instance. - */ PPDFile(); /** * Destroy the instance. @@ -220,11 +120,10 @@ class PPDFile * @param file the file path and name * @param version the current SpliX version * @param useropts the user options - * @return TRUE if the PPD has been successfully opened. Otherwise it - * returns false. + * @return SP::Result<> indicating success or error code. */ - bool open(const char *file, const char *version, - const char *useropts = ""); + SP::Result<> open(std::string_view file, std::string_view version, + std::string_view useropts = ""); /** * Close a previously opened PPD file. */ @@ -240,14 +139,23 @@ class PPDFile * or the group/key doesn't exists or if there is no data * associated. */ - Value get(const char *name, const char *opt=NULL); + /** + * Get the string associated to a key or a key and a group. + * @param name the key name + * @param opt the name of the group if the key is in the group. + * Otherwise it must be set to NULL + * @return a PPDValue instance containing the string or NULL if the key + * or the group/key doesn't exists or if there is no data + * associated. + */ + Value get(std::string_view name, std::string_view opt = ""); /** * Get the page size information. * @param name the page format name * @return a PPDValue instance containing the width and the height of * the page format requested. */ - Value getPageSize(const char *name); + Value getPageSize(std::string_view name); }; /** diff --git a/include/printer.h b/include/printer.h index c11347f1..73868a01 100644 --- a/include/printer.h +++ b/include/printer.h @@ -21,6 +21,9 @@ #ifndef _PRINTER_H_ #define _PRINTER_H_ +#include +#include + class Request; /** @@ -31,33 +34,33 @@ class Request; class Printer { protected: - char* _manufacturer; - char* _model; - char* _beginPJL; - char* _endPJL; - - bool _color; - unsigned long _qpdlVersion; - unsigned long _bandHeight; - bool _specialBandWidth; - bool _fixedBandWidth; - unsigned long _packetSize; - - unsigned char _paperType; - unsigned char _paperSource; - - float _paperWidth; - float _paperHeight; + std::string _manufacturer; + std::string _model; + std::string _beginPJL; + std::string _endPJL; + + bool _color = false; + unsigned long _qpdlVersion = 0; + unsigned long _bandHeight = 0; + bool _specialBandWidth = false; + bool _fixedBandWidth = false; + unsigned long _packetSize = 0; + + unsigned char _paperType = 0; + unsigned char _paperSource = 0; + + float _paperWidth = 0.0f; + float _paperHeight = 0.0f; - unsigned char _unknownByte1; - unsigned char _unknownByte2; - unsigned char _unknownByte3; + unsigned char _unknownByte1 = 0; + unsigned char _unknownByte2 = 0; + unsigned char _unknownByte3 = 0; - float _pageWidth; - float _pageHeight; + float _pageWidth = 0.0f; + float _pageHeight = 0.0f; - float _hardMarginX; - float _hardMarginY; + float _hardMarginX = 0.0f; + float _hardMarginY = 0.0f; public: /** @@ -69,6 +72,12 @@ class Printer */ virtual ~Printer(); + // Modern Move and Copy operations (Rule of Five) + Printer(const Printer&) = default; + Printer& operator=(const Printer&) = default; + Printer(Printer&&) noexcept = default; + Printer& operator=(Printer&&) noexcept = default; + public: /** * Load the printer configuration requested. @@ -99,11 +108,11 @@ class Printer /** * @return the manufacturer name. */ - const char* manufacturer() const {return _manufacturer;} + std::string_view manufacturer() const {return _manufacturer;} /** * @return the model name. */ - const char* model() const {return _model;} + std::string_view model() const {return _model;} /** * @return the height of a band. */ diff --git a/include/qpdl.h b/include/qpdl.h index 1dabf721..1e19bce8 100644 --- a/include/qpdl.h +++ b/include/qpdl.h @@ -21,6 +21,8 @@ #ifndef _QPDL_H_ #define _QPDL_H_ +#include "sp_result.h" + class Request; class Page; @@ -32,10 +34,9 @@ class Page; * @param page the page instance * @param lastPage set to TRUE if it's the last page (only used with manual * duplex) - * @return TRUE if the page has been rendered into QPDL. Otherwise it returns - * FALSE. + * @return a Result indicating success or the specific error encountered. */ -extern bool renderPage(const Request& request, Page* page, bool lastPage=false); +extern SP::Result<> renderPage(const Request& request, Page* page, bool lastPage=false); #endif /* _QPDL_H_ */ /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ diff --git a/include/semaphore.h b/include/semaphore.h deleted file mode 100644 index 53e3b39c..00000000 --- a/include/semaphore.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * semaphore.h (C) 2007-2008, Aurélien Croc (AP²C) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $Id$ - * - */ -#ifndef _SEMAPHORE_H_ -#define _SEMAPHORE_H_ - -#ifndef DISABLE_THREADS - -#include - -/** - * @brief This class provides the semaphore mechanism. - */ -class Semaphore { - protected: - unsigned long _counter; - pthread_mutex_t _lock; - pthread_cond_t _cond; - - bool _mutex; - - public: - /** - * Initialize the Semaphore instance. - * The value of the internal counter will be initialized to 1. - */ - Semaphore(); - /** - * Initialize the Semaphore instance by specifying the value of the - * internal counter. - * @param counter the initial value of the internal counter. - */ - Semaphore(unsigned long counter); - /** - * Destroy the instance. - */ - virtual ~Semaphore(); - - public: - /** - * Use the semaphore as a mutex and lock it. - */ - void lock(); - /** - * Use th semaphore as a mutex and unlock it. - */ - void unlock(); - - /** - * Decrement the semaphore. - */ - Semaphore& operator --(int); - /** - * Increment the semaphore. - */ - Semaphore& operator ++(int); -}; - -#endif /* DISABLE_THREADS */ - -#endif /* _SEMAPHORE_H_ */ - -/* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ - diff --git a/include/sp_portable.h b/include/sp_portable.h new file mode 100644 index 00000000..e4d35b9d --- /dev/null +++ b/include/sp_portable.h @@ -0,0 +1,58 @@ +/* + * sp_portable.h (C) 2024, SpliX Modernization Project + * + * Portability layer for cross-platform support (Linux/Windows). + * + */ +#ifndef _SP_PORTABLE_H_ +#define _SP_PORTABLE_H_ + +#include +#include + +// --- Platform Detection --- +#if defined(_WIN32) || defined(_WIN64) || defined(_MSC_VER) + #define SP_PLATFORM_WINDOWS +#else + #define SP_PLATFORM_POSIX +#endif + +// --- I/O and Type Portability --- +#if defined(SP_PLATFORM_WINDOWS) + #include + #include + #include + typedef SSIZE_T ssize_t; + #define read _read + #define write _write +#else + #include + #include +#endif + +// --- Standard File Descriptors --- +#if !defined(STDIN_FILENO) + #define SP_STDIN_FILENO 0 +#else + #define SP_STDIN_FILENO STDIN_FILENO +#endif + +#if !defined(STDOUT_FILENO) + #define SP_STDOUT_FILENO 1 +#else + #define SP_STDOUT_FILENO STDOUT_FILENO +#endif + +// --- Thread-safe Time --- +namespace SP { + inline struct tm* portable_localtime(const time_t* timer, struct tm* buf) { +#if defined(SP_PLATFORM_WINDOWS) + if (localtime_s(buf, timer) == 0) return buf; + return nullptr; +#else + return localtime_r(timer, buf); +#endif + } +} + +#endif // _SP_PORTABLE_H_ diff --git a/include/sp_result.h b/include/sp_result.h new file mode 100644 index 00000000..7a64e7ab --- /dev/null +++ b/include/sp_result.h @@ -0,0 +1,81 @@ +/* + * sp_result.h + * + * Structured error handling for SpliX using C++23 std::expected. + */ +#ifndef _SP_RESULT_H_ +#define _SP_RESULT_H_ + +#include +#include +#include + +namespace SP { + +/** + * @brief core error codes for the SpliX driver + */ +enum class Error { + None = 0, + Generic, + InconsistentData, + IOError, + MemoryError, + CompressionError, + Unsupported, + PrinterError, + EndOfJob, + RasterOpenError, + RasterReadError, + PPDOpenError, + PPDVersionMismatch, + LogicError, + InvalidArgument, + RasterDimensionTooLarge, + InvalidState, + SerializationError +}; + +/** + * @brief A standard result type for operations that can fail. + */ +template +using Result = std::expected; + +/** + * @brief Helper to create an unexpected result. + */ +inline auto Unexpected(Error err) { + return std::unexpected(err); +} + +/** + * @brief Helper to convert an Error enum to a human-readable string. + */ +constexpr std::string_view to_string(Error err) { + switch (err) { + case Error::None: return "No error"; + case Error::Generic: return "Generic error"; + case Error::InconsistentData: return "Inconsistent data"; + case Error::IOError: return "I/O error"; + case Error::MemoryError: return "Memory allocation error"; + case Error::CompressionError: return "Compression failed"; + case Error::Unsupported: return "Unsupported feature"; + case Error::PrinterError: return "Printer reported error"; + case Error::EndOfJob: return "End of job reached"; + case Error::RasterOpenError: return "Failed to open CUPS raster"; + case Error::RasterReadError: return "Failed to read from CUPS raster"; + case Error::PPDOpenError: return "Failed to open PPD file"; + case Error::PPDVersionMismatch: return "PPD version mismatch"; + case Error::LogicError: return "Internal logic error"; + case Error::InvalidArgument: return "Invalid argument provided"; + case Error::RasterDimensionTooLarge: return "Raster dimension too large"; + case Error::InvalidState: return "Invalid object state"; + case Error::SerializationError: return "Failed to serialize/deserialize data"; + default: return "Unknown error"; + } +} + +} // namespace SP + +#endif /* _SP_RESULT_H_ */ diff --git a/include/sp_semaphore.h b/include/sp_semaphore.h new file mode 100644 index 00000000..6b55bdeb --- /dev/null +++ b/include/sp_semaphore.h @@ -0,0 +1,64 @@ +/* + * sp_semaphore.h (C) 2026, SpliX Modernization Project + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + */ +#ifndef _SP_SEMAPHORE_H_ +#define _SP_SEMAPHORE_H_ + +#include +#include + +/** + * @namespace SP + * @brief SpliX Modernization Namespace + */ +namespace SP { + +/** + * @class Semaphore + * @brief A modern C++20 wrapper for synchronization. + * + * This class provides a consistent interface for semaphores across the SpliX + * driver, wrapping std::counting_semaphore for safety and modernization. + */ +class Semaphore { + public: + /** + * @brief Construct a new Semaphore object + * @param initial_count Initial value of the semaphore + */ + explicit Semaphore(std::ptrdiff_t initial_count = 0); + + ~Semaphore() = default; + + // Prevent copying and assignment for thread safety + Semaphore(const Semaphore&) = delete; + Semaphore& operator=(const Semaphore&) = delete; + + /** + * @brief Decrements the internal counter or blocks until it is greater than zero. + */ + void acquire(); + + /** + * @brief Increments the internal counter and unblocks any waiting threads. + * @param update The value to increment by (default 1) + */ + void release(std::ptrdiff_t update = 1); + + /** + * @brief Tries to decrement the counter without blocking. + * @return true if successfully acquired, false otherwise. + */ + bool try_acquire(); + + private: + std::counting_semaphore<1024> _sem; +}; + +} // namespace SP + +#endif // _SP_SEMAPHORE_H_ diff --git a/src/algorithm.cpp b/include/version.h.in similarity index 71% rename from src/algorithm.cpp rename to include/version.h.in index a33290b8..09c85845 100644 --- a/src/algorithm.cpp +++ b/include/version.h.in @@ -1,5 +1,5 @@ /* - * algorithm.cpp (C) 2006-2008, Aurélien Croc (AP²C) + * version.h (C) 2006-2008, Aurélien Croc (AP²C) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,22 +15,12 @@ * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - * $Id$ - * + * NOTE: This file is automatically generated by CMake. Do not edit. */ -#include "algorithm.h" - -/* - * Constructeur - Destructeur - * Init - Uninit - */ -Algorithm::Algorithm() -{ -} - -Algorithm::~Algorithm() -{ -} +#ifndef _VERSION_H_ +#define _VERSION_H_ -/* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ +#define PPDVERSION "@PROJECT_VERSION@" +#define VERSION "@PROJECT_VERSION@" +#endif /* _VERSION_H_ */ diff --git a/module.mk b/module.mk deleted file mode 100644 index f9881a44..00000000 --- a/module.mk +++ /dev/null @@ -1,79 +0,0 @@ -# -# module.mk (C) 2007-2008, Aurélien Croc (AP²C) -# -# Compilation file for SpliX -# -# Options: DISABLE_JBIG -# DISABLE_THREADS -# DISABLE_BLACKOPTIM -# Compilation option: -# V=1 Verbose mode -# DESTDIR=xxx Change the destination directory prefix -# DRV_ONLY Don't install PPD files at all, only DRV files. - -MODE := optimized - -SUBDIRS += src -TARGETS := rastertoqpdl pstoqpdl -PRE_GENERIC_TARGETS := optionList - - -# Default options -THREADS ?= 2 -CACHESIZE ?= 30 -DISABLE_JBIG ?= 0 -DISABLE_THREADS ?= 0 -DISABLE_BLACKOPTIM ?= 0 -DRV_ONLY ?= 0 - - -# Flags -CXXFLAGS += `pkg-config --cflags cups` -Iinclude -Wall -I/opt/local/include -DEBUG_CXXFLAGS += -DDEBUG -DDUMP_CACHE -OPTIM_CXXFLAGS += -g -rastertoqpdl_LDFLAGS := $(LDFLAGS) -L/opt/local/lib -rastertoqpdl_LIBS := `pkg-config --libs cups` -lcupsimage -pstoqpdl_LDFLAGS := $(LDFLAGS) -pstoqpdl_LIBS := `pkg-config --libs cups` -lcupsimage - - -# Update compilation flags with defined options -ifneq ($(DISABLE_THREADS),0) -CXXFLAGS += -DDISABLE_THREADS -else -CXXFLAGS += -DTHREADS=$(THREADS) -DCACHESIZE=$(CACHESIZE) -rastertoqpdl_LIBS += -lpthread -pstoqpdl_LIBS += -lpthread -endif -ifneq ($(DISABLE_JBIG),0) -CXXFLAGS += -DDISABLE_JBIG -else -rastertoqpdl_LIBS += -ljbig85 -endif -ifneq ($(DISABLE_BLACKOPTIM),0) -CXXFLAGS += -DDISABLE_BLACKOPTIM -endif - - -# Get some information -CUPSFILTER := `pkg-config --variable=cups_serverbin cups`/filter -CUPSPPD ?= `pkg-config --variable=cups_datadir cups`/model -CUPSDRV ?= `pkg-config --variable=cups_datadir cups`/drv -ifeq ($(ARCHI),Darwin) -PSTORASTER := pstocupsraster -else -PSTORASTER := pstoraster -endif -GSTORASTER := gstoraster -CUPSPROFILE := `pkg-config --variable=cups_datadir cups`/profiles -export CUPSFILTER CUPSPPD CUPSDRV - - -# Specific information needed by pstoqpdl -src_pstoqpdl_cpp_FLAGS := -DRASTERDIR=\"$(CUPSFILTER)\" -src_pstoqpdl_cpp_FLAGS += -DRASTERTOQPDL=\"rastertoqpdl\" -src_pstoqpdl_cpp_FLAGS += -DPSTORASTER=\"$(PSTORASTER)\" -src_pstoqpdl_cpp_FLAGS += -DGSTORASTER=\"$(GSTORASTER)\" -src_pstoqpdl_cpp_FLAGS += -DCUPSPPD=\"$(CUPSPPD)\" -src_pstoqpdl_cpp_FLAGS += -DCUPSPROFILE=\"$(CUPSPROFILE)\" - diff --git a/ppd/1100.ppd b/ppd/1100.ppd index edfc1834..2a3bf2fa 100644 --- a/ppd/1100.ppd +++ b/ppd/1100.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for 1100 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "1100.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Dell" *ModelName: "Dell 1100" *ShortNickName: "Dell 1100" -*NickName: "Dell 1100, 2.0.0" +*NickName: "Dell 1100, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/1100fr.ppd b/ppd/1100fr.ppd index 9205d346..9687e7af 100644 --- a/ppd/1100fr.ppd +++ b/ppd/1100fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for 1100 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "1100.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Dell" *ModelName: "Dell 1100" *ShortNickName: "Dell 1100" -*NickName: "Dell 1100, 2.0.0" +*NickName: "Dell 1100, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/1100pt.ppd b/ppd/1100pt.ppd index 16abfbfd..87ef5f4e 100644 --- a/ppd/1100pt.ppd +++ b/ppd/1100pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for 1100 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "1100.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Dell" *ModelName: "Dell 1100" *ShortNickName: "Dell 1100" -*NickName: "Dell 1100, 2.0.0" +*NickName: "Dell 1100, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/1110.ppd b/ppd/1110.ppd index fd7d8584..f264281b 100644 --- a/ppd/1110.ppd +++ b/ppd/1110.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for 1110 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "1110.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Dell" *ModelName: "Dell 1110" *ShortNickName: "Dell 1110" -*NickName: "Dell 1110, 2.0.0" +*NickName: "Dell 1110, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/1110fr.ppd b/ppd/1110fr.ppd index 293cbe8a..34eb474b 100644 --- a/ppd/1110fr.ppd +++ b/ppd/1110fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for 1110 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "1110.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Dell" *ModelName: "Dell 1110" *ShortNickName: "Dell 1110" -*NickName: "Dell 1110, 2.0.0" +*NickName: "Dell 1110, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/1110pt.ppd b/ppd/1110pt.ppd index 643b8fee..90bf8fa0 100644 --- a/ppd/1110pt.ppd +++ b/ppd/1110pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for 1110 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "1110.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Dell" *ModelName: "Dell 1110" *ShortNickName: "Dell 1110" -*NickName: "Dell 1110, 2.0.0" +*NickName: "Dell 1110, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/Makefile b/ppd/Makefile deleted file mode 100644 index 106de855..00000000 --- a/ppd/Makefile +++ /dev/null @@ -1,181 +0,0 @@ -# -# Makefile (C) 2006, Aurélien Croc (AP²C) -# -# This project has been placed under the GPL Licence. -# -# - -SOURCE := samsung.drv.in dell.drv.in xerox.drv.in lexmark.drv.in toshiba.drv.in hp.drv.in -DRVS := samsung.drv dell.drv xerox.drv lexmark.drv toshiba.drv hp.drv -HP := laser10x laser13x -DELL := 1100 1110 -SAMSUNG := clp500 clp550 clp510 m2020 m2070 m262x m267x m283x ml1510 ml1520 ml1610 \ - ml1630 ml1640 ml1660 ml1670 ml1710 ml1740 ml1750 ml1860 ml1865 ml1865w ml1910 ml1915 \ - ml2010 ml2015 ml2150 ml2160 ml2165 ml2240 ml2250 ml2251 \ - ml2510 ml2525 ml2525w ml2550 ml2571 ml2580 ml2580n ml3050 \ - ml3051 ml3051nd ml3310 ml3310nd ml3471nd ml3560 scx3200 scx3400 \ - scx4100 scx4200 scx4216f scx4300 scx4500 scx4521f scx4600 \ - scx4623f scx4623fw scx5330n scx5530fn sf565p -#SAMSUNG += clp610 clp610nd -XEROX := ph3020 ph3052 ph3115 ph3116 ph3117 ph3120 ph3121 ph3122 ph3124 ph3130 \ - ph3140 ph3150 ph3155 ph3160 ph3260 ph3420 ph3425 ph5500 ph6100 \ - wc3025 wc3119 wc3215 wc3225 wcpe16 wcpe114e -LEXMARK := x215mfp -TOSHIBA := es180s -DRIVERSEXT := ppd -POEXT := po -PODIR := po -LANGUAGES := fr pt_BR -# === MAKE ALL PPD BY DEFAULT ==== -ifneq ($(DISABLE_JBIG),1) -SAMSUNG += clp200 clp300 clp310 clp315 clp310n clp600 clx216x clx2170 \ - clx3160 -XEROX += ph6110 -endif -DRIVERS := $(DELL) $(SAMSUNG) $(XEROX) $(LEXMARK) $(TOSHIBA) $(HP) - -# === DON'T CHANGE ANYTHING AFTER THIS MESSAGE ==== - -MASTERDRIVER := $(shell echo "${DRIVERS}" | awk '{ print $$1 }') -DRIVER := $(MASTERDRIVER).$(DRIVERSEXT) -LANGDRIVERS := $(foreach name, $(LANGUAGES), $(MASTERDRIVER)$(name)) -LANGDRIVERSEXT := $(addsuffix .$(DRIVERSEXT), $(LANGDRIVERS)) -printCmd = $(if $(filter $(V),1),,$(shell echo "@echo \" $(1)\"")) - - -all: - -.PHONY: drv -drv: $(SOURCE) - ./compile.sh samsung.drv.in drv - ./compile.sh dell.drv.in drv - ./compile.sh xerox.drv.in drv - ./compile.sh lexmark.drv.in drv - ./compile.sh toshiba.drv.in drv - ./compile.sh hp.drv.in drv - -.PHONY: ppd -ppd: $(DRIVER) $(LANGDRIVERSEXT) - -$(DRIVER): $(SOURCE) - ./compile.sh samsung.drv.in -I . -d ./ - ./compile.sh dell.drv.in -I . -d ./ - ./compile.sh xerox.drv.in -I . -d ./ - ./compile.sh lexmark.drv.in -I . -d ./ - ./compile.sh toshiba.drv.in -I . -d ./ - ./compile.sh hp.drv.in -I . -d ./ - -$(LANGDRIVERSEXT): $(SOURCE) $(patsubst %, $(PODIR)/%.$(POEXT), $(LANGUAGES)) - lang=$(patsubst $(MASTERDRIVER)%.$(DRIVERSEXT),%, $@); \ - ./compile.sh samsung.drv.in -l $$lang -c ${PODIR}/$$lang.${POEXT} -d ${PODIR}/$$lang; \ - for filename in ${SAMSUNG}; do \ - recode utf8..latin1 ${PODIR}/$$lang/$$filename.${DRIVERSEXT}; \ - mv ${PODIR}/$$lang/$$filename.${DRIVERSEXT} $$filename$$lang.${DRIVERSEXT}; \ - done; \ - ./compile.sh xerox.drv.in -l $$lang -c ${PODIR}/$$lang.${POEXT} -d ${PODIR}/$$lang; \ - for filename in ${XEROX}; do \ - recode utf8..latin1 ${PODIR}/$$lang/$$filename.${DRIVERSEXT}; \ - mv ${PODIR}/$$lang/$$filename.${DRIVERSEXT} $$filename$$lang.${DRIVERSEXT}; \ - done; \ - ./compile.sh dell.drv.in -l $$lang -c ${PODIR}/$$lang.${POEXT} -d ${PODIR}/$$lang; \ - for filename in ${DELL}; do \ - recode utf8..latin1 ${PODIR}/$$lang/$$filename.${DRIVERSEXT}; \ - mv ${PODIR}/$$lang/$$filename.${DRIVERSEXT} $$filename$$lang.${DRIVERSEXT}; \ - done; \ - ./compile.sh lexmark.drv.in -l $$lang -c ${PODIR}/$$lang.${POEXT} -d ${PODIR}/$$lang; \ - for filename in ${LEXMARK}; do \ - recode utf8..latin1 ${PODIR}/$$lang/$$filename.${DRIVERSEXT}; \ - mv ${PODIR}/$$lang/$$filename.${DRIVERSEXT} $$filename$$lang.${DRIVERSEXT}; \ - done; \ - ./compile.sh toshiba.drv.in -l $$lang -c ${PODIR}/$$lang.${POEXT} -d ${PODIR}/$$lang; \ - for filename in ${TOSHIBA}; do \ - recode utf8..latin1 ${PODIR}/$$lang/$$filename.${DRIVERSEXT}; \ - mv ${PODIR}/$$lang/$$filename.${DRIVERSEXT} $$filename$$lang.${DRIVERSEXT}; \ - done; \ - ./compile.sh hp.drv.in -l $$lang -c ${PODIR}/$$lang.${POEXT} -d ${PODIR}/$$lang; \ - for filename in ${HP}; do \ - recode utf8..latin1 ${PODIR}/$$lang/$$filename.${DRIVERSEXT}; \ - mv ${PODIR}/$$lang/$$filename.${DRIVERSEXT} $$filename$$lang.${DRIVERSEXT}; \ - done; - -.PHONY: update -update: $(patsubst %, $(PODIR)/%.$(POEXT), $(LANGUAGES)) -%.po: $(SOURCE) - ./compile.sh samsung.drv.in lang $@ - ./compile.sh dell.drv.in lang $@ - ./compile.sh xerox.drv.in lang $@ - ./compile.sh lexmark.drv.in lang $@ - ./compile.sh toshiba.drv.in lang $@ - ./compile.sh hp.drv.in lang $@ - -cmd_install_samsung = INSTALL Samsung PPD files -cmd_install_xerox = INSTALL Xerox PPD files -cmd_install_dell = INSTALL Dell PPD files -cmd_install_lexmark = INSTALL Lexmark PPD files -cmd_install_toshiba = INSTALL Toshiba PPD files -cmd_install_hp = INSTALL HP PPD files -cmd_install_drv = INSTALL DRV files -.PHONY: install -install: -ifneq ($(DRV_ONLY),1) - $(call printCmd, $(cmd_install_samsung)) - $(Q)install -d -m 755 ${DESTDIR}${CUPSPPD}/samsung - $(Q)for filename in ${SAMSUNG}; do \ - install -m 644 $$filename.${DRIVERSEXT} ${DESTDIR}${CUPSPPD}/samsung;\ - for lang in ${LANGUAGES}; do \ - install -m 644 $$filename$$lang.${DRIVERSEXT} ${DESTDIR}${CUPSPPD}/samsung;\ - done; \ - done; - $(call printCmd, $(cmd_install_xerox)) - $(Q)install -d -m 755 ${DESTDIR}${CUPSPPD}/xerox - $(Q)for filename in ${XEROX}; do \ - install -m 644 $$filename.${DRIVERSEXT} ${DESTDIR}${CUPSPPD}/xerox;\ - for lang in ${LANGUAGES}; do \ - install -m 644 $$filename$$lang.${DRIVERSEXT} ${DESTDIR}${CUPSPPD}/xerox;\ - done; \ - done; - $(call printCmd, $(cmd_install_dell)) - $(Q)install -d -m 755 ${DESTDIR}${CUPSPPD}/dell - $(Q)for filename in ${DELL}; do \ - install -m 644 $$filename.${DRIVERSEXT} ${DESTDIR}${CUPSPPD}/dell;\ - for lang in ${LANGUAGES}; do \ - install -m 644 $$filename$$lang.${DRIVERSEXT} ${DESTDIR}${CUPSPPD}/dell;\ - done; \ - done; - $(call printCmd, $(cmd_install_lexmark)) - $(Q)install -d -m 755 ${DESTDIR}${CUPSPPD}/lexmark - $(Q)for filename in ${LEXMARK}; do \ - install -m 644 $$filename.${DRIVERSEXT} ${DESTDIR}${CUPSPPD}/lexmark;\ - for lang in ${LANGUAGES}; do \ - install -m 644 $$filename$$lang.${DRIVERSEXT} ${DESTDIR}${CUPSPPD}/lexmark;\ - done; \ - done; - $(call printCmd, $(cmd_install_toshiba)) - $(Q)install -d -m 755 ${DESTDIR}${CUPSPPD}/toshiba - $(Q)for filename in ${TOSHIBA}; do \ - install -m 644 $$filename.${DRIVERSEXT} ${DESTDIR}${CUPSPPD}/toshiba;\ - for lang in ${LANGUAGES}; do \ - install -m 644 $$filename$$lang.${DRIVERSEXT} ${DESTDIR}${CUPSPPD}/toshiba;\ - done; \ - done; - $(call printCmd, $(cmd_install_hp)) - $(Q)install -d -m 755 ${DESTDIR}${CUPSPPD}/hp - $(Q)for filename in ${HP}; do \ - install -m 644 $$filename.${DRIVERSEXT} ${DESTDIR}${CUPSPPD}/hp;\ - for lang in ${LANGUAGES}; do \ - install -m 644 $$filename$$lang.${DRIVERSEXT} ${DESTDIR}${CUPSPPD}/hp;\ - done; \ - done; -else - $(call printCmd, $(cmd_install_drv)) - $(Q)install -d -m 755 ${DESTDIR}${CUPSDRV} - $(Q)for filename in ${DRVS}; do \ - install -m 644 $$filename ${DESTDIR}${CUPSDRV}/splix-$$filename;\ - done; -endif - -.PHONY: clean distclean -clean: -distclean: - $(RM) *.${DRIVERSEXT} - $(RM) *.drv diff --git a/ppd/clp200.ppd b/ppd/clp200.ppd index 30451e80..984de55e 100644 --- a/ppd/clp200.ppd +++ b/ppd/clp200.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for CLP-200 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "clp200.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-200" *ShortNickName: "Samsung CLP-200" -*NickName: "Samsung CLP-200, 2.0.0" +*NickName: "Samsung CLP-200, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -29,7 +29,7 @@ *QPDL QPDLVersion: "1" *General DocHeaderValues: "<0><0><0>" *General CMSFile: "CLP-200" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-postscript 0 pstoqpdl" @@ -43,7 +43,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -70,7 +70,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -95,7 +95,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -119,7 +119,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -231,4 +231,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of clp200.ppd, 11696 bytes. +*% End of clp200.ppd, 11693 bytes. diff --git a/ppd/clp200fr.ppd b/ppd/clp200fr.ppd index 0d7f87c2..a5395ddf 100644 --- a/ppd/clp200fr.ppd +++ b/ppd/clp200fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-200 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "clp200.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-200" *ShortNickName: "Samsung CLP-200" -*NickName: "Samsung CLP-200, 2.0.0" +*NickName: "Samsung CLP-200, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp200pt.ppd b/ppd/clp200pt.ppd index be704069..2b3f2783 100644 --- a/ppd/clp200pt.ppd +++ b/ppd/clp200pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-200 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "clp200.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-200" *ShortNickName: "Samsung CLP-200" -*NickName: "Samsung CLP-200, 2.0.0" +*NickName: "Samsung CLP-200, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp300.ppd b/ppd/clp300.ppd index 5412c5f1..e9cc0b1d 100644 --- a/ppd/clp300.ppd +++ b/ppd/clp300.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for CLP-300 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "clp300.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-300" *ShortNickName: "Samsung CLP-300" -*NickName: "Samsung CLP-300, 2.0.0" +*NickName: "Samsung CLP-300, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -29,7 +29,7 @@ *QPDL QPDLVersion: "2" *General DocHeaderValues: "<0><0><1>" *General CMSFile: "CLP-300" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-postscript 0 pstoqpdl" @@ -43,7 +43,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -70,7 +70,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -95,7 +95,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -119,7 +119,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -233,4 +233,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of clp300.ppd, 11964 bytes. +*% End of clp300.ppd, 11961 bytes. diff --git a/ppd/clp300fr.ppd b/ppd/clp300fr.ppd index 4eab6c72..9110bc16 100644 --- a/ppd/clp300fr.ppd +++ b/ppd/clp300fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-300 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "clp300.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-300" *ShortNickName: "Samsung CLP-300" -*NickName: "Samsung CLP-300, 2.0.0" +*NickName: "Samsung CLP-300, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp300pt.ppd b/ppd/clp300pt.ppd index 750953bf..b0b522ba 100644 --- a/ppd/clp300pt.ppd +++ b/ppd/clp300pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-300 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "clp300.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-300" *ShortNickName: "Samsung CLP-300" -*NickName: "Samsung CLP-300, 2.0.0" +*NickName: "Samsung CLP-300, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp310.ppd b/ppd/clp310.ppd index 64fa4ffa..6f42fb78 100644 --- a/ppd/clp310.ppd +++ b/ppd/clp310.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for CLP-310 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "clp310.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-310" *ShortNickName: "Samsung CLP-310" -*NickName: "Samsung CLP-310, 2.0.0" +*NickName: "Samsung CLP-310, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -29,7 +29,8 @@ *QPDL PacketSize: "512" *General DocHeaderValues: "<0><0><1>" *General CMSFile: "CLP-310" -*cupsVersion: 1.5 +*1284DeviceID: "MFG:Samsung;MDL:CLP-310 Series;CMD:SPLC,FWV;" +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-postscript 0 pstoqpdl" @@ -43,7 +44,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -70,7 +71,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -95,7 +96,7 @@ *ImageableArea Executive/Executive: "12 12 510 744" *ImageableArea Ledger/US Ledger: "12 12 1212 780" *ImageableArea A3/A3: "12 12 830 1179" -*ImageableArea Env10/Envelope #10 : "12 12 285 672" +*ImageableArea Env10/Envelope #10: "12 12 285 672" *ImageableArea Monarch/Envelope Monarch: "12 12 267 528" *ImageableArea C5/Envelope C5: "12 12 447 637" *ImageableArea DL/Envelope DL: "12 12 300 612" @@ -119,7 +120,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -242,4 +243,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of clp310.ppd, 12242 bytes. +*% End of clp310.ppd, 12301 bytes. diff --git a/ppd/clp310fr.ppd b/ppd/clp310fr.ppd index 3d753535..144b6ad6 100644 --- a/ppd/clp310fr.ppd +++ b/ppd/clp310fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-310 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "clp310.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-310" *ShortNickName: "Samsung CLP-310" -*NickName: "Samsung CLP-310, 2.0.0" +*NickName: "Samsung CLP-310, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp310n.ppd b/ppd/clp310n.ppd index dcdfcc5c..22fa24f0 100644 --- a/ppd/clp310n.ppd +++ b/ppd/clp310n.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for CLP-310N with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "clp310n.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-310N" *ShortNickName: "Samsung CLP-310N" -*NickName: "Samsung CLP-310N, 2.0.0" +*NickName: "Samsung CLP-310N, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -29,7 +29,7 @@ *QPDL QPDLVersion: "2" *General DocHeaderValues: "<0><0><1>" *General CMSFile: "CLP-300" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-postscript 0 pstoqpdl" @@ -43,7 +43,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -70,7 +70,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -95,7 +95,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -119,7 +119,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -233,4 +233,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of clp310n.ppd, 11971 bytes. +*% End of clp310n.ppd, 11968 bytes. diff --git a/ppd/clp310nfr.ppd b/ppd/clp310nfr.ppd index ca89594e..8f0bb14f 100644 --- a/ppd/clp310nfr.ppd +++ b/ppd/clp310nfr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-310N with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "clp310n.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-310N" *ShortNickName: "Samsung CLP-310N" -*NickName: "Samsung CLP-310N, 2.0.0" +*NickName: "Samsung CLP-310N, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp310npt.ppd b/ppd/clp310npt.ppd index d54b86b7..9c598be3 100644 --- a/ppd/clp310npt.ppd +++ b/ppd/clp310npt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-310N with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "clp310n.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-310N" *ShortNickName: "Samsung CLP-310N" -*NickName: "Samsung CLP-310N, 2.0.0" +*NickName: "Samsung CLP-310N, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp310pt.ppd b/ppd/clp310pt.ppd index bb13f7dc..fe98e24c 100644 --- a/ppd/clp310pt.ppd +++ b/ppd/clp310pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-310 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "clp310.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-310" *ShortNickName: "Samsung CLP-310" -*NickName: "Samsung CLP-310, 2.0.0" +*NickName: "Samsung CLP-310, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp315.ppd b/ppd/clp315.ppd index 38b112c2..479b0447 100644 --- a/ppd/clp315.ppd +++ b/ppd/clp315.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for CLP-315 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "clp315.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-315" *ShortNickName: "Samsung CLP-315" -*NickName: "Samsung CLP-315, 2.0.0" +*NickName: "Samsung CLP-315, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -29,7 +29,7 @@ *QPDL PacketSize: "512" *General DocHeaderValues: "<0><0><1>" *General CMSFile: "CLP-315" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-postscript 0 pstoqpdl" @@ -43,7 +43,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -70,7 +70,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -95,7 +95,7 @@ *ImageableArea Executive/Executive: "12 12 510 744" *ImageableArea Ledger/US Ledger: "12 12 1212 780" *ImageableArea A3/A3: "12 12 830 1179" -*ImageableArea Env10/Envelope #10 : "12 12 285 672" +*ImageableArea Env10/Envelope #10: "12 12 285 672" *ImageableArea Monarch/Envelope Monarch: "12 12 267 528" *ImageableArea C5/Envelope C5: "12 12 447 637" *ImageableArea DL/Envelope DL: "12 12 300 612" @@ -119,7 +119,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -242,4 +242,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of clp315.ppd, 12242 bytes. +*% End of clp315.ppd, 12239 bytes. diff --git a/ppd/clp315fr.ppd b/ppd/clp315fr.ppd index 6b42727b..b1813723 100644 --- a/ppd/clp315fr.ppd +++ b/ppd/clp315fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-315 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "clp315.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-315" *ShortNickName: "Samsung CLP-315" -*NickName: "Samsung CLP-315, 2.0.0" +*NickName: "Samsung CLP-315, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp315pt.ppd b/ppd/clp315pt.ppd index a64d7782..0f7a03a0 100644 --- a/ppd/clp315pt.ppd +++ b/ppd/clp315pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-315 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "clp315.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-315" *ShortNickName: "Samsung CLP-315" -*NickName: "Samsung CLP-315, 2.0.0" +*NickName: "Samsung CLP-315, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp500.ppd b/ppd/clp500.ppd index bc258451..b8f9ecf5 100644 --- a/ppd/clp500.ppd +++ b/ppd/clp500.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for CLP-500 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "clp500.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-500" *ShortNickName: "Samsung CLP-500" -*NickName: "Samsung CLP-500, 2.0.0" +*NickName: "Samsung CLP-500, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><1>" *QPDL QPDLVersion: "1" *General CMSFile: "CLP-500" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-postscript 0 pstoqpdl" @@ -43,7 +43,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -70,7 +70,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -95,7 +95,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -119,7 +119,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -250,4 +250,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of clp500.ppd, 12710 bytes. +*% End of clp500.ppd, 12707 bytes. diff --git a/ppd/clp500fr.ppd b/ppd/clp500fr.ppd index bdfcd80c..d9331246 100644 --- a/ppd/clp500fr.ppd +++ b/ppd/clp500fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-500 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "clp500.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-500" *ShortNickName: "Samsung CLP-500" -*NickName: "Samsung CLP-500, 2.0.0" +*NickName: "Samsung CLP-500, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp500pt.ppd b/ppd/clp500pt.ppd index 3ff5c88d..081d60f8 100644 --- a/ppd/clp500pt.ppd +++ b/ppd/clp500pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-500 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "clp500.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-500" *ShortNickName: "Samsung CLP-500" -*NickName: "Samsung CLP-500, 2.0.0" +*NickName: "Samsung CLP-500, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp510.ppd b/ppd/clp510.ppd index 6d6b45fe..b7e78484 100644 --- a/ppd/clp510.ppd +++ b/ppd/clp510.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for CLP-510 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "clp510.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-510" *ShortNickName: "Samsung CLP-510" -*NickName: "Samsung CLP-510, 2.0.0" +*NickName: "Samsung CLP-510, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><1>" *QPDL QPDLVersion: "1" *General CMSFile: "CLP-510" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-postscript 0 pstoqpdl" @@ -43,7 +43,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -70,7 +70,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -95,7 +95,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -119,7 +119,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -250,4 +250,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of clp510.ppd, 12710 bytes. +*% End of clp510.ppd, 12707 bytes. diff --git a/ppd/clp510fr.ppd b/ppd/clp510fr.ppd index 473450bf..9d6007cc 100644 --- a/ppd/clp510fr.ppd +++ b/ppd/clp510fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-510 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "clp510.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-510" *ShortNickName: "Samsung CLP-510" -*NickName: "Samsung CLP-510, 2.0.0" +*NickName: "Samsung CLP-510, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp510pt.ppd b/ppd/clp510pt.ppd index e84e5f63..5621c23a 100644 --- a/ppd/clp510pt.ppd +++ b/ppd/clp510pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-510 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "clp510.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-510" *ShortNickName: "Samsung CLP-510" -*NickName: "Samsung CLP-510, 2.0.0" +*NickName: "Samsung CLP-510, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp550.ppd b/ppd/clp550.ppd index eed839f3..39ff67f6 100644 --- a/ppd/clp550.ppd +++ b/ppd/clp550.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for CLP-550 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "clp550.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-550" *ShortNickName: "Samsung CLP-550" -*NickName: "Samsung CLP-550, 2.0.0" +*NickName: "Samsung CLP-550, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><1>" *QPDL QPDLVersion: "1" *General CMSFile: "CLP-500" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-postscript 0 pstoqpdl" @@ -43,7 +43,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -70,7 +70,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -95,7 +95,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -119,7 +119,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -250,4 +250,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of clp550.ppd, 12710 bytes. +*% End of clp550.ppd, 12707 bytes. diff --git a/ppd/clp550fr.ppd b/ppd/clp550fr.ppd index 3fe31427..4add91bb 100644 --- a/ppd/clp550fr.ppd +++ b/ppd/clp550fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-550 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "clp550.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-550" *ShortNickName: "Samsung CLP-550" -*NickName: "Samsung CLP-550, 2.0.0" +*NickName: "Samsung CLP-550, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp550pt.ppd b/ppd/clp550pt.ppd index f43c796d..64d59386 100644 --- a/ppd/clp550pt.ppd +++ b/ppd/clp550pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-550 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "clp550.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-550" *ShortNickName: "Samsung CLP-550" -*NickName: "Samsung CLP-550, 2.0.0" +*NickName: "Samsung CLP-550, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp600.ppd b/ppd/clp600.ppd index 659a6154..d88e24ab 100644 --- a/ppd/clp600.ppd +++ b/ppd/clp600.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for CLP-600 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "clp600.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-600" *ShortNickName: "Samsung CLP-600" -*NickName: "Samsung CLP-600, 2.0.0" +*NickName: "Samsung CLP-600, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -29,7 +29,7 @@ *QPDL QPDLVersion: "1" *General DocHeaderValues: "<0><0><0>" *General CMSFile: "CLP-600" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-postscript 0 pstoqpdl" @@ -43,7 +43,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -70,7 +70,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -95,7 +95,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -119,7 +119,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -233,4 +233,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of clp600.ppd, 11976 bytes. +*% End of clp600.ppd, 11973 bytes. diff --git a/ppd/clp600fr.ppd b/ppd/clp600fr.ppd index c2f45d09..f72be679 100644 --- a/ppd/clp600fr.ppd +++ b/ppd/clp600fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-600 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "clp600.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-600" *ShortNickName: "Samsung CLP-600" -*NickName: "Samsung CLP-600, 2.0.0" +*NickName: "Samsung CLP-600, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clp600pt.ppd b/ppd/clp600pt.ppd index 753ae586..d5609200 100644 --- a/ppd/clp600pt.ppd +++ b/ppd/clp600pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLP-600 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "clp600.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLP-600" *ShortNickName: "Samsung CLP-600" -*NickName: "Samsung CLP-600, 2.0.0" +*NickName: "Samsung CLP-600, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clx216x.ppd b/ppd/clx216x.ppd index f0478e05..c584395a 100644 --- a/ppd/clx216x.ppd +++ b/ppd/clx216x.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for CLX-216X with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "clx216x.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLX-216X" *ShortNickName: "Samsung CLX-216X" -*NickName: "Samsung CLX-216X, 2.0.0" +*NickName: "Samsung CLX-216X, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -29,7 +29,7 @@ *QPDL QPDLVersion: "2" *General DocHeaderValues: "<0><0><1>" *General CMSFile: "CLX-216x" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-postscript 0 pstoqpdl" @@ -43,7 +43,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -70,7 +70,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -95,7 +95,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -119,7 +119,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -233,4 +233,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of clx216x.ppd, 11983 bytes. +*% End of clx216x.ppd, 11980 bytes. diff --git a/ppd/clx216xfr.ppd b/ppd/clx216xfr.ppd index 98360c43..d4f8594f 100644 --- a/ppd/clx216xfr.ppd +++ b/ppd/clx216xfr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLX-216X with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "clx216x.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLX-216X" *ShortNickName: "Samsung CLX-216X" -*NickName: "Samsung CLX-216X, 2.0.0" +*NickName: "Samsung CLX-216X, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clx216xpt.ppd b/ppd/clx216xpt.ppd index d4820f7f..7b27ee5e 100644 --- a/ppd/clx216xpt.ppd +++ b/ppd/clx216xpt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLX-216X with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "clx216x.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLX-216X" *ShortNickName: "Samsung CLX-216X" -*NickName: "Samsung CLX-216X, 2.0.0" +*NickName: "Samsung CLX-216X, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clx2170.ppd b/ppd/clx2170.ppd index 72466d48..37cce834 100644 --- a/ppd/clx2170.ppd +++ b/ppd/clx2170.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for CLX-2170 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "clx2170.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLX-2170" *ShortNickName: "Samsung CLX-2170" -*NickName: "Samsung CLX-2170, 2.0.0" +*NickName: "Samsung CLX-2170, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -29,7 +29,7 @@ *QPDL QPDLVersion: "2" *General DocHeaderValues: "<0><0><1>" *General CMSFile: "CLX-2170" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-postscript 0 pstoqpdl" @@ -43,7 +43,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -70,7 +70,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -95,7 +95,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -119,7 +119,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -231,4 +231,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of clx2170.ppd, 11704 bytes. +*% End of clx2170.ppd, 11701 bytes. diff --git a/ppd/clx2170fr.ppd b/ppd/clx2170fr.ppd index fd09de4a..2594eb3b 100644 --- a/ppd/clx2170fr.ppd +++ b/ppd/clx2170fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLX-2170 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "clx2170.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLX-2170" *ShortNickName: "Samsung CLX-2170" -*NickName: "Samsung CLX-2170, 2.0.0" +*NickName: "Samsung CLX-2170, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clx2170pt.ppd b/ppd/clx2170pt.ppd index 360b21b0..a6535d12 100644 --- a/ppd/clx2170pt.ppd +++ b/ppd/clx2170pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLX-2170 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "clx2170.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLX-2170" *ShortNickName: "Samsung CLX-2170" -*NickName: "Samsung CLX-2170, 2.0.0" +*NickName: "Samsung CLX-2170, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clx3160.ppd b/ppd/clx3160.ppd index 47a1dd63..575af019 100644 --- a/ppd/clx3160.ppd +++ b/ppd/clx3160.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for CLX-3160 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "clx3160.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLX-3160" *ShortNickName: "Samsung CLX-3160" -*NickName: "Samsung CLX-3160, 2.0.0" +*NickName: "Samsung CLX-3160, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True @@ -29,7 +29,7 @@ *QPDL QPDLVersion: "2" *General DocHeaderValues: "<0><0><1>" *General CMSFile: "CLX-3160" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-postscript 0 pstoqpdl" @@ -43,7 +43,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -70,7 +70,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -95,7 +95,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -119,7 +119,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -233,4 +233,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of clx3160.ppd, 11983 bytes. +*% End of clx3160.ppd, 11980 bytes. diff --git a/ppd/clx3160fr.ppd b/ppd/clx3160fr.ppd index 1e02b069..f1e8e3c6 100644 --- a/ppd/clx3160fr.ppd +++ b/ppd/clx3160fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLX-3160 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "clx3160.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLX-3160" *ShortNickName: "Samsung CLX-3160" -*NickName: "Samsung CLX-3160, 2.0.0" +*NickName: "Samsung CLX-3160, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/clx3160pt.ppd b/ppd/clx3160pt.ppd index dba27486..1630247a 100644 --- a/ppd/clx3160pt.ppd +++ b/ppd/clx3160pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for CLX-3160 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "clx3160.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung CLX-3160" *ShortNickName: "Samsung CLX-3160" -*NickName: "Samsung CLX-3160, 2.0.0" +*NickName: "Samsung CLX-3160, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/compile.sh b/ppd/compile.sh deleted file mode 100755 index af1bc5f4..00000000 --- a/ppd/compile.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh -# -# compile.sh (C) 2007, Aurélien Croc (AP²C) -# -# Generate the DRV file to compile it by ppdc. -# This script adds a new command "#import "file"" in the DRV file which imports -# the content of the file where the command is located. To finish, it calls -# ppdc to compile the file and generate the PPD drivers. -# -# $Id$ -# - -# -# Function parseFile -# -parseFile() { - while IFS= read LINE; do - if [ -n "`echo "$LINE" | grep '^[ \t]*#import[ \t]*"[a-zA-Z0-9\.\-]*"'`" ]; then - FILE=`echo "$LINE" | sed -re 's/[ \t]*#import[ \t]"([a-zA-Z0-9\.\-]*)"/\1/'` - parseFile $FILE $2 - else - echo "$LINE" >> $2 - fi; - done < $1 -} - - -# -# Main script -# -if [ "$2" = "drv" ]; then - DRIVER=$1 - OUTFILE=${DRIVER%.in} - shift 1 - - echo "" > $OUTFILE - parseFile $DRIVER $OUTFILE - - -elif [ "$2" = "lang" ]; then - if [ -z $TMP ]; then - TMP="/tmp" - fi; - TMPFILE=`mktemp $TMP/driver.drv.XXXXXXXX` || exit 1 - DRIVER=$1 - - echo "" > $TMPFILE - parseFile $DRIVER $TMPFILE - - ppdpo -o $3 $TMPFILE - unlink $TMPFILE - - -else - if [ -z $TMP ]; then - TMP="/tmp" - fi; - TMPFILE=`mktemp $TMP/driver.drv.XXXXXXXX` || exit 1 - DRIVER=$1 - shift 1 - - echo "" > $TMPFILE - parseFile $DRIVER $TMPFILE - - ppdc $@ $TMPFILE - unlink $TMPFILE -fi; - - -# vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 enc=utf8: diff --git a/ppd/es180s.ppd b/ppd/es180s.ppd index c6b41f64..7dd28efb 100644 --- a/ppd/es180s.ppd +++ b/ppd/es180s.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for eSTUDIO180S with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "es180s.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Toshiba" *ModelName: "Toshiba eSTUDIO180S" *ShortNickName: "Toshiba eSTUDIO180S" -*NickName: "Toshiba eSTUDIO180S, 2.0.0" +*NickName: "Toshiba eSTUDIO180S, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/es180sfr.ppd b/ppd/es180sfr.ppd index b3f3a259..4cc4db8b 100644 --- a/ppd/es180sfr.ppd +++ b/ppd/es180sfr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for eSTUDIO180S with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "es180s.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Toshiba" *ModelName: "Toshiba eSTUDIO180S" *ShortNickName: "Toshiba eSTUDIO180S" -*NickName: "Toshiba eSTUDIO180S, 2.0.0" +*NickName: "Toshiba eSTUDIO180S, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/es180spt.ppd b/ppd/es180spt.ppd index c2bdfafe..a52e8499 100644 --- a/ppd/es180spt.ppd +++ b/ppd/es180spt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for eSTUDIO180S with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "es180s.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Toshiba" *ModelName: "Toshiba eSTUDIO180S" *ShortNickName: "Toshiba eSTUDIO180S" -*NickName: "Toshiba eSTUDIO180S, 2.0.0" +*NickName: "Toshiba eSTUDIO180S, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/m2020.ppd b/ppd/m2020.ppd new file mode 100644 index 00000000..26e2a4d9 --- /dev/null +++ b/ppd/m2020.ppd @@ -0,0 +1,254 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for M2020 Series with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "m2020.ppd" +*Product: "(M2020 Series)" +*Manufacturer: "Samsung" +*ModelName: "Samsung M2020 Series" +*ShortNickName: "Samsung M2020 Series" +*NickName: "Samsung M2020 Series, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "21" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "3" +*General DocHeaderValues: "<0><0><1>" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" +*QPDL PacketSize: "512" +*QPDL SpecialBandWidth: True +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "12.5 12.5 599.5 779.5" +*ImageableArea Legal/US Legal: "12.5 12.5 599.5 995.5" +*ImageableArea A4/A4: "12.5 12.5 582.5 829.5" +*ImageableArea Executive/Executive: "12.5 12.5 509.5 743.5" +*ImageableArea Ledger/US Ledger: "12.5 12.5 1211.5 779.5" +*ImageableArea A3/A3: "12.5 12.5 829.5 1178.5" +*ImageableArea Env10/Envelope #10: "12.5 12.5 284.5 671.5" +*ImageableArea Monarch/Envelope Monarch: "12.5 12.5 266.5 527.5" +*ImageableArea C5/Envelope C5: "12.5 12.5 446.5 636.5" +*ImageableArea DL/Envelope DL: "12.5 12.5 299.5 611.5" +*ImageableArea B4/JIS B4: "12.5 12.5 716.5 1019.5" +*ImageableArea B5/JIS B5: "12.5 12.5 503.5 716.5" +*ImageableArea EnvISOB5/Envelope B5: "12.5 12.5 486.5 696.5" +*ImageableArea Postcard/Postcard: "12.5 12.5 271.5 406.5" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "12.5 12.5 407.5 554.5" +*ImageableArea A5/A5: "12.5 12.5 407.5 582.5" +*ImageableArea A6/A6: "12.5 12.5 284.5 407.5" +*ImageableArea B6/JIS B6: "12.5 12.5 350.5 503.5" +*ImageableArea C6/Envelope C6: "12.5 12.5 310.5 446.5" +*ImageableArea Folio/Folio: "12.5 12.5 582.5 922.5" +*ImageableArea EnvPersonal/Envelope Personal: "12.5 12.5 248.5 455.5" +*ImageableArea Env9/Envelope #9: "12.5 12.5 266.5 626.5" +*ImageableArea Oficio/Oficio - 216x340mm: "12.5 12.5 599.5 959.5" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of m2020.ppd, 12456 bytes. diff --git a/ppd/m2070.ppd b/ppd/m2070.ppd new file mode 100644 index 00000000..f5b566d6 --- /dev/null +++ b/ppd/m2070.ppd @@ -0,0 +1,255 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for M2070 Series with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "m2070.ppd" +*Product: "(M2070 Series)" +*Manufacturer: "Samsung" +*ModelName: "Samsung M2070 Series" +*ShortNickName: "Samsung M2070 Series" +*NickName: "Samsung M2070 Series, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "21" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "3" +*General DocHeaderValues: "<0><0><1>" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" +*QPDL PacketSize: "512" +*QPDL SpecialBandWidth: True +*1284DeviceID: "MFG:Samsung;CMD:SPL,URF,FWV,PIC,EXT,DCU;MDL:M2070 Series;CLS:PRINTER;CID:SA_SPLV3_BW;MODE:SCN,SPL3,R000105;STATUS:IDLE;" +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "12.5 12.5 599.5 779.5" +*ImageableArea Legal/US Legal: "12.5 12.5 599.5 995.5" +*ImageableArea A4/A4: "12.5 12.5 582.5 829.5" +*ImageableArea Executive/Executive: "12.5 12.5 509.5 743.5" +*ImageableArea Ledger/US Ledger: "12.5 12.5 1211.5 779.5" +*ImageableArea A3/A3: "12.5 12.5 829.5 1178.5" +*ImageableArea Env10/Envelope #10: "12.5 12.5 284.5 671.5" +*ImageableArea Monarch/Envelope Monarch: "12.5 12.5 266.5 527.5" +*ImageableArea C5/Envelope C5: "12.5 12.5 446.5 636.5" +*ImageableArea DL/Envelope DL: "12.5 12.5 299.5 611.5" +*ImageableArea B4/JIS B4: "12.5 12.5 716.5 1019.5" +*ImageableArea B5/JIS B5: "12.5 12.5 503.5 716.5" +*ImageableArea EnvISOB5/Envelope B5: "12.5 12.5 486.5 696.5" +*ImageableArea Postcard/Postcard: "12.5 12.5 271.5 406.5" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "12.5 12.5 407.5 554.5" +*ImageableArea A5/A5: "12.5 12.5 407.5 582.5" +*ImageableArea A6/A6: "12.5 12.5 284.5 407.5" +*ImageableArea B6/JIS B6: "12.5 12.5 350.5 503.5" +*ImageableArea C6/Envelope C6: "12.5 12.5 310.5 446.5" +*ImageableArea Folio/Folio: "12.5 12.5 582.5 922.5" +*ImageableArea EnvPersonal/Envelope Personal: "12.5 12.5 248.5 455.5" +*ImageableArea Env9/Envelope #9: "12.5 12.5 266.5 626.5" +*ImageableArea Oficio/Oficio - 216x340mm: "12.5 12.5 599.5 959.5" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of m2070.ppd, 12593 bytes. diff --git a/ppd/m262x.ppd b/ppd/m262x.ppd new file mode 100644 index 00000000..e24818c2 --- /dev/null +++ b/ppd/m262x.ppd @@ -0,0 +1,254 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for M262x 282x Series with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "m262x.ppd" +*Product: "(M262x 282x Series)" +*Manufacturer: "Samsung" +*ModelName: "Samsung M262x 282x Series" +*ShortNickName: "Samsung M262x 282x Series" +*NickName: "Samsung M262x 282x Series, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "21" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "3" +*General DocHeaderValues: "<0><0><1>" +*cupsBackSide: "Normal" +*QPDL PacketSize: "512" +*QPDL SpecialBandWidth: True +*1284DeviceID: "MFG:Samsung;CMD:SPL;MDL:M262x 282x Series" +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "12.5 12.5 599.5 779.5" +*ImageableArea Legal/US Legal: "12.5 12.5 599.5 995.5" +*ImageableArea A4/A4: "12.5 12.5 582.5 829.5" +*ImageableArea Executive/Executive: "12.5 12.5 509.5 743.5" +*ImageableArea Ledger/US Ledger: "12.5 12.5 1211.5 779.5" +*ImageableArea A3/A3: "12.5 12.5 829.5 1178.5" +*ImageableArea Env10/Envelope #10: "12.5 12.5 284.5 671.5" +*ImageableArea Monarch/Envelope Monarch: "12.5 12.5 266.5 527.5" +*ImageableArea C5/Envelope C5: "12.5 12.5 446.5 636.5" +*ImageableArea DL/Envelope DL: "12.5 12.5 299.5 611.5" +*ImageableArea B4/JIS B4: "12.5 12.5 716.5 1019.5" +*ImageableArea B5/JIS B5: "12.5 12.5 503.5 716.5" +*ImageableArea EnvISOB5/Envelope B5: "12.5 12.5 486.5 696.5" +*ImageableArea Postcard/Postcard: "12.5 12.5 271.5 406.5" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "12.5 12.5 407.5 554.5" +*ImageableArea A5/A5: "12.5 12.5 407.5 582.5" +*ImageableArea A6/A6: "12.5 12.5 284.5 407.5" +*ImageableArea B6/JIS B6: "12.5 12.5 350.5 503.5" +*ImageableArea C6/Envelope C6: "12.5 12.5 310.5 446.5" +*ImageableArea Folio/Folio: "12.5 12.5 582.5 922.5" +*ImageableArea EnvPersonal/Envelope Personal: "12.5 12.5 248.5 455.5" +*ImageableArea Env9/Envelope #9: "12.5 12.5 266.5 626.5" +*ImageableArea Oficio/Oficio - 216x340mm: "12.5 12.5 599.5 959.5" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of m262x.ppd, 12515 bytes. diff --git a/ppd/m267x.ppd b/ppd/m267x.ppd new file mode 100644 index 00000000..3d4220b4 --- /dev/null +++ b/ppd/m267x.ppd @@ -0,0 +1,254 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for M267x 287x Series with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "m267x.ppd" +*Product: "(M267x 287x Series)" +*Manufacturer: "Samsung" +*ModelName: "Samsung M267x 287x Series" +*ShortNickName: "Samsung M267x 287x Series" +*NickName: "Samsung M267x 287x Series, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "21" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "3" +*General DocHeaderValues: "<0><0><1>" +*cupsBackSide: "Normal" +*QPDL PacketSize: "512" +*QPDL SpecialBandWidth: True +*1284DeviceID: "MFG:Samsung;CMD:SPL;MDL:M267x 287x Series" +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "12.5 12.5 599.5 779.5" +*ImageableArea Legal/US Legal: "12.5 12.5 599.5 995.5" +*ImageableArea A4/A4: "12.5 12.5 582.5 829.5" +*ImageableArea Executive/Executive: "12.5 12.5 509.5 743.5" +*ImageableArea Ledger/US Ledger: "12.5 12.5 1211.5 779.5" +*ImageableArea A3/A3: "12.5 12.5 829.5 1178.5" +*ImageableArea Env10/Envelope #10: "12.5 12.5 284.5 671.5" +*ImageableArea Monarch/Envelope Monarch: "12.5 12.5 266.5 527.5" +*ImageableArea C5/Envelope C5: "12.5 12.5 446.5 636.5" +*ImageableArea DL/Envelope DL: "12.5 12.5 299.5 611.5" +*ImageableArea B4/JIS B4: "12.5 12.5 716.5 1019.5" +*ImageableArea B5/JIS B5: "12.5 12.5 503.5 716.5" +*ImageableArea EnvISOB5/Envelope B5: "12.5 12.5 486.5 696.5" +*ImageableArea Postcard/Postcard: "12.5 12.5 271.5 406.5" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "12.5 12.5 407.5 554.5" +*ImageableArea A5/A5: "12.5 12.5 407.5 582.5" +*ImageableArea A6/A6: "12.5 12.5 284.5 407.5" +*ImageableArea B6/JIS B6: "12.5 12.5 350.5 503.5" +*ImageableArea C6/Envelope C6: "12.5 12.5 310.5 446.5" +*ImageableArea Folio/Folio: "12.5 12.5 582.5 922.5" +*ImageableArea EnvPersonal/Envelope Personal: "12.5 12.5 248.5 455.5" +*ImageableArea Env9/Envelope #9: "12.5 12.5 266.5 626.5" +*ImageableArea Oficio/Oficio - 216x340mm: "12.5 12.5 599.5 959.5" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of m267x.ppd, 12515 bytes. diff --git a/ppd/m283x.ppd b/ppd/m283x.ppd new file mode 100644 index 00000000..d70d3a45 --- /dev/null +++ b/ppd/m283x.ppd @@ -0,0 +1,254 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for M283x Series with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "m283x.ppd" +*Product: "(M283x Series)" +*Manufacturer: "Samsung" +*ModelName: "Samsung M283x Series" +*ShortNickName: "Samsung M283x Series" +*NickName: "Samsung M283x Series, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "21" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "3" +*General DocHeaderValues: "<0><0><1>" +*cupsBackSide: "Normal" +*QPDL PacketSize: "512" +*QPDL SpecialBandWidth: True +*1284DeviceID: "MFG:Samsung;CMD:SPL;MDL:M283x Series" +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "12.5 12.5 599.5 779.5" +*ImageableArea Legal/US Legal: "12.5 12.5 599.5 995.5" +*ImageableArea A4/A4: "12.5 12.5 582.5 829.5" +*ImageableArea Executive/Executive: "12.5 12.5 509.5 743.5" +*ImageableArea Ledger/US Ledger: "12.5 12.5 1211.5 779.5" +*ImageableArea A3/A3: "12.5 12.5 829.5 1178.5" +*ImageableArea Env10/Envelope #10: "12.5 12.5 284.5 671.5" +*ImageableArea Monarch/Envelope Monarch: "12.5 12.5 266.5 527.5" +*ImageableArea C5/Envelope C5: "12.5 12.5 446.5 636.5" +*ImageableArea DL/Envelope DL: "12.5 12.5 299.5 611.5" +*ImageableArea B4/JIS B4: "12.5 12.5 716.5 1019.5" +*ImageableArea B5/JIS B5: "12.5 12.5 503.5 716.5" +*ImageableArea EnvISOB5/Envelope B5: "12.5 12.5 486.5 696.5" +*ImageableArea Postcard/Postcard: "12.5 12.5 271.5 406.5" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "12.5 12.5 407.5 554.5" +*ImageableArea A5/A5: "12.5 12.5 407.5 582.5" +*ImageableArea A6/A6: "12.5 12.5 284.5 407.5" +*ImageableArea B6/JIS B6: "12.5 12.5 350.5 503.5" +*ImageableArea C6/Envelope C6: "12.5 12.5 310.5 446.5" +*ImageableArea Folio/Folio: "12.5 12.5 582.5 922.5" +*ImageableArea EnvPersonal/Envelope Personal: "12.5 12.5 248.5 455.5" +*ImageableArea Env9/Envelope #9: "12.5 12.5 266.5 626.5" +*ImageableArea Oficio/Oficio - 216x340mm: "12.5 12.5 599.5 959.5" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of m283x.ppd, 12485 bytes. diff --git a/ppd/ml1510.ppd b/ppd/ml1510.ppd index 2eedfdc8..9769bc2b 100644 --- a/ppd/ml1510.ppd +++ b/ppd/ml1510.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-1510 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml1510.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1510" *ShortNickName: "Samsung ML-1510" -*NickName: "Samsung ML-1510, 2.0.0" +*NickName: "Samsung ML-1510, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><0>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml1510.ppd, 12332 bytes. +*% End of ml1510.ppd, 12329 bytes. diff --git a/ppd/ml1510fr.ppd b/ppd/ml1510fr.ppd index 7de14fe1..a6a640ff 100644 --- a/ppd/ml1510fr.ppd +++ b/ppd/ml1510fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1510 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml1510.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1510" *ShortNickName: "Samsung ML-1510" -*NickName: "Samsung ML-1510, 2.0.0" +*NickName: "Samsung ML-1510, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1510pt.ppd b/ppd/ml1510pt.ppd index c93adfbb..efe68cfb 100644 --- a/ppd/ml1510pt.ppd +++ b/ppd/ml1510pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1510 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml1510.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1510" *ShortNickName: "Samsung ML-1510" -*NickName: "Samsung ML-1510, 2.0.0" +*NickName: "Samsung ML-1510, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1520.ppd b/ppd/ml1520.ppd index ed35e471..c9940f20 100644 --- a/ppd/ml1520.ppd +++ b/ppd/ml1520.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-1520 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml1520.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1520" *ShortNickName: "Samsung ML-1520" -*NickName: "Samsung ML-1520, 2.0.0" +*NickName: "Samsung ML-1520, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><0>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml1520.ppd, 12332 bytes. +*% End of ml1520.ppd, 12329 bytes. diff --git a/ppd/ml1520fr.ppd b/ppd/ml1520fr.ppd index 690b479c..7890e81b 100644 --- a/ppd/ml1520fr.ppd +++ b/ppd/ml1520fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1520 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml1520.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1520" *ShortNickName: "Samsung ML-1520" -*NickName: "Samsung ML-1520, 2.0.0" +*NickName: "Samsung ML-1520, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1520pt.ppd b/ppd/ml1520pt.ppd index 6ae8f4e4..7c2da262 100644 --- a/ppd/ml1520pt.ppd +++ b/ppd/ml1520pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1520 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml1520.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1520" *ShortNickName: "Samsung ML-1520" -*NickName: "Samsung ML-1520, 2.0.0" +*NickName: "Samsung ML-1520, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1610.ppd b/ppd/ml1610.ppd index dc44f7cc..5ee8ac55 100644 --- a/ppd/ml1610.ppd +++ b/ppd/ml1610.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-1610 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml1610.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1610" *ShortNickName: "Samsung ML-1610" -*NickName: "Samsung ML-1610, 2.0.0" +*NickName: "Samsung ML-1610, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,8 @@ *General DocHeaderValues: "<0><0><0>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*1284DeviceID: "MFG:Samsung;MDL:ML-1610;CMD:GDI;" +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +42,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +69,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +94,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +118,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +250,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml1610.ppd, 12332 bytes. +*% End of ml1610.ppd, 12379 bytes. diff --git a/ppd/ml1610fr.ppd b/ppd/ml1610fr.ppd index de7d428d..4638a947 100644 --- a/ppd/ml1610fr.ppd +++ b/ppd/ml1610fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1610 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml1610.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1610" *ShortNickName: "Samsung ML-1610" -*NickName: "Samsung ML-1610, 2.0.0" +*NickName: "Samsung ML-1610, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1610pt.ppd b/ppd/ml1610pt.ppd index 1d4b3a5a..7f5bc500 100644 --- a/ppd/ml1610pt.ppd +++ b/ppd/ml1610pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1610 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml1610.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1610" *ShortNickName: "Samsung ML-1610" -*NickName: "Samsung ML-1610, 2.0.0" +*NickName: "Samsung ML-1610, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1630.ppd b/ppd/ml1630.ppd index 2865029c..fd86aac7 100644 --- a/ppd/ml1630.ppd +++ b/ppd/ml1630.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-1630 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml1630.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1630" *ShortNickName: "Samsung ML-1630" -*NickName: "Samsung ML-1630, 2.0.0" +*NickName: "Samsung ML-1630, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml1630.ppd, 12343 bytes. +*% End of ml1630.ppd, 12340 bytes. diff --git a/ppd/ml1630fr.ppd b/ppd/ml1630fr.ppd index c080e61d..30e36125 100644 --- a/ppd/ml1630fr.ppd +++ b/ppd/ml1630fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1630 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml1630.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1630" *ShortNickName: "Samsung ML-1630" -*NickName: "Samsung ML-1630, 2.0.0" +*NickName: "Samsung ML-1630, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1630pt.ppd b/ppd/ml1630pt.ppd index b0757ddf..62f3841c 100644 --- a/ppd/ml1630pt.ppd +++ b/ppd/ml1630pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1630 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml1630.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1630" *ShortNickName: "Samsung ML-1630" -*NickName: "Samsung ML-1630, 2.0.0" +*NickName: "Samsung ML-1630, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1640.ppd b/ppd/ml1640.ppd index b10c78ac..8231ea1a 100644 --- a/ppd/ml1640.ppd +++ b/ppd/ml1640.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-1640 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml1640.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1640" *ShortNickName: "Samsung ML-1640" -*NickName: "Samsung ML-1640, 2.0.0" +*NickName: "Samsung ML-1640, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,8 @@ *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*1284DeviceID: "MFG:Samsung;MDL:ML-1640 Series;CMD:GDI,FWV;" +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +42,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +69,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +94,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +118,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +250,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml1640.ppd, 12343 bytes. +*% End of ml1640.ppd, 12401 bytes. diff --git a/ppd/ml1640fr.ppd b/ppd/ml1640fr.ppd index 0c24181c..3f1f058f 100644 --- a/ppd/ml1640fr.ppd +++ b/ppd/ml1640fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1640 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml1640.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1640" *ShortNickName: "Samsung ML-1640" -*NickName: "Samsung ML-1640, 2.0.0" +*NickName: "Samsung ML-1640, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1640pt.ppd b/ppd/ml1640pt.ppd index 272fc323..a017bc90 100644 --- a/ppd/ml1640pt.ppd +++ b/ppd/ml1640pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1640 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml1640.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1640" *ShortNickName: "Samsung ML-1640" -*NickName: "Samsung ML-1640, 2.0.0" +*NickName: "Samsung ML-1640, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1660.ppd b/ppd/ml1660.ppd index d0e61c16..e7fb66ba 100644 --- a/ppd/ml1660.ppd +++ b/ppd/ml1660.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-1660 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml1660.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1660" *ShortNickName: "Samsung ML-1660" -*NickName: "Samsung ML-1660, 2.0.0" +*NickName: "Samsung ML-1660, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,8 @@ *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*1284DeviceID: "MFG:Samsung;MDL:ML-1660 Series;CMD:GDI,FWV,EXT;" +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +42,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +69,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +94,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +118,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +250,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml1660.ppd, 12343 bytes. +*% End of ml1660.ppd, 12405 bytes. diff --git a/ppd/ml1660fr.ppd b/ppd/ml1660fr.ppd index 77a67cff..2349d061 100644 --- a/ppd/ml1660fr.ppd +++ b/ppd/ml1660fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1660 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml1660.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1660" *ShortNickName: "Samsung ML-1660" -*NickName: "Samsung ML-1660, 2.0.0" +*NickName: "Samsung ML-1660, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1660pt.ppd b/ppd/ml1660pt.ppd index 748587f4..437c7200 100644 --- a/ppd/ml1660pt.ppd +++ b/ppd/ml1660pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1660 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml1660.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1660" *ShortNickName: "Samsung ML-1660" -*NickName: "Samsung ML-1660, 2.0.0" +*NickName: "Samsung ML-1660, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1670.ppd b/ppd/ml1670.ppd new file mode 100644 index 00000000..17a9129a --- /dev/null +++ b/ppd/ml1670.ppd @@ -0,0 +1,255 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for ML-1670 with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "ml1670.ppd" +*Product: "(ML-1670)" +*Manufacturer: "Samsung" +*ModelName: "Samsung ML-1670" +*ShortNickName: "Samsung ML-1670" +*NickName: "Samsung ML-1670, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "1" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "5" +*QPDL PacketSize: "512" +*General DocHeaderValues: "<0><0><1>" +*1284DeviceID: "MFG:Samsung;CMD:GDI,FWV,EXT;MDL:ML-1860 Series;CLS:PRINTER;" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" +*QPDL SpecialBandWidth: True +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "10.75 15 601.25 777" +*ImageableArea Legal/US Legal: "10.75 15 601.25 993" +*ImageableArea A4/A4: "10.75 15 584.25 827" +*ImageableArea Executive/Executive: "10.75 15 511.25 741" +*ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" +*ImageableArea A3/A3: "10.75 15 831.25 1176" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" +*ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" +*ImageableArea C5/Envelope C5: "10.75 15 448.25 634" +*ImageableArea DL/Envelope DL: "10.75 15 301.25 609" +*ImageableArea B4/JIS B4: "10.75 15 718.25 1017" +*ImageableArea B5/JIS B5: "10.75 15 505.25 714" +*ImageableArea EnvISOB5/Envelope B5: "10.75 15 488.25 694" +*ImageableArea Postcard/Postcard: "10.75 15 273.25 404" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "10.75 15 409.25 552" +*ImageableArea A5/A5: "10.75 15 409.25 580" +*ImageableArea A6/A6: "10.75 15 286.25 405" +*ImageableArea B6/JIS B6: "10.75 15 352.25 501" +*ImageableArea C6/Envelope C6: "10.75 15 312.25 444" +*ImageableArea Folio/Folio: "10.75 15 584.25 920" +*ImageableArea EnvPersonal/Envelope Personal: "10.75 15 250.25 453" +*ImageableArea Env9/Envelope #9: "10.75 15 268.25 624" +*ImageableArea Oficio/Oficio - 216x340mm: "10.75 15 601.25 957" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of ml1670.ppd, 12463 bytes. diff --git a/ppd/ml1710.ppd b/ppd/ml1710.ppd index aea7a20c..801cc089 100644 --- a/ppd/ml1710.ppd +++ b/ppd/ml1710.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-1710 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml1710.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1710" *ShortNickName: "Samsung ML-1710" -*NickName: "Samsung ML-1710, 2.0.0" +*NickName: "Samsung ML-1710, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><0>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml1710.ppd, 12332 bytes. +*% End of ml1710.ppd, 12329 bytes. diff --git a/ppd/ml1710fr.ppd b/ppd/ml1710fr.ppd index 5d4e2663..7407041d 100644 --- a/ppd/ml1710fr.ppd +++ b/ppd/ml1710fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1710 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml1710.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1710" *ShortNickName: "Samsung ML-1710" -*NickName: "Samsung ML-1710, 2.0.0" +*NickName: "Samsung ML-1710, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1710pt.ppd b/ppd/ml1710pt.ppd index fc291282..c361ddee 100644 --- a/ppd/ml1710pt.ppd +++ b/ppd/ml1710pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1710 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml1710.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1710" *ShortNickName: "Samsung ML-1710" -*NickName: "Samsung ML-1710, 2.0.0" +*NickName: "Samsung ML-1710, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1740.ppd b/ppd/ml1740.ppd index 3fe45647..9bcb0575 100644 --- a/ppd/ml1740.ppd +++ b/ppd/ml1740.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-1740 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml1740.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1740" *ShortNickName: "Samsung ML-1740" -*NickName: "Samsung ML-1740, 2.0.0" +*NickName: "Samsung ML-1740, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><0>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml1740.ppd, 12332 bytes. +*% End of ml1740.ppd, 12329 bytes. diff --git a/ppd/ml1740fr.ppd b/ppd/ml1740fr.ppd index 70e5d046..c7d6a3a4 100644 --- a/ppd/ml1740fr.ppd +++ b/ppd/ml1740fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1740 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml1740.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1740" *ShortNickName: "Samsung ML-1740" -*NickName: "Samsung ML-1740, 2.0.0" +*NickName: "Samsung ML-1740, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1740pt.ppd b/ppd/ml1740pt.ppd index 36f65716..adfaa769 100644 --- a/ppd/ml1740pt.ppd +++ b/ppd/ml1740pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1740 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml1740.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1740" *ShortNickName: "Samsung ML-1740" -*NickName: "Samsung ML-1740, 2.0.0" +*NickName: "Samsung ML-1740, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1750.ppd b/ppd/ml1750.ppd index d8f83a6a..478cd820 100644 --- a/ppd/ml1750.ppd +++ b/ppd/ml1750.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-1750 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml1750.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1750" *ShortNickName: "Samsung ML-1750" -*NickName: "Samsung ML-1750, 2.0.0" +*NickName: "Samsung ML-1750, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><0>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -256,4 +256,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml1750.ppd, 12542 bytes. +*% End of ml1750.ppd, 12539 bytes. diff --git a/ppd/ml1750fr.ppd b/ppd/ml1750fr.ppd index ead13c27..a1bef921 100644 --- a/ppd/ml1750fr.ppd +++ b/ppd/ml1750fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1750 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml1750.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1750" *ShortNickName: "Samsung ML-1750" -*NickName: "Samsung ML-1750, 2.0.0" +*NickName: "Samsung ML-1750, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1750pt.ppd b/ppd/ml1750pt.ppd index 6cf88f94..953bfcb7 100644 --- a/ppd/ml1750pt.ppd +++ b/ppd/ml1750pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1750 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml1750.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1750" *ShortNickName: "Samsung ML-1750" -*NickName: "Samsung ML-1750, 2.0.0" +*NickName: "Samsung ML-1750, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1860.ppd b/ppd/ml1860.ppd new file mode 100644 index 00000000..37e9e480 --- /dev/null +++ b/ppd/ml1860.ppd @@ -0,0 +1,255 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for ML-1860 with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "ml1860.ppd" +*Product: "(ML-1860)" +*Manufacturer: "Samsung" +*ModelName: "Samsung ML-1860" +*ShortNickName: "Samsung ML-1860" +*NickName: "Samsung ML-1860, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "1" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "5" +*QPDL PacketSize: "512" +*General DocHeaderValues: "<0><0><1>" +*1284DeviceID: "MFG:Samsung;CMD:GDI,FWV,EXT;MDL:ML-1860 Series;CLS:PRINTER;" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" +*QPDL SpecialBandWidth: True +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "10.75 15 601.25 777" +*ImageableArea Legal/US Legal: "10.75 15 601.25 993" +*ImageableArea A4/A4: "10.75 15 584.25 827" +*ImageableArea Executive/Executive: "10.75 15 511.25 741" +*ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" +*ImageableArea A3/A3: "10.75 15 831.25 1176" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" +*ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" +*ImageableArea C5/Envelope C5: "10.75 15 448.25 634" +*ImageableArea DL/Envelope DL: "10.75 15 301.25 609" +*ImageableArea B4/JIS B4: "10.75 15 718.25 1017" +*ImageableArea B5/JIS B5: "10.75 15 505.25 714" +*ImageableArea EnvISOB5/Envelope B5: "10.75 15 488.25 694" +*ImageableArea Postcard/Postcard: "10.75 15 273.25 404" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "10.75 15 409.25 552" +*ImageableArea A5/A5: "10.75 15 409.25 580" +*ImageableArea A6/A6: "10.75 15 286.25 405" +*ImageableArea B6/JIS B6: "10.75 15 352.25 501" +*ImageableArea C6/Envelope C6: "10.75 15 312.25 444" +*ImageableArea Folio/Folio: "10.75 15 584.25 920" +*ImageableArea EnvPersonal/Envelope Personal: "10.75 15 250.25 453" +*ImageableArea Env9/Envelope #9: "10.75 15 268.25 624" +*ImageableArea Oficio/Oficio - 216x340mm: "10.75 15 601.25 957" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of ml1860.ppd, 12463 bytes. diff --git a/ppd/ml1865.ppd b/ppd/ml1865.ppd new file mode 100644 index 00000000..1c9f4e08 --- /dev/null +++ b/ppd/ml1865.ppd @@ -0,0 +1,255 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for ML-1865 with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "ml1865.ppd" +*Product: "(ML-1865)" +*Manufacturer: "Samsung" +*ModelName: "Samsung ML-1865" +*ShortNickName: "Samsung ML-1865" +*NickName: "Samsung ML-1865, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "1" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "5" +*QPDL PacketSize: "512" +*General DocHeaderValues: "<0><0><1>" +*1284DeviceID: "MFG:Samsung;CMD:GDI,FWV,EXT;MDL:ML-1860 Series;CLS:PRINTER;" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" +*QPDL SpecialBandWidth: True +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "10.75 15 601.25 777" +*ImageableArea Legal/US Legal: "10.75 15 601.25 993" +*ImageableArea A4/A4: "10.75 15 584.25 827" +*ImageableArea Executive/Executive: "10.75 15 511.25 741" +*ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" +*ImageableArea A3/A3: "10.75 15 831.25 1176" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" +*ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" +*ImageableArea C5/Envelope C5: "10.75 15 448.25 634" +*ImageableArea DL/Envelope DL: "10.75 15 301.25 609" +*ImageableArea B4/JIS B4: "10.75 15 718.25 1017" +*ImageableArea B5/JIS B5: "10.75 15 505.25 714" +*ImageableArea EnvISOB5/Envelope B5: "10.75 15 488.25 694" +*ImageableArea Postcard/Postcard: "10.75 15 273.25 404" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "10.75 15 409.25 552" +*ImageableArea A5/A5: "10.75 15 409.25 580" +*ImageableArea A6/A6: "10.75 15 286.25 405" +*ImageableArea B6/JIS B6: "10.75 15 352.25 501" +*ImageableArea C6/Envelope C6: "10.75 15 312.25 444" +*ImageableArea Folio/Folio: "10.75 15 584.25 920" +*ImageableArea EnvPersonal/Envelope Personal: "10.75 15 250.25 453" +*ImageableArea Env9/Envelope #9: "10.75 15 268.25 624" +*ImageableArea Oficio/Oficio - 216x340mm: "10.75 15 601.25 957" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of ml1865.ppd, 12463 bytes. diff --git a/ppd/ml1865w.ppd b/ppd/ml1865w.ppd new file mode 100644 index 00000000..ac7013c0 --- /dev/null +++ b/ppd/ml1865w.ppd @@ -0,0 +1,254 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for ML-1865W Series with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "ml1865w.ppd" +*Product: "(ML-1865W Series)" +*Manufacturer: "Samsung" +*ModelName: "Samsung ML-1865W Series" +*ShortNickName: "Samsung ML-1865W Series" +*NickName: "Samsung ML-1865W Series, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "21" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "3" +*General DocHeaderValues: "<0><0><1>" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" +*QPDL PacketSize: "512" +*QPDL SpecialBandWidth: True +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "12.5 12.5 599.5 779.5" +*ImageableArea Legal/US Legal: "12.5 12.5 599.5 995.5" +*ImageableArea A4/A4: "12.5 12.5 582.5 829.5" +*ImageableArea Executive/Executive: "12.5 12.5 509.5 743.5" +*ImageableArea Ledger/US Ledger: "12.5 12.5 1211.5 779.5" +*ImageableArea A3/A3: "12.5 12.5 829.5 1178.5" +*ImageableArea Env10/Envelope #10: "12.5 12.5 284.5 671.5" +*ImageableArea Monarch/Envelope Monarch: "12.5 12.5 266.5 527.5" +*ImageableArea C5/Envelope C5: "12.5 12.5 446.5 636.5" +*ImageableArea DL/Envelope DL: "12.5 12.5 299.5 611.5" +*ImageableArea B4/JIS B4: "12.5 12.5 716.5 1019.5" +*ImageableArea B5/JIS B5: "12.5 12.5 503.5 716.5" +*ImageableArea EnvISOB5/Envelope B5: "12.5 12.5 486.5 696.5" +*ImageableArea Postcard/Postcard: "12.5 12.5 271.5 406.5" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "12.5 12.5 407.5 554.5" +*ImageableArea A5/A5: "12.5 12.5 407.5 582.5" +*ImageableArea A6/A6: "12.5 12.5 284.5 407.5" +*ImageableArea B6/JIS B6: "12.5 12.5 350.5 503.5" +*ImageableArea C6/Envelope C6: "12.5 12.5 310.5 446.5" +*ImageableArea Folio/Folio: "12.5 12.5 582.5 922.5" +*ImageableArea EnvPersonal/Envelope Personal: "12.5 12.5 248.5 455.5" +*ImageableArea Env9/Envelope #9: "12.5 12.5 266.5 626.5" +*ImageableArea Oficio/Oficio - 216x340mm: "12.5 12.5 599.5 959.5" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of ml1865w.ppd, 12475 bytes. diff --git a/ppd/ml1910.ppd b/ppd/ml1910.ppd index 51f880d1..23461692 100644 --- a/ppd/ml1910.ppd +++ b/ppd/ml1910.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-1910 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml1910.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1910" *ShortNickName: "Samsung ML-1910" -*NickName: "Samsung ML-1910, 2.0.0" +*NickName: "Samsung ML-1910, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml1910.ppd, 12343 bytes. +*% End of ml1910.ppd, 12340 bytes. diff --git a/ppd/ml1910fr.ppd b/ppd/ml1910fr.ppd index b1e81297..873fa4d3 100644 --- a/ppd/ml1910fr.ppd +++ b/ppd/ml1910fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1910 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml1910.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1910" *ShortNickName: "Samsung ML-1910" -*NickName: "Samsung ML-1910, 2.0.0" +*NickName: "Samsung ML-1910, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1910pt.ppd b/ppd/ml1910pt.ppd index 92cfcff8..a7ee3402 100644 --- a/ppd/ml1910pt.ppd +++ b/ppd/ml1910pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1910 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml1910.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1910" *ShortNickName: "Samsung ML-1910" -*NickName: "Samsung ML-1910, 2.0.0" +*NickName: "Samsung ML-1910, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1915.ppd b/ppd/ml1915.ppd index 341c4ca9..b0895d63 100644 --- a/ppd/ml1915.ppd +++ b/ppd/ml1915.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-1915 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml1915.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1915" *ShortNickName: "Samsung ML-1915" -*NickName: "Samsung ML-1915, 2.0.0" +*NickName: "Samsung ML-1915, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.7 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +93,7 @@ *ImageableArea Executive/Executive: "12.5 12.5 509.5 743.5" *ImageableArea Ledger/US Ledger: "12.5 12.5 1211.5 779.5" *ImageableArea A3/A3: "12.5 12.5 829.5 1178.5" -*ImageableArea Env10/Envelope #10 : "12.5 12.5 284.5 671.5" +*ImageableArea Env10/Envelope #10: "12.5 12.5 284.5 671.5" *ImageableArea Monarch/Envelope Monarch: "12.5 12.5 266.5 527.5" *ImageableArea C5/Envelope C5: "12.5 12.5 446.5 636.5" *ImageableArea DL/Envelope DL: "12.5 12.5 299.5 611.5" @@ -117,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml1915.ppd, 12391 bytes. +*% End of ml1915.ppd, 12387 bytes. diff --git a/ppd/ml1915fr.ppd b/ppd/ml1915fr.ppd index a3f6b068..059aab27 100644 --- a/ppd/ml1915fr.ppd +++ b/ppd/ml1915fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1915 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml1915.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1915" *ShortNickName: "Samsung ML-1915" -*NickName: "Samsung ML-1915, 2.0.0" +*NickName: "Samsung ML-1915, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml1915pt.ppd b/ppd/ml1915pt.ppd index 5f08aec5..d1b06881 100644 --- a/ppd/ml1915pt.ppd +++ b/ppd/ml1915pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-1915 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.7rc1. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml1915.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-1915" *ShortNickName: "Samsung ML-1915" -*NickName: "Samsung ML-1915, 2.0.0" +*NickName: "Samsung ML-1915, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2010.ppd b/ppd/ml2010.ppd index 98b0af80..b89ba1d1 100644 --- a/ppd/ml2010.ppd +++ b/ppd/ml2010.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-2010 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml2010.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2010" *ShortNickName: "Samsung ML-2010" -*NickName: "Samsung ML-2010, 2.0.0" +*NickName: "Samsung ML-2010, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,8 @@ *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*1284DeviceID: "MFG:Samsung;MDL:ML-2010;CMD:GDI;" +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +42,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +69,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +94,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +118,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +250,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml2010.ppd, 12343 bytes. +*% End of ml2010.ppd, 12390 bytes. diff --git a/ppd/ml2010fr.ppd b/ppd/ml2010fr.ppd index 5bd89736..37541fbd 100644 --- a/ppd/ml2010fr.ppd +++ b/ppd/ml2010fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2010 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml2010.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2010" *ShortNickName: "Samsung ML-2010" -*NickName: "Samsung ML-2010, 2.0.0" +*NickName: "Samsung ML-2010, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2010pt.ppd b/ppd/ml2010pt.ppd index ee21c423..9facf248 100644 --- a/ppd/ml2010pt.ppd +++ b/ppd/ml2010pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2010 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml2010.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2010" *ShortNickName: "Samsung ML-2010" -*NickName: "Samsung ML-2010, 2.0.0" +*NickName: "Samsung ML-2010, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2015.ppd b/ppd/ml2015.ppd index 01b92dbe..18a401aa 100644 --- a/ppd/ml2015.ppd +++ b/ppd/ml2015.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-2015 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml2015.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2015" *ShortNickName: "Samsung ML-2015" -*NickName: "Samsung ML-2015, 2.0.0" +*NickName: "Samsung ML-2015, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml2015.ppd, 12343 bytes. +*% End of ml2015.ppd, 12340 bytes. diff --git a/ppd/ml2015fr.ppd b/ppd/ml2015fr.ppd index 5a0a5c19..7d2d2050 100644 --- a/ppd/ml2015fr.ppd +++ b/ppd/ml2015fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2015 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml2015.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2015" *ShortNickName: "Samsung ML-2015" -*NickName: "Samsung ML-2015, 2.0.0" +*NickName: "Samsung ML-2015, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2015pt.ppd b/ppd/ml2015pt.ppd index 38cb5c57..1b007c15 100644 --- a/ppd/ml2015pt.ppd +++ b/ppd/ml2015pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2015 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml2015.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2015" *ShortNickName: "Samsung ML-2015" -*NickName: "Samsung ML-2015, 2.0.0" +*NickName: "Samsung ML-2015, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2150.ppd b/ppd/ml2150.ppd index a4778503..c59f8337 100644 --- a/ppd/ml2150.ppd +++ b/ppd/ml2150.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-2150 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml2150.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2150" *ShortNickName: "Samsung ML-2150" -*NickName: "Samsung ML-2150, 2.0.0" +*NickName: "Samsung ML-2150, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -26,7 +26,7 @@ *QPDL QPDLVersion: "1" *General DocHeaderValues: "<0><0><0>" *cupsBackSide: "Normal" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -46,7 +46,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -73,7 +73,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -98,7 +98,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -122,7 +122,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -287,4 +287,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml2150.ppd, 14048 bytes. +*% End of ml2150.ppd, 14045 bytes. diff --git a/ppd/ml2150fr.ppd b/ppd/ml2150fr.ppd index 9fcdae18..90f8024d 100644 --- a/ppd/ml2150fr.ppd +++ b/ppd/ml2150fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2150 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml2150.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2150" *ShortNickName: "Samsung ML-2150" -*NickName: "Samsung ML-2150, 2.0.0" +*NickName: "Samsung ML-2150, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2150pt.ppd b/ppd/ml2150pt.ppd index 5868fda0..175b9231 100644 --- a/ppd/ml2150pt.ppd +++ b/ppd/ml2150pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2150 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml2150.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2150" *ShortNickName: "Samsung ML-2150" -*NickName: "Samsung ML-2150, 2.0.0" +*NickName: "Samsung ML-2150, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2160.ppd b/ppd/ml2160.ppd new file mode 100644 index 00000000..fb83cc21 --- /dev/null +++ b/ppd/ml2160.ppd @@ -0,0 +1,254 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for ML-2160 with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "ml2160.ppd" +*Product: "(ML-2160)" +*Manufacturer: "Samsung" +*ModelName: "Samsung ML-2160" +*ShortNickName: "Samsung ML-2160" +*NickName: "Samsung ML-2160, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "1" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "3" +*General DocHeaderValues: "<0><0><1>" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" +*QPDL PacketSize: "512" +*1284DeviceID: "MFG:Samsung;MDL:ML-2160 Series;CMD:SPL,FWV,PIC,BDN,EXT;" +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "10.75 15 601.25 777" +*ImageableArea Legal/US Legal: "10.75 15 601.25 993" +*ImageableArea A4/A4: "10.75 15 584.25 827" +*ImageableArea Executive/Executive: "10.75 15 511.25 741" +*ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" +*ImageableArea A3/A3: "10.75 15 831.25 1176" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" +*ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" +*ImageableArea C5/Envelope C5: "10.75 15 448.25 634" +*ImageableArea DL/Envelope DL: "10.75 15 301.25 609" +*ImageableArea B4/JIS B4: "10.75 15 718.25 1017" +*ImageableArea B5/JIS B5: "10.75 15 505.25 714" +*ImageableArea EnvISOB5/Envelope B5: "10.75 15 488.25 694" +*ImageableArea Postcard/Postcard: "10.75 15 273.25 404" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "10.75 15 409.25 552" +*ImageableArea A5/A5: "10.75 15 409.25 580" +*ImageableArea A6/A6: "10.75 15 286.25 405" +*ImageableArea B6/JIS B6: "10.75 15 352.25 501" +*ImageableArea C6/Envelope C6: "10.75 15 312.25 444" +*ImageableArea Folio/Folio: "10.75 15 584.25 920" +*ImageableArea EnvPersonal/Envelope Personal: "10.75 15 250.25 453" +*ImageableArea Env9/Envelope #9: "10.75 15 268.25 624" +*ImageableArea Oficio/Oficio - 216x340mm: "10.75 15 601.25 957" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of ml2160.ppd, 12430 bytes. diff --git a/ppd/ml2165.ppd b/ppd/ml2165.ppd new file mode 100644 index 00000000..2e4c5276 --- /dev/null +++ b/ppd/ml2165.ppd @@ -0,0 +1,252 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for ML-2165 with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "ml2165.ppd" +*Product: "(ML-2165)" +*Manufacturer: "Samsung" +*ModelName: "Samsung ML-2165" +*ShortNickName: "Samsung ML-2165" +*NickName: "Samsung ML-2165, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "21" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "3" +*General DocHeaderValues: "<0><0><1>" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "12.5 12.5 599.5 779.5" +*ImageableArea Legal/US Legal: "12.5 12.5 599.5 995.5" +*ImageableArea A4/A4: "12.5 12.5 582.5 829.5" +*ImageableArea Executive/Executive: "12.5 12.5 509.5 743.5" +*ImageableArea Ledger/US Ledger: "12.5 12.5 1211.5 779.5" +*ImageableArea A3/A3: "12.5 12.5 829.5 1178.5" +*ImageableArea Env10/Envelope #10: "12.5 12.5 284.5 671.5" +*ImageableArea Monarch/Envelope Monarch: "12.5 12.5 266.5 527.5" +*ImageableArea C5/Envelope C5: "12.5 12.5 446.5 636.5" +*ImageableArea DL/Envelope DL: "12.5 12.5 299.5 611.5" +*ImageableArea B4/JIS B4: "12.5 12.5 716.5 1019.5" +*ImageableArea B5/JIS B5: "12.5 12.5 503.5 716.5" +*ImageableArea EnvISOB5/Envelope B5: "12.5 12.5 486.5 696.5" +*ImageableArea Postcard/Postcard: "12.5 12.5 271.5 406.5" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "12.5 12.5 407.5 554.5" +*ImageableArea A5/A5: "12.5 12.5 407.5 582.5" +*ImageableArea A6/A6: "12.5 12.5 284.5 407.5" +*ImageableArea B6/JIS B6: "12.5 12.5 350.5 503.5" +*ImageableArea C6/Envelope C6: "12.5 12.5 310.5 446.5" +*ImageableArea Folio/Folio: "12.5 12.5 582.5 922.5" +*ImageableArea EnvPersonal/Envelope Personal: "12.5 12.5 248.5 455.5" +*ImageableArea Env9/Envelope #9: "12.5 12.5 266.5 626.5" +*ImageableArea Oficio/Oficio - 216x340mm: "12.5 12.5 599.5 959.5" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of ml2165.ppd, 12380 bytes. diff --git a/ppd/ml2240.ppd b/ppd/ml2240.ppd index 192ae9fb..6c74621d 100644 --- a/ppd/ml2240.ppd +++ b/ppd/ml2240.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-2240 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml2240.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2240" *ShortNickName: "Samsung ML-2240" -*NickName: "Samsung ML-2240, 2.0.0" +*NickName: "Samsung ML-2240, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml2240.ppd, 12343 bytes. +*% End of ml2240.ppd, 12340 bytes. diff --git a/ppd/ml2240fr.ppd b/ppd/ml2240fr.ppd index 92292948..690e4a70 100644 --- a/ppd/ml2240fr.ppd +++ b/ppd/ml2240fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2240 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml2240.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2240" *ShortNickName: "Samsung ML-2240" -*NickName: "Samsung ML-2240, 2.0.0" +*NickName: "Samsung ML-2240, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2240pt.ppd b/ppd/ml2240pt.ppd index ff689396..914649fe 100644 --- a/ppd/ml2240pt.ppd +++ b/ppd/ml2240pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2240 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml2240.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2240" *ShortNickName: "Samsung ML-2240" -*NickName: "Samsung ML-2240, 2.0.0" +*NickName: "Samsung ML-2240, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2250.ppd b/ppd/ml2250.ppd index f906edbe..eef4e5a9 100644 --- a/ppd/ml2250.ppd +++ b/ppd/ml2250.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-2250 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml2250.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2250" *ShortNickName: "Samsung ML-2250" -*NickName: "Samsung ML-2250, 2.0.0" +*NickName: "Samsung ML-2250, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,8 @@ *General DocHeaderValues: "<0><0><0>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*1284DeviceID: "MFG:Samsung;MDL:ML-2250;" +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -47,7 +48,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -74,7 +75,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -99,7 +100,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -123,7 +124,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -287,4 +288,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml2250.ppd, 13925 bytes. +*% End of ml2250.ppd, 13964 bytes. diff --git a/ppd/ml2250fr.ppd b/ppd/ml2250fr.ppd index c3114432..6bb2d389 100644 --- a/ppd/ml2250fr.ppd +++ b/ppd/ml2250fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2250 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml2250.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2250" *ShortNickName: "Samsung ML-2250" -*NickName: "Samsung ML-2250, 2.0.0" +*NickName: "Samsung ML-2250, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2250pt.ppd b/ppd/ml2250pt.ppd index fac1fbcc..3dd72b0c 100644 --- a/ppd/ml2250pt.ppd +++ b/ppd/ml2250pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2250 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml2250.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2250" *ShortNickName: "Samsung ML-2250" -*NickName: "Samsung ML-2250, 2.0.0" +*NickName: "Samsung ML-2250, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2251.ppd b/ppd/ml2251.ppd index c2263288..ef5be757 100644 --- a/ppd/ml2251.ppd +++ b/ppd/ml2251.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-2251 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml2251.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2251" *ShortNickName: "Samsung ML-2251" -*NickName: "Samsung ML-2251, 2.0.0" +*NickName: "Samsung ML-2251, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><0>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -47,7 +47,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -74,7 +74,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -99,7 +99,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -123,7 +123,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -287,4 +287,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml2251.ppd, 13925 bytes. +*% End of ml2251.ppd, 13922 bytes. diff --git a/ppd/ml2251fr.ppd b/ppd/ml2251fr.ppd index 3959e58c..2db95171 100644 --- a/ppd/ml2251fr.ppd +++ b/ppd/ml2251fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2251 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml2251.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2251" *ShortNickName: "Samsung ML-2251" -*NickName: "Samsung ML-2251, 2.0.0" +*NickName: "Samsung ML-2251, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2251pt.ppd b/ppd/ml2251pt.ppd index 78afe43c..36551923 100644 --- a/ppd/ml2251pt.ppd +++ b/ppd/ml2251pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2251 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml2251.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2251" *ShortNickName: "Samsung ML-2251" -*NickName: "Samsung ML-2251, 2.0.0" +*NickName: "Samsung ML-2251, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2510.ppd b/ppd/ml2510.ppd index 18b52527..bf118b8f 100644 --- a/ppd/ml2510.ppd +++ b/ppd/ml2510.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-2510 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml2510.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2510" *ShortNickName: "Samsung ML-2510" -*NickName: "Samsung ML-2510, 2.0.0" +*NickName: "Samsung ML-2510, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,8 @@ *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*1284DeviceID: "MFG:Samsung;MDL:ML-2510 Series;CMD:GDI;" +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +42,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +69,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +94,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +118,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -256,4 +257,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml2510.ppd, 12553 bytes. +*% End of ml2510.ppd, 12607 bytes. diff --git a/ppd/ml2510fr.ppd b/ppd/ml2510fr.ppd index 2f08ff08..c2b73fe5 100644 --- a/ppd/ml2510fr.ppd +++ b/ppd/ml2510fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2510 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml2510.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2510" *ShortNickName: "Samsung ML-2510" -*NickName: "Samsung ML-2510, 2.0.0" +*NickName: "Samsung ML-2510, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2510pt.ppd b/ppd/ml2510pt.ppd index 45b371e2..52e30e5a 100644 --- a/ppd/ml2510pt.ppd +++ b/ppd/ml2510pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2510 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml2510.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2510" *ShortNickName: "Samsung ML-2510" -*NickName: "Samsung ML-2510, 2.0.0" +*NickName: "Samsung ML-2510, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2525.ppd b/ppd/ml2525.ppd index f4f48945..7180a432 100644 --- a/ppd/ml2525.ppd +++ b/ppd/ml2525.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-2525 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml2525.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2525" *ShortNickName: "Samsung ML-2525" -*NickName: "Samsung ML-2525, 2.0.0" +*NickName: "Samsung ML-2525, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,8 @@ *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*1284DeviceID: "MFG:Samsung;MDL:ML-2525 Series;CMD:GDI,FWV,EXT;" +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +42,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +69,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +94,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +118,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +250,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml2525.ppd, 12343 bytes. +*% End of ml2525.ppd, 12405 bytes. diff --git a/ppd/ml2525fr.ppd b/ppd/ml2525fr.ppd index 26748851..d873ab64 100644 --- a/ppd/ml2525fr.ppd +++ b/ppd/ml2525fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2525 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml2525.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2525" *ShortNickName: "Samsung ML-2525" -*NickName: "Samsung ML-2525, 2.0.0" +*NickName: "Samsung ML-2525, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2525pt.ppd b/ppd/ml2525pt.ppd index 994f37af..1d4b9e7c 100644 --- a/ppd/ml2525pt.ppd +++ b/ppd/ml2525pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2525 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml2525.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2525" *ShortNickName: "Samsung ML-2525" -*NickName: "Samsung ML-2525, 2.0.0" +*NickName: "Samsung ML-2525, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2525w.ppd b/ppd/ml2525w.ppd index 8b75a13a..139df94d 100644 --- a/ppd/ml2525w.ppd +++ b/ppd/ml2525w.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-2525W with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml2525w.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2525W" *ShortNickName: "Samsung ML-2525W" -*NickName: "Samsung ML-2525W, 2.0.0" +*NickName: "Samsung ML-2525W, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,8 @@ *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*1284DeviceID: "MFG:Samsung;MDL:ML-2525W Series;CMD:GDI,FWV,EXT;" +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +42,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +69,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +94,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +118,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +250,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml2525w.ppd, 12350 bytes. +*% End of ml2525w.ppd, 12413 bytes. diff --git a/ppd/ml2525wfr.ppd b/ppd/ml2525wfr.ppd index 62661732..605112f4 100644 --- a/ppd/ml2525wfr.ppd +++ b/ppd/ml2525wfr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2525W with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml2525w.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2525W" *ShortNickName: "Samsung ML-2525W" -*NickName: "Samsung ML-2525W, 2.0.0" +*NickName: "Samsung ML-2525W, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2525wpt.ppd b/ppd/ml2525wpt.ppd index 776bfc10..a4d57f6a 100644 --- a/ppd/ml2525wpt.ppd +++ b/ppd/ml2525wpt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2525W with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml2525w.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2525W" *ShortNickName: "Samsung ML-2525W" -*NickName: "Samsung ML-2525W, 2.0.0" +*NickName: "Samsung ML-2525W, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2550.ppd b/ppd/ml2550.ppd index e8ec0119..71f23d4b 100644 --- a/ppd/ml2550.ppd +++ b/ppd/ml2550.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-2550 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml2550.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2550" *ShortNickName: "Samsung ML-2550" -*NickName: "Samsung ML-2550, 2.0.0" +*NickName: "Samsung ML-2550, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -26,7 +26,7 @@ *QPDL QPDLVersion: "1" *General DocHeaderValues: "<0><0><0>" *cupsBackSide: "Normal" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -46,7 +46,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -73,7 +73,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -98,7 +98,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -122,7 +122,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -287,4 +287,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml2550.ppd, 14048 bytes. +*% End of ml2550.ppd, 14045 bytes. diff --git a/ppd/ml2550fr.ppd b/ppd/ml2550fr.ppd index 09ef55fe..42761246 100644 --- a/ppd/ml2550fr.ppd +++ b/ppd/ml2550fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2550 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml2550.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2550" *ShortNickName: "Samsung ML-2550" -*NickName: "Samsung ML-2550, 2.0.0" +*NickName: "Samsung ML-2550, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2550pt.ppd b/ppd/ml2550pt.ppd index 6edec826..965d4ef4 100644 --- a/ppd/ml2550pt.ppd +++ b/ppd/ml2550pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2550 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml2550.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2550" *ShortNickName: "Samsung ML-2550" -*NickName: "Samsung ML-2550, 2.0.0" +*NickName: "Samsung ML-2550, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2571.ppd b/ppd/ml2571.ppd index e01e0473..d49cc725 100644 --- a/ppd/ml2571.ppd +++ b/ppd/ml2571.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-2571 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml2571.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2571" *ShortNickName: "Samsung ML-2571" -*NickName: "Samsung ML-2571, 2.0.0" +*NickName: "Samsung ML-2571, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -27,7 +27,7 @@ *General DocHeaderValues: "<0><0><0>" *cupsBackSide: "Normal" *QPDL ManualDuplex: "On" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -41,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -68,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -93,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -117,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -249,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml2571.ppd, 12332 bytes. +*% End of ml2571.ppd, 12329 bytes. diff --git a/ppd/ml2571fr.ppd b/ppd/ml2571fr.ppd index a4c571d4..55e93a52 100644 --- a/ppd/ml2571fr.ppd +++ b/ppd/ml2571fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2571 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml2571.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2571" *ShortNickName: "Samsung ML-2571" -*NickName: "Samsung ML-2571, 2.0.0" +*NickName: "Samsung ML-2571, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2571pt.ppd b/ppd/ml2571pt.ppd index 84c2aa01..5294a871 100644 --- a/ppd/ml2571pt.ppd +++ b/ppd/ml2571pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2571 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml2571.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2571" *ShortNickName: "Samsung ML-2571" -*NickName: "Samsung ML-2571, 2.0.0" +*NickName: "Samsung ML-2571, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2580.ppd b/ppd/ml2580.ppd index aeb12e1b..9355ca25 100644 --- a/ppd/ml2580.ppd +++ b/ppd/ml2580.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-2580 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml2580.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2580" *ShortNickName: "Samsung ML-2580" -*NickName: "Samsung ML-2580, 2.0.0" +*NickName: "Samsung ML-2580, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -25,7 +25,7 @@ *PJL EndPJL: "<09><1B>%-12345X" *QPDL QPDLVersion: "3" *General DocHeaderValues: "<0><0><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +39,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +66,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +91,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +115,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -240,4 +240,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml2580.ppd, 11928 bytes. +*% End of ml2580.ppd, 11925 bytes. diff --git a/ppd/ml2580fr.ppd b/ppd/ml2580fr.ppd index f6031552..7fd19fdc 100644 --- a/ppd/ml2580fr.ppd +++ b/ppd/ml2580fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2580 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml2580.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2580" *ShortNickName: "Samsung ML-2580" -*NickName: "Samsung ML-2580, 2.0.0" +*NickName: "Samsung ML-2580, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2580n.ppd b/ppd/ml2580n.ppd index 03fbfefb..54f2ea45 100644 --- a/ppd/ml2580n.ppd +++ b/ppd/ml2580n.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-2580N with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml2580n.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2580N" *ShortNickName: "Samsung ML-2580N" -*NickName: "Samsung ML-2580N, 2.0.0" +*NickName: "Samsung ML-2580N, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -25,7 +25,7 @@ *PJL EndPJL: "<09><1B>%-12345X" *QPDL QPDLVersion: "3" *General DocHeaderValues: "<0><0><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +39,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +66,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +91,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +115,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -240,4 +240,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml2580n.ppd, 11935 bytes. +*% End of ml2580n.ppd, 11932 bytes. diff --git a/ppd/ml2580nfr.ppd b/ppd/ml2580nfr.ppd index 54c684fa..284fafa8 100644 --- a/ppd/ml2580nfr.ppd +++ b/ppd/ml2580nfr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2580N with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml2580n.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2580N" *ShortNickName: "Samsung ML-2580N" -*NickName: "Samsung ML-2580N, 2.0.0" +*NickName: "Samsung ML-2580N, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2580npt.ppd b/ppd/ml2580npt.ppd index 2a6389aa..1355c4eb 100644 --- a/ppd/ml2580npt.ppd +++ b/ppd/ml2580npt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2580N with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml2580n.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2580N" *ShortNickName: "Samsung ML-2580N" -*NickName: "Samsung ML-2580N, 2.0.0" +*NickName: "Samsung ML-2580N, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml2580pt.ppd b/ppd/ml2580pt.ppd index a4505e29..745281a3 100644 --- a/ppd/ml2580pt.ppd +++ b/ppd/ml2580pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-2580 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml2580.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-2580" *ShortNickName: "Samsung ML-2580" -*NickName: "Samsung ML-2580, 2.0.0" +*NickName: "Samsung ML-2580, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml3050.ppd b/ppd/ml3050.ppd index 56eab4e8..dd088a1b 100644 --- a/ppd/ml3050.ppd +++ b/ppd/ml3050.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-3050 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml3050.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3050" *ShortNickName: "Samsung ML-3050" -*NickName: "Samsung ML-3050, 2.0.0" +*NickName: "Samsung ML-3050, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -25,7 +25,7 @@ *PJL EndPJL: "<09><1B>%-12345X" *QPDL QPDLVersion: "3" *General DocHeaderValues: "<0><0><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +39,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +66,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +91,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +115,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -240,4 +240,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml3050.ppd, 11928 bytes. +*% End of ml3050.ppd, 11925 bytes. diff --git a/ppd/ml3050fr.ppd b/ppd/ml3050fr.ppd index 25fed9b0..e7ec211d 100644 --- a/ppd/ml3050fr.ppd +++ b/ppd/ml3050fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-3050 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml3050.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3050" *ShortNickName: "Samsung ML-3050" -*NickName: "Samsung ML-3050, 2.0.0" +*NickName: "Samsung ML-3050, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml3050pt.ppd b/ppd/ml3050pt.ppd index 1e589c93..d5670ccc 100644 --- a/ppd/ml3050pt.ppd +++ b/ppd/ml3050pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-3050 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml3050.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3050" *ShortNickName: "Samsung ML-3050" -*NickName: "Samsung ML-3050, 2.0.0" +*NickName: "Samsung ML-3050, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml3051.ppd b/ppd/ml3051.ppd index fcd3cb44..d0afaa57 100644 --- a/ppd/ml3051.ppd +++ b/ppd/ml3051.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-3051 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml3051.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3051" *ShortNickName: "Samsung ML-3051" -*NickName: "Samsung ML-3051, 2.0.0" +*NickName: "Samsung ML-3051, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -25,7 +25,7 @@ *PJL EndPJL: "<09><1B>%-12345X" *QPDL QPDLVersion: "3" *General DocHeaderValues: "<0><0><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +39,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +66,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +91,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +115,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -240,4 +240,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml3051.ppd, 11928 bytes. +*% End of ml3051.ppd, 11925 bytes. diff --git a/ppd/ml3051fr.ppd b/ppd/ml3051fr.ppd index 1cb4f777..5cf4c473 100644 --- a/ppd/ml3051fr.ppd +++ b/ppd/ml3051fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-3051 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml3051.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3051" *ShortNickName: "Samsung ML-3051" -*NickName: "Samsung ML-3051, 2.0.0" +*NickName: "Samsung ML-3051, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml3051nd.ppd b/ppd/ml3051nd.ppd index e9076f9c..d0660e7f 100644 --- a/ppd/ml3051nd.ppd +++ b/ppd/ml3051nd.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-3051ND with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml3051nd.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3051ND" *ShortNickName: "Samsung ML-3051ND" -*NickName: "Samsung ML-3051ND, 2.0.0" +*NickName: "Samsung ML-3051ND, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -26,7 +26,7 @@ *QPDL QPDLVersion: "3" *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -40,7 +40,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -67,7 +67,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -92,7 +92,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -116,7 +116,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -248,4 +248,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml3051nd.ppd, 12325 bytes. +*% End of ml3051nd.ppd, 12322 bytes. diff --git a/ppd/ml3051ndfr.ppd b/ppd/ml3051ndfr.ppd index a1e12541..5d5b3b6d 100644 --- a/ppd/ml3051ndfr.ppd +++ b/ppd/ml3051ndfr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-3051ND with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml3051nd.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3051ND" *ShortNickName: "Samsung ML-3051ND" -*NickName: "Samsung ML-3051ND, 2.0.0" +*NickName: "Samsung ML-3051ND, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml3051ndpt.ppd b/ppd/ml3051ndpt.ppd index 9e0521ac..42a40cdb 100644 --- a/ppd/ml3051ndpt.ppd +++ b/ppd/ml3051ndpt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-3051ND with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml3051nd.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3051ND" *ShortNickName: "Samsung ML-3051ND" -*NickName: "Samsung ML-3051ND, 2.0.0" +*NickName: "Samsung ML-3051ND, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml3051pt.ppd b/ppd/ml3051pt.ppd index 2c319347..5598b5e4 100644 --- a/ppd/ml3051pt.ppd +++ b/ppd/ml3051pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-3051 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml3051.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3051" *ShortNickName: "Samsung ML-3051" -*NickName: "Samsung ML-3051, 2.0.0" +*NickName: "Samsung ML-3051, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml3310.ppd b/ppd/ml3310.ppd new file mode 100644 index 00000000..9ed69aed --- /dev/null +++ b/ppd/ml3310.ppd @@ -0,0 +1,243 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for ML-3310 with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "ml3310.ppd" +*Product: "(ML-3310)" +*Manufacturer: "Samsung" +*ModelName: "Samsung ML-3310" +*ShortNickName: "Samsung ML-3310" +*NickName: "Samsung ML-3310, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "1" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "3" +*General DocHeaderValues: "<0><0><1>" +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "10.75 15 601.25 777" +*ImageableArea Legal/US Legal: "10.75 15 601.25 993" +*ImageableArea A4/A4: "10.75 15 584.25 827" +*ImageableArea Executive/Executive: "10.75 15 511.25 741" +*ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" +*ImageableArea A3/A3: "10.75 15 831.25 1176" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" +*ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" +*ImageableArea C5/Envelope C5: "10.75 15 448.25 634" +*ImageableArea DL/Envelope DL: "10.75 15 301.25 609" +*ImageableArea B4/JIS B4: "10.75 15 718.25 1017" +*ImageableArea B5/JIS B5: "10.75 15 505.25 714" +*ImageableArea EnvISOB5/Envelope B5: "10.75 15 488.25 694" +*ImageableArea Postcard/Postcard: "10.75 15 273.25 404" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "10.75 15 409.25 552" +*ImageableArea A5/A5: "10.75 15 409.25 580" +*ImageableArea A6/A6: "10.75 15 286.25 405" +*ImageableArea B6/JIS B6: "10.75 15 352.25 501" +*ImageableArea C6/Envelope C6: "10.75 15 312.25 444" +*ImageableArea Folio/Folio: "10.75 15 584.25 920" +*ImageableArea EnvPersonal/Envelope Personal: "10.75 15 250.25 453" +*ImageableArea Env9/Envelope #9: "10.75 15 268.25 624" +*ImageableArea Oficio/Oficio - 216x340mm: "10.75 15 601.25 957" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of ml3310.ppd, 11925 bytes. diff --git a/ppd/ml3310nd.ppd b/ppd/ml3310nd.ppd new file mode 100644 index 00000000..1176dffe --- /dev/null +++ b/ppd/ml3310nd.ppd @@ -0,0 +1,251 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for ML-3310ND with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "ml3310nd.ppd" +*Product: "(ML-3310ND)" +*Manufacturer: "Samsung" +*ModelName: "Samsung ML-3310ND" +*ShortNickName: "Samsung ML-3310ND" +*NickName: "Samsung ML-3310ND, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "1" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "3" +*General DocHeaderValues: "<0><0><1>" +*cupsBackSide: "Normal" +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "10.75 15 601.25 777" +*ImageableArea Legal/US Legal: "10.75 15 601.25 993" +*ImageableArea A4/A4: "10.75 15 584.25 827" +*ImageableArea Executive/Executive: "10.75 15 511.25 741" +*ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" +*ImageableArea A3/A3: "10.75 15 831.25 1176" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" +*ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" +*ImageableArea C5/Envelope C5: "10.75 15 448.25 634" +*ImageableArea DL/Envelope DL: "10.75 15 301.25 609" +*ImageableArea B4/JIS B4: "10.75 15 718.25 1017" +*ImageableArea B5/JIS B5: "10.75 15 505.25 714" +*ImageableArea EnvISOB5/Envelope B5: "10.75 15 488.25 694" +*ImageableArea Postcard/Postcard: "10.75 15 273.25 404" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "10.75 15 409.25 552" +*ImageableArea A5/A5: "10.75 15 409.25 580" +*ImageableArea A6/A6: "10.75 15 286.25 405" +*ImageableArea B6/JIS B6: "10.75 15 352.25 501" +*ImageableArea C6/Envelope C6: "10.75 15 312.25 444" +*ImageableArea Folio/Folio: "10.75 15 584.25 920" +*ImageableArea EnvPersonal/Envelope Personal: "10.75 15 250.25 453" +*ImageableArea Env9/Envelope #9: "10.75 15 268.25 624" +*ImageableArea Oficio/Oficio - 216x340mm: "10.75 15 601.25 957" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of ml3310nd.ppd, 12322 bytes. diff --git a/ppd/ml3471nd.ppd b/ppd/ml3471nd.ppd index c6494d91..c339b237 100644 --- a/ppd/ml3471nd.ppd +++ b/ppd/ml3471nd.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-3471ND with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml3471nd.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3471ND" *ShortNickName: "Samsung ML-3471ND" -*NickName: "Samsung ML-3471ND, 2.0.0" +*NickName: "Samsung ML-3471ND, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -26,7 +26,7 @@ *QPDL QPDLVersion: "1" *General DocHeaderValues: "<0><0><0>" *cupsBackSide: "Normal" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -46,7 +46,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -73,7 +73,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -98,7 +98,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -122,7 +122,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -286,4 +286,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml3471nd.ppd, 13913 bytes. +*% End of ml3471nd.ppd, 13910 bytes. diff --git a/ppd/ml3471ndfr.ppd b/ppd/ml3471ndfr.ppd index e7fb849f..fa9aa069 100644 --- a/ppd/ml3471ndfr.ppd +++ b/ppd/ml3471ndfr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-3471ND with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml3471nd.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3471ND" *ShortNickName: "Samsung ML-3471ND" -*NickName: "Samsung ML-3471ND, 2.0.0" +*NickName: "Samsung ML-3471ND, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml3471ndpt.ppd b/ppd/ml3471ndpt.ppd index bd6928a7..0eededaa 100644 --- a/ppd/ml3471ndpt.ppd +++ b/ppd/ml3471ndpt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-3471ND with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml3471nd.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3471ND" *ShortNickName: "Samsung ML-3471ND" -*NickName: "Samsung ML-3471ND, 2.0.0" +*NickName: "Samsung ML-3471ND, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml3560.ppd b/ppd/ml3560.ppd index 6f780422..8121cbc2 100644 --- a/ppd/ml3560.ppd +++ b/ppd/ml3560.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for ML-3560 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ml3560.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3560" *ShortNickName: "Samsung ML-3560" -*NickName: "Samsung ML-3560, 2.0.0" +*NickName: "Samsung ML-3560, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -26,7 +26,7 @@ *QPDL QPDLVersion: "1" *General DocHeaderValues: "<0><0><0>" *cupsBackSide: "Normal" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -46,7 +46,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -73,7 +73,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -98,7 +98,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -122,7 +122,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -286,4 +286,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of ml3560.ppd, 13899 bytes. +*% End of ml3560.ppd, 13896 bytes. diff --git a/ppd/ml3560fr.ppd b/ppd/ml3560fr.ppd index 408a09c6..3102081b 100644 --- a/ppd/ml3560fr.ppd +++ b/ppd/ml3560fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-3560 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ml3560.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3560" *ShortNickName: "Samsung ML-3560" -*NickName: "Samsung ML-3560, 2.0.0" +*NickName: "Samsung ML-3560, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ml3560pt.ppd b/ppd/ml3560pt.ppd index 834e9f42..4b1ac076 100644 --- a/ppd/ml3560pt.ppd +++ b/ppd/ml3560pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for ML-3560 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ml3560.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung ML-3560" *ShortNickName: "Samsung ML-3560" -*NickName: "Samsung ML-3560, 2.0.0" +*NickName: "Samsung ML-3560, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3115.ppd b/ppd/ph3115.ppd index af5b3705..45290869 100644 --- a/ppd/ph3115.ppd +++ b/ppd/ph3115.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3115 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3115.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3115" *ShortNickName: "Xerox Phaser 3115" -*NickName: "Xerox Phaser 3115, 2.0.0" +*NickName: "Xerox Phaser 3115, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3115fr.ppd b/ppd/ph3115fr.ppd index 12494a5a..304c2506 100644 --- a/ppd/ph3115fr.ppd +++ b/ppd/ph3115fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3115 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3115.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3115" *ShortNickName: "Xerox Phaser 3115" -*NickName: "Xerox Phaser 3115, 2.0.0" +*NickName: "Xerox Phaser 3115, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3115pt.ppd b/ppd/ph3115pt.ppd index 22d1d9fc..3b0519c9 100644 --- a/ppd/ph3115pt.ppd +++ b/ppd/ph3115pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3115 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3115.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3115" *ShortNickName: "Xerox Phaser 3115" -*NickName: "Xerox Phaser 3115, 2.0.0" +*NickName: "Xerox Phaser 3115, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3116.ppd b/ppd/ph3116.ppd index aa30dd6a..114d80f0 100644 --- a/ppd/ph3116.ppd +++ b/ppd/ph3116.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3116 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3116.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3116" *ShortNickName: "Xerox Phaser 3116" -*NickName: "Xerox Phaser 3116, 2.0.0" +*NickName: "Xerox Phaser 3116, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3116fr.ppd b/ppd/ph3116fr.ppd index 9d7a1bd8..0f0aa778 100644 --- a/ppd/ph3116fr.ppd +++ b/ppd/ph3116fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3116 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3116.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3116" *ShortNickName: "Xerox Phaser 3116" -*NickName: "Xerox Phaser 3116, 2.0.0" +*NickName: "Xerox Phaser 3116, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3116pt.ppd b/ppd/ph3116pt.ppd index 17805c53..f905245e 100644 --- a/ppd/ph3116pt.ppd +++ b/ppd/ph3116pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3116 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3116.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3116" *ShortNickName: "Xerox Phaser 3116" -*NickName: "Xerox Phaser 3116, 2.0.0" +*NickName: "Xerox Phaser 3116, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3117.ppd b/ppd/ph3117.ppd index a418a589..8ce26574 100644 --- a/ppd/ph3117.ppd +++ b/ppd/ph3117.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3117 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3117.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3117" *ShortNickName: "Xerox Phaser 3117" -*NickName: "Xerox Phaser 3117, 2.0.0" +*NickName: "Xerox Phaser 3117, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3117fr.ppd b/ppd/ph3117fr.ppd index 75b3b66c..c8bd328f 100644 --- a/ppd/ph3117fr.ppd +++ b/ppd/ph3117fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3117 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3117.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3117" *ShortNickName: "Xerox Phaser 3117" -*NickName: "Xerox Phaser 3117, 2.0.0" +*NickName: "Xerox Phaser 3117, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3117pt.ppd b/ppd/ph3117pt.ppd index 55f63094..80c62345 100644 --- a/ppd/ph3117pt.ppd +++ b/ppd/ph3117pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3117 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3117.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3117" *ShortNickName: "Xerox Phaser 3117" -*NickName: "Xerox Phaser 3117, 2.0.0" +*NickName: "Xerox Phaser 3117, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3120.ppd b/ppd/ph3120.ppd index 36a70030..5a9f7797 100644 --- a/ppd/ph3120.ppd +++ b/ppd/ph3120.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3120 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3120.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3120" *ShortNickName: "Xerox Phaser 3120" -*NickName: "Xerox Phaser 3120, 2.0.0" +*NickName: "Xerox Phaser 3120, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3120fr.ppd b/ppd/ph3120fr.ppd index 2c63f82c..65b8feb0 100644 --- a/ppd/ph3120fr.ppd +++ b/ppd/ph3120fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3120 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3120.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3120" *ShortNickName: "Xerox Phaser 3120" -*NickName: "Xerox Phaser 3120, 2.0.0" +*NickName: "Xerox Phaser 3120, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3120pt.ppd b/ppd/ph3120pt.ppd index 391fb07a..103f22fe 100644 --- a/ppd/ph3120pt.ppd +++ b/ppd/ph3120pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3120 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3120.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3120" *ShortNickName: "Xerox Phaser 3120" -*NickName: "Xerox Phaser 3120, 2.0.0" +*NickName: "Xerox Phaser 3120, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3121.ppd b/ppd/ph3121.ppd index b78c82bc..049cf1ed 100644 --- a/ppd/ph3121.ppd +++ b/ppd/ph3121.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3121 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3121.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3121" *ShortNickName: "Xerox Phaser 3121" -*NickName: "Xerox Phaser 3121, 2.0.0" +*NickName: "Xerox Phaser 3121, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3121fr.ppd b/ppd/ph3121fr.ppd index 13cebee7..8665c9b5 100644 --- a/ppd/ph3121fr.ppd +++ b/ppd/ph3121fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3121 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3121.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3121" *ShortNickName: "Xerox Phaser 3121" -*NickName: "Xerox Phaser 3121, 2.0.0" +*NickName: "Xerox Phaser 3121, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3121pt.ppd b/ppd/ph3121pt.ppd index be0ffeb8..97ee66bc 100644 --- a/ppd/ph3121pt.ppd +++ b/ppd/ph3121pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3121 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3121.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3121" *ShortNickName: "Xerox Phaser 3121" -*NickName: "Xerox Phaser 3121, 2.0.0" +*NickName: "Xerox Phaser 3121, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3122.ppd b/ppd/ph3122.ppd index 8c0de589..87268953 100644 --- a/ppd/ph3122.ppd +++ b/ppd/ph3122.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3122 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3122.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3122" *ShortNickName: "Xerox Phaser 3122" -*NickName: "Xerox Phaser 3122, 2.0.0" +*NickName: "Xerox Phaser 3122, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3122fr.ppd b/ppd/ph3122fr.ppd index 01b3c62d..b987a32d 100644 --- a/ppd/ph3122fr.ppd +++ b/ppd/ph3122fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3122 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3122.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3122" *ShortNickName: "Xerox Phaser 3122" -*NickName: "Xerox Phaser 3122, 2.0.0" +*NickName: "Xerox Phaser 3122, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3122pt.ppd b/ppd/ph3122pt.ppd index 29655064..0b683864 100644 --- a/ppd/ph3122pt.ppd +++ b/ppd/ph3122pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3122 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3122.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3122" *ShortNickName: "Xerox Phaser 3122" -*NickName: "Xerox Phaser 3122, 2.0.0" +*NickName: "Xerox Phaser 3122, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3124.ppd b/ppd/ph3124.ppd index 59f8dca2..09dcff3a 100644 --- a/ppd/ph3124.ppd +++ b/ppd/ph3124.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3124 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3124.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3124" *ShortNickName: "Xerox Phaser 3124" -*NickName: "Xerox Phaser 3124, 2.0.0" +*NickName: "Xerox Phaser 3124, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3124fr.ppd b/ppd/ph3124fr.ppd index 3d6e1a84..fcc52d11 100644 --- a/ppd/ph3124fr.ppd +++ b/ppd/ph3124fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3124 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3124.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3124" *ShortNickName: "Xerox Phaser 3124" -*NickName: "Xerox Phaser 3124, 2.0.0" +*NickName: "Xerox Phaser 3124, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3124pt.ppd b/ppd/ph3124pt.ppd index 5f2c8ef2..5a96f5d1 100644 --- a/ppd/ph3124pt.ppd +++ b/ppd/ph3124pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3124 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3124.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3124" *ShortNickName: "Xerox Phaser 3124" -*NickName: "Xerox Phaser 3124, 2.0.0" +*NickName: "Xerox Phaser 3124, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3130.ppd b/ppd/ph3130.ppd index 6ab80f3b..718fca7a 100644 --- a/ppd/ph3130.ppd +++ b/ppd/ph3130.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3130 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3130.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3130" *ShortNickName: "Xerox Phaser 3130" -*NickName: "Xerox Phaser 3130, 2.0.0" +*NickName: "Xerox Phaser 3130, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3130fr.ppd b/ppd/ph3130fr.ppd index 3573cf0f..616246f1 100644 --- a/ppd/ph3130fr.ppd +++ b/ppd/ph3130fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3130 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3130.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3130" *ShortNickName: "Xerox Phaser 3130" -*NickName: "Xerox Phaser 3130, 2.0.0" +*NickName: "Xerox Phaser 3130, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3130pt.ppd b/ppd/ph3130pt.ppd index 2efe2b6d..374e46da 100644 --- a/ppd/ph3130pt.ppd +++ b/ppd/ph3130pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3130 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3130.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3130" *ShortNickName: "Xerox Phaser 3130" -*NickName: "Xerox Phaser 3130, 2.0.0" +*NickName: "Xerox Phaser 3130, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3140.ppd b/ppd/ph3140.ppd index e69f4b14..b8758042 100644 --- a/ppd/ph3140.ppd +++ b/ppd/ph3140.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3140 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3140.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3140" *ShortNickName: "Xerox Phaser 3140" -*NickName: "Xerox Phaser 3140, 2.0.0" +*NickName: "Xerox Phaser 3140, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3140fr.ppd b/ppd/ph3140fr.ppd index efd61604..34bfb7f8 100644 --- a/ppd/ph3140fr.ppd +++ b/ppd/ph3140fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3140 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3140.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3140" *ShortNickName: "Xerox Phaser 3140" -*NickName: "Xerox Phaser 3140, 2.0.0" +*NickName: "Xerox Phaser 3140, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3140pt.ppd b/ppd/ph3140pt.ppd index a7a781d6..d1358cae 100644 --- a/ppd/ph3140pt.ppd +++ b/ppd/ph3140pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3140 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3140.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3140" *ShortNickName: "Xerox Phaser 3140" -*NickName: "Xerox Phaser 3140, 2.0.0" +*NickName: "Xerox Phaser 3140, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3150.ppd b/ppd/ph3150.ppd index 0030afc4..3eaebb77 100644 --- a/ppd/ph3150.ppd +++ b/ppd/ph3150.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3150 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3150.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3150" *ShortNickName: "Xerox Phaser 3150" -*NickName: "Xerox Phaser 3150, 2.0.0" +*NickName: "Xerox Phaser 3150, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3150fr.ppd b/ppd/ph3150fr.ppd index 9f378233..b7f7e154 100644 --- a/ppd/ph3150fr.ppd +++ b/ppd/ph3150fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3150 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3150.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3150" *ShortNickName: "Xerox Phaser 3150" -*NickName: "Xerox Phaser 3150, 2.0.0" +*NickName: "Xerox Phaser 3150, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3150pt.ppd b/ppd/ph3150pt.ppd index f935a597..e1e6195a 100644 --- a/ppd/ph3150pt.ppd +++ b/ppd/ph3150pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3150 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3150.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3150" *ShortNickName: "Xerox Phaser 3150" -*NickName: "Xerox Phaser 3150, 2.0.0" +*NickName: "Xerox Phaser 3150, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3155.ppd b/ppd/ph3155.ppd index eb1fa438..6579f36b 100644 --- a/ppd/ph3155.ppd +++ b/ppd/ph3155.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3155 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3155.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3155" *ShortNickName: "Xerox Phaser 3155" -*NickName: "Xerox Phaser 3155, 2.0.0" +*NickName: "Xerox Phaser 3155, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3155fr.ppd b/ppd/ph3155fr.ppd index 9cedeb53..c63725be 100644 --- a/ppd/ph3155fr.ppd +++ b/ppd/ph3155fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3155 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3155.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3155" *ShortNickName: "Xerox Phaser 3155" -*NickName: "Xerox Phaser 3155, 2.0.0" +*NickName: "Xerox Phaser 3155, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3155pt.ppd b/ppd/ph3155pt.ppd index 09410f7c..5f95f7b5 100644 --- a/ppd/ph3155pt.ppd +++ b/ppd/ph3155pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3155 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3155.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3155" *ShortNickName: "Xerox Phaser 3155" -*NickName: "Xerox Phaser 3155, 2.0.0" +*NickName: "Xerox Phaser 3155, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3160.ppd b/ppd/ph3160.ppd index 5489879f..69772c14 100644 --- a/ppd/ph3160.ppd +++ b/ppd/ph3160.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3160 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3160.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3160" *ShortNickName: "Xerox Phaser 3160" -*NickName: "Xerox Phaser 3160, 2.0.0" +*NickName: "Xerox Phaser 3160, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3160fr.ppd b/ppd/ph3160fr.ppd index 2e3ed52b..675d7a17 100644 --- a/ppd/ph3160fr.ppd +++ b/ppd/ph3160fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3160 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3160.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3160" *ShortNickName: "Xerox Phaser 3160" -*NickName: "Xerox Phaser 3160, 2.0.0" +*NickName: "Xerox Phaser 3160, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3160pt.ppd b/ppd/ph3160pt.ppd index 52b6ba9e..b4bfc85c 100644 --- a/ppd/ph3160pt.ppd +++ b/ppd/ph3160pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3160 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3160.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3160" *ShortNickName: "Xerox Phaser 3160" -*NickName: "Xerox Phaser 3160, 2.0.0" +*NickName: "Xerox Phaser 3160, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3420.ppd b/ppd/ph3420.ppd index 0dd1fa15..9dc1b095 100644 --- a/ppd/ph3420.ppd +++ b/ppd/ph3420.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3420 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3420.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3420" *ShortNickName: "Xerox Phaser 3420" -*NickName: "Xerox Phaser 3420, 2.0.0" +*NickName: "Xerox Phaser 3420, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3420fr.ppd b/ppd/ph3420fr.ppd index c7adc317..440cf771 100644 --- a/ppd/ph3420fr.ppd +++ b/ppd/ph3420fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3420 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3420.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3420" *ShortNickName: "Xerox Phaser 3420" -*NickName: "Xerox Phaser 3420, 2.0.0" +*NickName: "Xerox Phaser 3420, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3420pt.ppd b/ppd/ph3420pt.ppd index 31c6885e..430db6f4 100644 --- a/ppd/ph3420pt.ppd +++ b/ppd/ph3420pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3420 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3420.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3420" *ShortNickName: "Xerox Phaser 3420" -*NickName: "Xerox Phaser 3420, 2.0.0" +*NickName: "Xerox Phaser 3420, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3425.ppd b/ppd/ph3425.ppd index 1c79ac53..8081453e 100644 --- a/ppd/ph3425.ppd +++ b/ppd/ph3425.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3425 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph3425.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3425" *ShortNickName: "Xerox Phaser 3425" -*NickName: "Xerox Phaser 3425, 2.0.0" +*NickName: "Xerox Phaser 3425, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3425fr.ppd b/ppd/ph3425fr.ppd index 8dd57019..79f3fef8 100644 --- a/ppd/ph3425fr.ppd +++ b/ppd/ph3425fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3425 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph3425.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3425" *ShortNickName: "Xerox Phaser 3425" -*NickName: "Xerox Phaser 3425, 2.0.0" +*NickName: "Xerox Phaser 3425, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph3425pt.ppd b/ppd/ph3425pt.ppd index 21a6794e..cc969de8 100644 --- a/ppd/ph3425pt.ppd +++ b/ppd/ph3425pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 3425 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph3425.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 3425" *ShortNickName: "Xerox Phaser 3425" -*NickName: "Xerox Phaser 3425, 2.0.0" +*NickName: "Xerox Phaser 3425, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph5500.ppd b/ppd/ph5500.ppd index 420f5906..ac865e07 100644 --- a/ppd/ph5500.ppd +++ b/ppd/ph5500.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 5500 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph5500.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 5500" *ShortNickName: "Xerox Phaser 5500" -*NickName: "Xerox Phaser 5500, 2.0.0" +*NickName: "Xerox Phaser 5500, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph5500fr.ppd b/ppd/ph5500fr.ppd index ea047519..75f33c26 100644 --- a/ppd/ph5500fr.ppd +++ b/ppd/ph5500fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 5500 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph5500.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 5500" *ShortNickName: "Xerox Phaser 5500" -*NickName: "Xerox Phaser 5500, 2.0.0" +*NickName: "Xerox Phaser 5500, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph5500pt.ppd b/ppd/ph5500pt.ppd index 7aaa30bf..be646f7f 100644 --- a/ppd/ph5500pt.ppd +++ b/ppd/ph5500pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 5500 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph5500.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 5500" *ShortNickName: "Xerox Phaser 5500" -*NickName: "Xerox Phaser 5500, 2.0.0" +*NickName: "Xerox Phaser 5500, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/ph6100.ppd b/ppd/ph6100.ppd index d341b146..d6366e28 100644 --- a/ppd/ph6100.ppd +++ b/ppd/ph6100.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 6100 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph6100.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 6100" *ShortNickName: "Xerox Phaser 6100" -*NickName: "Xerox Phaser 6100, 2.0.0" +*NickName: "Xerox Phaser 6100, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/ph6100fr.ppd b/ppd/ph6100fr.ppd index e8fa75da..0eabf08a 100644 --- a/ppd/ph6100fr.ppd +++ b/ppd/ph6100fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 6100 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph6100.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 6100" *ShortNickName: "Xerox Phaser 6100" -*NickName: "Xerox Phaser 6100, 2.0.0" +*NickName: "Xerox Phaser 6100, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/ph6100pt.ppd b/ppd/ph6100pt.ppd index a807b423..d2ce43ae 100644 --- a/ppd/ph6100pt.ppd +++ b/ppd/ph6100pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 6100 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph6100.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 6100" *ShortNickName: "Xerox Phaser 6100" -*NickName: "Xerox Phaser 6100, 2.0.0" +*NickName: "Xerox Phaser 6100, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/ph6110.ppd b/ppd/ph6110.ppd index febde21a..ad8b70cb 100644 --- a/ppd/ph6110.ppd +++ b/ppd/ph6110.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 6110 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "ph6110.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 6110" *ShortNickName: "Xerox Phaser 6110" -*NickName: "Xerox Phaser 6110, 2.0.0" +*NickName: "Xerox Phaser 6110, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/ph6110fr.ppd b/ppd/ph6110fr.ppd index 483fb000..a07a3d21 100644 --- a/ppd/ph6110fr.ppd +++ b/ppd/ph6110fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 6110 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "ph6110.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 6110" *ShortNickName: "Xerox Phaser 6110" -*NickName: "Xerox Phaser 6110, 2.0.0" +*NickName: "Xerox Phaser 6110, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/ph6110pt.ppd b/ppd/ph6110pt.ppd index 11bf5744..98f719ed 100644 --- a/ppd/ph6110pt.ppd +++ b/ppd/ph6110pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for Phaser 6110 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "ph6110.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox Phaser 6110" *ShortNickName: "Xerox Phaser 6110" -*NickName: "Xerox Phaser 6110, 2.0.0" +*NickName: "Xerox Phaser 6110, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: True diff --git a/ppd/scx3200.ppd b/ppd/scx3200.ppd index 09fe754d..83e11ae0 100644 --- a/ppd/scx3200.ppd +++ b/ppd/scx3200.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for SCX-3200 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "scx3200.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-3200" *ShortNickName: "Samsung SCX-3200" -*NickName: "Samsung SCX-3200, 2.0.0" +*NickName: "Samsung SCX-3200, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -25,7 +25,7 @@ *PJL EndPJL: "<09><1B>%-12345X" *QPDL QPDLVersion: "3" *General DocHeaderValues: "<0><0><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +39,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +66,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +91,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +115,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -240,4 +240,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of scx3200.ppd, 11935 bytes. +*% End of scx3200.ppd, 11932 bytes. diff --git a/ppd/scx3200fr.ppd b/ppd/scx3200fr.ppd index 553b9e41..0f460a50 100644 --- a/ppd/scx3200fr.ppd +++ b/ppd/scx3200fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-3200 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "scx3200.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-3200" *ShortNickName: "Samsung SCX-3200" -*NickName: "Samsung SCX-3200, 2.0.0" +*NickName: "Samsung SCX-3200, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx3200pt.ppd b/ppd/scx3200pt.ppd index 5757c876..f4876c9d 100644 --- a/ppd/scx3200pt.ppd +++ b/ppd/scx3200pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-3200 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "scx3200.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-3200" *ShortNickName: "Samsung SCX-3200" -*NickName: "Samsung SCX-3200, 2.0.0" +*NickName: "Samsung SCX-3200, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx3400.ppd b/ppd/scx3400.ppd new file mode 100644 index 00000000..e75612ca --- /dev/null +++ b/ppd/scx3400.ppd @@ -0,0 +1,243 @@ +*PPD-Adobe: "4.3" +*%%%% PPD file for SCX-3400 with CUPS. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. +*FormatVersion: "4.3" +*FileVersion: "2.0.2" +*LanguageVersion: English +*LanguageEncoding: ISOLatin1 +*PCFileName: "scx3400.ppd" +*Product: "(SCX-3400)" +*Manufacturer: "Samsung" +*ModelName: "Samsung SCX-3400" +*ShortNickName: "Samsung SCX-3400" +*NickName: "Samsung SCX-3400, 2.0.2" +*PSVersion: "(3010.000) 0" +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*FileSystem: False +*Throughput: "1" +*LandscapeOrientation: Plus90 +*TTRasterizer: Type42 +*% Driver-defined attributes... +*QPDL BandSize: "128" +*PJL BeginPJL: "<1B>%-12345X" +*PJL EndPJL: "<09><1B>%-12345X" +*QPDL QPDLVersion: "3" +*General DocHeaderValues: "<0><0><1>" +*cupsVersion: 2.4 +*cupsModelNumber: 0 +*cupsManualCopies: False +*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" +*cupsLanguages: "en" +*OpenUI *PageSize/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageSize +*DefaultPageSize: Letter +*PageSize Letter/US Letter: "<>setpagedevice" +*PageSize Legal/US Legal: "<>setpagedevice" +*PageSize A4/A4: "<>setpagedevice" +*PageSize Executive/Executive: "<>setpagedevice" +*PageSize Ledger/US Ledger: "<>setpagedevice" +*PageSize A3/A3: "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" +*PageSize Monarch/Envelope Monarch: "<>setpagedevice" +*PageSize C5/Envelope C5: "<>setpagedevice" +*PageSize DL/Envelope DL: "<>setpagedevice" +*PageSize B4/JIS B4: "<>setpagedevice" +*PageSize B5/JIS B5: "<>setpagedevice" +*PageSize EnvISOB5/Envelope B5: "<>setpagedevice" +*PageSize Postcard/Postcard: "<>setpagedevice" +*PageSize DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageSize A5/A5: "<>setpagedevice" +*PageSize A6/A6: "<>setpagedevice" +*PageSize B6/JIS B6: "<>setpagedevice" +*PageSize C6/Envelope C6: "<>setpagedevice" +*PageSize Folio/Folio: "<>setpagedevice" +*PageSize EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageSize Env9/Envelope #9: "<>setpagedevice" +*PageSize Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageSize +*OpenUI *PageRegion/Media Size: PickOne +*OrderDependency: 10 AnySetup *PageRegion +*DefaultPageRegion: Letter +*PageRegion Letter/US Letter: "<>setpagedevice" +*PageRegion Legal/US Legal: "<>setpagedevice" +*PageRegion A4/A4: "<>setpagedevice" +*PageRegion Executive/Executive: "<>setpagedevice" +*PageRegion Ledger/US Ledger: "<>setpagedevice" +*PageRegion A3/A3: "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" +*PageRegion Monarch/Envelope Monarch: "<>setpagedevice" +*PageRegion C5/Envelope C5: "<>setpagedevice" +*PageRegion DL/Envelope DL: "<>setpagedevice" +*PageRegion B4/JIS B4: "<>setpagedevice" +*PageRegion B5/JIS B5: "<>setpagedevice" +*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice" +*PageRegion Postcard/Postcard: "<>setpagedevice" +*PageRegion DoublePostcardRotated/Postcard Double Long Edge: "<>setpagedevice" +*PageRegion A5/A5: "<>setpagedevice" +*PageRegion A6/A6: "<>setpagedevice" +*PageRegion B6/JIS B6: "<>setpagedevice" +*PageRegion C6/Envelope C6: "<>setpagedevice" +*PageRegion Folio/Folio: "<>setpagedevice" +*PageRegion EnvPersonal/Envelope Personal: "<>setpagedevice" +*PageRegion Env9/Envelope #9: "<>setpagedevice" +*PageRegion Oficio/Oficio - 216x340mm: "<>setpagedevice" +*CloseUI: *PageRegion +*DefaultImageableArea: Letter +*ImageableArea Letter/US Letter: "10.75 15 601.25 777" +*ImageableArea Legal/US Legal: "10.75 15 601.25 993" +*ImageableArea A4/A4: "10.75 15 584.25 827" +*ImageableArea Executive/Executive: "10.75 15 511.25 741" +*ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" +*ImageableArea A3/A3: "10.75 15 831.25 1176" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" +*ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" +*ImageableArea C5/Envelope C5: "10.75 15 448.25 634" +*ImageableArea DL/Envelope DL: "10.75 15 301.25 609" +*ImageableArea B4/JIS B4: "10.75 15 718.25 1017" +*ImageableArea B5/JIS B5: "10.75 15 505.25 714" +*ImageableArea EnvISOB5/Envelope B5: "10.75 15 488.25 694" +*ImageableArea Postcard/Postcard: "10.75 15 273.25 404" +*ImageableArea DoublePostcardRotated/Postcard Double Long Edge: "10.75 15 409.25 552" +*ImageableArea A5/A5: "10.75 15 409.25 580" +*ImageableArea A6/A6: "10.75 15 286.25 405" +*ImageableArea B6/JIS B6: "10.75 15 352.25 501" +*ImageableArea C6/Envelope C6: "10.75 15 312.25 444" +*ImageableArea Folio/Folio: "10.75 15 584.25 920" +*ImageableArea EnvPersonal/Envelope Personal: "10.75 15 250.25 453" +*ImageableArea Env9/Envelope #9: "10.75 15 268.25 624" +*ImageableArea Oficio/Oficio - 216x340mm: "10.75 15 601.25 957" +*DefaultPaperDimension: Letter +*PaperDimension Letter/US Letter: "612 792" +*PaperDimension Legal/US Legal: "612 1008" +*PaperDimension A4/A4: "595 842" +*PaperDimension Executive/Executive: "522 756" +*PaperDimension Ledger/US Ledger: "1224 792" +*PaperDimension A3/A3: "842 1191" +*PaperDimension Env10/Envelope #10: "297 684" +*PaperDimension Monarch/Envelope Monarch: "279 540" +*PaperDimension C5/Envelope C5: "459 649" +*PaperDimension DL/Envelope DL: "312 624" +*PaperDimension B4/JIS B4: "729 1032" +*PaperDimension B5/JIS B5: "516 729" +*PaperDimension EnvISOB5/Envelope B5: "499 709" +*PaperDimension Postcard/Postcard: "284 419" +*PaperDimension DoublePostcardRotated/Postcard Double Long Edge: "420 567" +*PaperDimension A5/A5: "420 595" +*PaperDimension A6/A6: "297 420" +*PaperDimension B6/JIS B6: "363 516" +*PaperDimension C6/Envelope C6: "323 459" +*PaperDimension Folio/Folio: "595 935" +*PaperDimension EnvPersonal/Envelope Personal: "261 468" +*PaperDimension Env9/Envelope #9: "279 639" +*PaperDimension Oficio/Oficio - 216x340mm: "612 972" +*OpenUI *Altitude/Air pressure: PickOne +*OrderDependency: 10 AnySetup *Altitude +*DefaultAltitude: LOW +*Altitude LOW/High: "" +*Altitude HIGH/Low: "" +*CloseUI: *Altitude +*OpenUI *InputSlot/Media Source: PickOne +*OrderDependency: 10 AnySetup *InputSlot +*DefaultInputSlot: Auto +*InputSlot Auto/Automatic Selection: "<>setpagedevice" +*InputSlot Manual/Manual Feed: "<>setpagedevice" +*CloseUI: *InputSlot +*OpenUI *MediaType/Paper Type: PickOne +*OrderDependency: 10 AnySetup *MediaType +*DefaultMediaType: OFF +*MediaType OFF/Use Printer Default: "" +*MediaType NORMAL/Plain Paper: "" +*MediaType THICK/Thick Paper: "" +*MediaType THIN/Thin Paper: "" +*MediaType BOND/Bond: "" +*MediaType OHP/Transparency: "" +*MediaType CARD/Card Stock: "" +*MediaType LABEL/Label: "" +*MediaType USED/Preprinted: "" +*MediaType COLOR/Colored Paper: "" +*MediaType ENV/Envelope: "" +*MediaType COTTON/Cotton: "" +*MediaType RECYCLED/Recycled: "" +*MediaType ARCHIVE/Archive: "" +*CloseUI: *MediaType +*OpenUI *PowerSave/Power Save: PickOne +*OrderDependency: 10 AnySetup *PowerSave +*DefaultPowerSave: 5 +*PowerSave False/Off: "" +*PowerSave 5/5 Minutes: "" +*PowerSave 10/10 Minutes: "" +*PowerSave 15/15 Minutes: "" +*PowerSave 30/30 Minutes: "" +*PowerSave 45/45 Minutes: "" +*PowerSave 60/1 Hour: "" +*CloseUI: *PowerSave +*OpenUI *TonerDensity/Toner Density: PickOne +*OrderDependency: 10 AnySetup *TonerDensity +*DefaultTonerDensity: 3 +*TonerDensity 1/Light: "" +*TonerDensity 3/Medium: "" +*TonerDensity 5/Dark: "" +*CloseUI: *TonerDensity +*OpenUI *EconoMode/Toner Save: PickOne +*OrderDependency: 10 AnySetup *EconoMode +*DefaultEconoMode: 0 +*EconoMode 0/Use Printer Default: "" +*EconoMode ON/Save: "" +*EconoMode OFF/Standard: "" +*CloseUI: *EconoMode +*OpenUI *JamRecovery/Reprint When Jam: Boolean +*OrderDependency: 10 AnySetup *JamRecovery +*DefaultJamRecovery: False +*JamRecovery False/Off: "" +*JamRecovery True/On: "" +*CloseUI: *JamRecovery +*OpenUI *ColorModel/Color Mode: PickOne +*OrderDependency: 10 AnySetup *ColorModel +*DefaultColorModel: Gray +*ColorModel Gray/Grayscale: "<>setpagedevice" +*CloseUI: *ColorModel +*OpenUI *Resolution/Resolution: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 600dpi/600 DPI: "<>setpagedevice" +*Resolution 1200dpi/1200 DPI: "<>setpagedevice" +*CloseUI: *Resolution +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(1.05)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM +*Font AvantGarde-Demi: Standard "(1.05)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(1.05)" Standard ROM +*Font Bookman-Demi: Standard "(1.05)" Standard ROM +*Font Bookman-DemiItalic: Standard "(1.05)" Standard ROM +*Font Bookman-Light: Standard "(1.05)" Standard ROM +*Font Bookman-LightItalic: Standard "(1.05)" Standard ROM +*Font Courier: Standard "(1.05)" Standard ROM +*Font Courier-Bold: Standard "(1.05)" Standard ROM +*Font Courier-BoldOblique: Standard "(1.05)" Standard ROM +*Font Courier-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica: Standard "(1.05)" Standard ROM +*Font Helvetica-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(1.05)" Standard ROM +*Font Helvetica-Oblique: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(1.05)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(1.05)" Standard ROM +*Font Palatino-Bold: Standard "(1.05)" Standard ROM +*Font Palatino-BoldItalic: Standard "(1.05)" Standard ROM +*Font Palatino-Italic: Standard "(1.05)" Standard ROM +*Font Palatino-Roman: Standard "(1.05)" Standard ROM +*Font Symbol: Special "(001.005)" Special ROM +*Font Times-Bold: Standard "(1.05)" Standard ROM +*Font Times-BoldItalic: Standard "(1.05)" Standard ROM +*Font Times-Italic: Standard "(1.05)" Standard ROM +*Font Times-Roman: Standard "(1.05)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM +*Font ZapfDingbats: Special "(001.005)" Special ROM +*% End of scx3400.ppd, 11932 bytes. diff --git a/ppd/scx4100.ppd b/ppd/scx4100.ppd index f3663cd2..2293d5ec 100644 --- a/ppd/scx4100.ppd +++ b/ppd/scx4100.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for SCX-4100 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "scx4100.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4100" *ShortNickName: "Samsung SCX-4100" -*NickName: "Samsung SCX-4100, 2.0.0" +*NickName: "Samsung SCX-4100, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -23,9 +23,11 @@ *QPDL BandSize: "128" *PJL BeginPJL: "<1B>%-12345X" *PJL EndPJL: "<09><1B>%-12345X" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" *QPDL QPDLVersion: "1" *General DocHeaderValues: "<0><2><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -204,6 +206,13 @@ *Resolution 600dpi/600 DPI: "<>setpagedevice" *Resolution 300dpi/300 DPI: "<>setpagedevice" *CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex *DefaultFont: Courier *Font AvantGarde-Book: Standard "(1.05)" Standard ROM *Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM @@ -240,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of scx4100.ppd, 11931 bytes. +*% End of scx4100.ppd, 12336 bytes. diff --git a/ppd/scx4100fr.ppd b/ppd/scx4100fr.ppd index 624896c5..d34c964d 100644 --- a/ppd/scx4100fr.ppd +++ b/ppd/scx4100fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4100 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "scx4100.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4100" *ShortNickName: "Samsung SCX-4100" -*NickName: "Samsung SCX-4100, 2.0.0" +*NickName: "Samsung SCX-4100, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4100pt.ppd b/ppd/scx4100pt.ppd index 7693547d..75d872e0 100644 --- a/ppd/scx4100pt.ppd +++ b/ppd/scx4100pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4100 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "scx4100.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4100" *ShortNickName: "Samsung SCX-4100" -*NickName: "Samsung SCX-4100, 2.0.0" +*NickName: "Samsung SCX-4100, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4200.ppd b/ppd/scx4200.ppd index 32ac33ae..fa2bd43c 100644 --- a/ppd/scx4200.ppd +++ b/ppd/scx4200.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for SCX-4200 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "scx4200.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4200" *ShortNickName: "Samsung SCX-4200" -*NickName: "Samsung SCX-4200, 2.0.0" +*NickName: "Samsung SCX-4200, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -23,9 +23,12 @@ *QPDL BandSize: "128" *PJL BeginPJL: "<1B>%-12345X" *PJL EndPJL: "<09><1B>%-12345X" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" *QPDL QPDLVersion: "1" *General DocHeaderValues: "<0><2><1>" -*cupsVersion: 1.5 +*1284DeviceID: "MFG:Samsung;MDL:SCX-4200 Series;CMD:GDI;" +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +42,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +69,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +94,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +118,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -204,6 +207,13 @@ *Resolution 600dpi/600 DPI: "<>setpagedevice" *Resolution 300dpi/300 DPI: "<>setpagedevice" *CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex *DefaultFont: Courier *Font AvantGarde-Book: Standard "(1.05)" Standard ROM *Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM @@ -240,4 +250,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of scx4200.ppd, 11931 bytes. +*% End of scx4200.ppd, 12394 bytes. diff --git a/ppd/scx4200fr.ppd b/ppd/scx4200fr.ppd index a41c0400..cbe25798 100644 --- a/ppd/scx4200fr.ppd +++ b/ppd/scx4200fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4200 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "scx4200.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4200" *ShortNickName: "Samsung SCX-4200" -*NickName: "Samsung SCX-4200, 2.0.0" +*NickName: "Samsung SCX-4200, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4200pt.ppd b/ppd/scx4200pt.ppd index 781bb4b1..995a00b0 100644 --- a/ppd/scx4200pt.ppd +++ b/ppd/scx4200pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4200 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "scx4200.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4200" *ShortNickName: "Samsung SCX-4200" -*NickName: "Samsung SCX-4200, 2.0.0" +*NickName: "Samsung SCX-4200, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4216f.ppd b/ppd/scx4216f.ppd index 60a7ac6f..652eb368 100644 --- a/ppd/scx4216f.ppd +++ b/ppd/scx4216f.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for SCX-4216F with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "scx4216f.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4216F" *ShortNickName: "Samsung SCX-4216F" -*NickName: "Samsung SCX-4216F, 2.0.0" +*NickName: "Samsung SCX-4216F, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -23,9 +23,11 @@ *QPDL BandSize: "128" *PJL BeginPJL: "<1B>%-12345X" *PJL EndPJL: "<09><1B>%-12345X" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" *QPDL QPDLVersion: "1" *General DocHeaderValues: "<0><2><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -204,6 +206,13 @@ *Resolution 600dpi/600 DPI: "<>setpagedevice" *Resolution 300dpi/300 DPI: "<>setpagedevice" *CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex *DefaultFont: Courier *Font AvantGarde-Book: Standard "(1.05)" Standard ROM *Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM @@ -240,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of scx4216f.ppd, 11938 bytes. +*% End of scx4216f.ppd, 12343 bytes. diff --git a/ppd/scx4216ffr.ppd b/ppd/scx4216ffr.ppd index a3817470..7ff9602a 100644 --- a/ppd/scx4216ffr.ppd +++ b/ppd/scx4216ffr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4216F with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "scx4216f.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4216F" *ShortNickName: "Samsung SCX-4216F" -*NickName: "Samsung SCX-4216F, 2.0.0" +*NickName: "Samsung SCX-4216F, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4216fpt.ppd b/ppd/scx4216fpt.ppd index c52c21b3..7eac9d79 100644 --- a/ppd/scx4216fpt.ppd +++ b/ppd/scx4216fpt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4216F with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "scx4216f.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4216F" *ShortNickName: "Samsung SCX-4216F" -*NickName: "Samsung SCX-4216F, 2.0.0" +*NickName: "Samsung SCX-4216F, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4300.ppd b/ppd/scx4300.ppd index dbe6d92d..4c5241d5 100644 --- a/ppd/scx4300.ppd +++ b/ppd/scx4300.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for SCX-4300 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "scx4300.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4300" *ShortNickName: "Samsung SCX-4300" -*NickName: "Samsung SCX-4300, 2.0.0" +*NickName: "Samsung SCX-4300, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -23,9 +23,11 @@ *QPDL BandSize: "128" *PJL BeginPJL: "<1B>%-12345X" *PJL EndPJL: "<09><1B>%-12345X" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" *QPDL QPDLVersion: "1" *General DocHeaderValues: "<0><2><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -204,6 +206,13 @@ *Resolution 600dpi/600 DPI: "<>setpagedevice" *Resolution 300dpi/300 DPI: "<>setpagedevice" *CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex *DefaultFont: Courier *Font AvantGarde-Book: Standard "(1.05)" Standard ROM *Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM @@ -240,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of scx4300.ppd, 11931 bytes. +*% End of scx4300.ppd, 12336 bytes. diff --git a/ppd/scx4300fr.ppd b/ppd/scx4300fr.ppd index d3f55bd4..f9ea8e71 100644 --- a/ppd/scx4300fr.ppd +++ b/ppd/scx4300fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4300 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "scx4300.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4300" *ShortNickName: "Samsung SCX-4300" -*NickName: "Samsung SCX-4300, 2.0.0" +*NickName: "Samsung SCX-4300, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4300pt.ppd b/ppd/scx4300pt.ppd index c514b0be..171ddcd4 100644 --- a/ppd/scx4300pt.ppd +++ b/ppd/scx4300pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4300 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "scx4300.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4300" *ShortNickName: "Samsung SCX-4300" -*NickName: "Samsung SCX-4300, 2.0.0" +*NickName: "Samsung SCX-4300, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4500.ppd b/ppd/scx4500.ppd index 7d557927..b8575d1f 100644 --- a/ppd/scx4500.ppd +++ b/ppd/scx4500.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for SCX-4500 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "scx4500.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4500" *ShortNickName: "Samsung SCX-4500" -*NickName: "Samsung SCX-4500, 2.0.0" +*NickName: "Samsung SCX-4500, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -23,9 +23,11 @@ *QPDL BandSize: "128" *PJL BeginPJL: "<1B>%-12345X" *PJL EndPJL: "<09><1B>%-12345X" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" *QPDL QPDLVersion: "1" *General DocHeaderValues: "<0><2><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -203,6 +205,13 @@ *DefaultResolution: 600dpi *Resolution 600dpi/600 DPI: "<>setpagedevice" *CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex *DefaultFont: Courier *Font AvantGarde-Book: Standard "(1.05)" Standard ROM *Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM @@ -239,4 +248,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of scx4500.ppd, 11782 bytes. +*% End of scx4500.ppd, 12187 bytes. diff --git a/ppd/scx4500fr.ppd b/ppd/scx4500fr.ppd index eaba05dd..548bf5b6 100644 --- a/ppd/scx4500fr.ppd +++ b/ppd/scx4500fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4500 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "scx4500.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4500" *ShortNickName: "Samsung SCX-4500" -*NickName: "Samsung SCX-4500, 2.0.0" +*NickName: "Samsung SCX-4500, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4500pt.ppd b/ppd/scx4500pt.ppd index 55c9f703..8341711a 100644 --- a/ppd/scx4500pt.ppd +++ b/ppd/scx4500pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4500 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "scx4500.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4500" *ShortNickName: "Samsung SCX-4500" -*NickName: "Samsung SCX-4500, 2.0.0" +*NickName: "Samsung SCX-4500, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4521f.ppd b/ppd/scx4521f.ppd index d4325ed9..16849826 100644 --- a/ppd/scx4521f.ppd +++ b/ppd/scx4521f.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for SCX-4521F with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "scx4521f.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4521F" *ShortNickName: "Samsung SCX-4521F" -*NickName: "Samsung SCX-4521F, 2.0.0" +*NickName: "Samsung SCX-4521F, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -23,9 +23,11 @@ *QPDL BandSize: "128" *PJL BeginPJL: "<1B>%-12345X" *PJL EndPJL: "<09><1B>%-12345X" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" *QPDL QPDLVersion: "1" *General DocHeaderValues: "<0><2><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -203,6 +205,13 @@ *DefaultResolution: 600dpi *Resolution 600dpi/600 DPI: "<>setpagedevice" *CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex *DefaultFont: Courier *Font AvantGarde-Book: Standard "(1.05)" Standard ROM *Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM @@ -239,4 +248,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of scx4521f.ppd, 11789 bytes. +*% End of scx4521f.ppd, 12194 bytes. diff --git a/ppd/scx4521ffr.ppd b/ppd/scx4521ffr.ppd index 7485e88a..a2d3ea74 100644 --- a/ppd/scx4521ffr.ppd +++ b/ppd/scx4521ffr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4521F with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "scx4521f.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4521F" *ShortNickName: "Samsung SCX-4521F" -*NickName: "Samsung SCX-4521F, 2.0.0" +*NickName: "Samsung SCX-4521F, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4521fpt.ppd b/ppd/scx4521fpt.ppd index b1ad3982..d1c1bafa 100644 --- a/ppd/scx4521fpt.ppd +++ b/ppd/scx4521fpt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4521F with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "scx4521f.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4521F" *ShortNickName: "Samsung SCX-4521F" -*NickName: "Samsung SCX-4521F, 2.0.0" +*NickName: "Samsung SCX-4521F, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4600.ppd b/ppd/scx4600.ppd index 63dc7275..0e6693bb 100644 --- a/ppd/scx4600.ppd +++ b/ppd/scx4600.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for SCX-4600 with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "scx4600.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4600" *ShortNickName: "Samsung SCX-4600" -*NickName: "Samsung SCX-4600, 2.0.0" +*NickName: "Samsung SCX-4600, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -25,7 +25,7 @@ *PJL EndPJL: "<09><1B>%-12345X" *QPDL QPDLVersion: "3" *General DocHeaderValues: "<0><0><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +39,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +66,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +91,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +115,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -240,4 +240,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of scx4600.ppd, 11935 bytes. +*% End of scx4600.ppd, 11932 bytes. diff --git a/ppd/scx4600fr.ppd b/ppd/scx4600fr.ppd index 7b04fe4b..a0b2cf59 100644 --- a/ppd/scx4600fr.ppd +++ b/ppd/scx4600fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4600 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "scx4600.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4600" *ShortNickName: "Samsung SCX-4600" -*NickName: "Samsung SCX-4600, 2.0.0" +*NickName: "Samsung SCX-4600, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4600pt.ppd b/ppd/scx4600pt.ppd index 0449bef9..8fa4572d 100644 --- a/ppd/scx4600pt.ppd +++ b/ppd/scx4600pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4600 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "scx4600.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4600" *ShortNickName: "Samsung SCX-4600" -*NickName: "Samsung SCX-4600, 2.0.0" +*NickName: "Samsung SCX-4600, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4623f.ppd b/ppd/scx4623f.ppd index 462c322b..a08f7bfd 100644 --- a/ppd/scx4623f.ppd +++ b/ppd/scx4623f.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for SCX-4623f with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "scx4623f.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4623f" *ShortNickName: "Samsung SCX-4623f" -*NickName: "Samsung SCX-4623f, 2.0.0" +*NickName: "Samsung SCX-4623f, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -25,7 +25,7 @@ *PJL EndPJL: "<09><1B>%-12345X" *QPDL QPDLVersion: "3" *General DocHeaderValues: "<0><0><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +39,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +66,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +91,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +115,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -240,4 +240,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of scx4623f.ppd, 11942 bytes. +*% End of scx4623f.ppd, 11939 bytes. diff --git a/ppd/scx4623ffr.ppd b/ppd/scx4623ffr.ppd index a198c26c..cb70a83d 100644 --- a/ppd/scx4623ffr.ppd +++ b/ppd/scx4623ffr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4623f with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "scx4623f.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4623f" *ShortNickName: "Samsung SCX-4623f" -*NickName: "Samsung SCX-4623f, 2.0.0" +*NickName: "Samsung SCX-4623f, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4623fpt.ppd b/ppd/scx4623fpt.ppd index 06f90f11..159c94d7 100644 --- a/ppd/scx4623fpt.ppd +++ b/ppd/scx4623fpt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4623f with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "scx4623f.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4623f" *ShortNickName: "Samsung SCX-4623f" -*NickName: "Samsung SCX-4623f, 2.0.0" +*NickName: "Samsung SCX-4623f, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4623fw.ppd b/ppd/scx4623fw.ppd index cdaa10d1..0d74ba46 100644 --- a/ppd/scx4623fw.ppd +++ b/ppd/scx4623fw.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for SCX-4623fw with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "scx4623fw.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4623fw" *ShortNickName: "Samsung SCX-4623fw" -*NickName: "Samsung SCX-4623fw, 2.0.0" +*NickName: "Samsung SCX-4623fw, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -25,7 +25,7 @@ *PJL EndPJL: "<09><1B>%-12345X" *QPDL QPDLVersion: "3" *General DocHeaderValues: "<0><0><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +39,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +66,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +91,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +115,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -240,4 +240,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of scx4623fw.ppd, 11949 bytes. +*% End of scx4623fw.ppd, 11946 bytes. diff --git a/ppd/scx4623fwfr.ppd b/ppd/scx4623fwfr.ppd index 25207fe9..95c92db4 100644 --- a/ppd/scx4623fwfr.ppd +++ b/ppd/scx4623fwfr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4623fw with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "scx4623fw.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4623fw" *ShortNickName: "Samsung SCX-4623fw" -*NickName: "Samsung SCX-4623fw, 2.0.0" +*NickName: "Samsung SCX-4623fw, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx4623fwpt.ppd b/ppd/scx4623fwpt.ppd index c4bbee8b..d0662a8c 100644 --- a/ppd/scx4623fwpt.ppd +++ b/ppd/scx4623fwpt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-4623fw with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "scx4623fw.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-4623fw" *ShortNickName: "Samsung SCX-4623fw" -*NickName: "Samsung SCX-4623fw, 2.0.0" +*NickName: "Samsung SCX-4623fw, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx5330n.ppd b/ppd/scx5330n.ppd index 804dc700..7a04027c 100644 --- a/ppd/scx5330n.ppd +++ b/ppd/scx5330n.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for SCX-5330N with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "scx5330n.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-5330N" *ShortNickName: "Samsung SCX-5330N" -*NickName: "Samsung SCX-5330N, 2.0.0" +*NickName: "Samsung SCX-5330N, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -26,7 +26,7 @@ *QPDL QPDLVersion: "3" *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -40,7 +40,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -67,7 +67,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -92,7 +92,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -116,7 +116,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -248,4 +248,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of scx5330n.ppd, 12325 bytes. +*% End of scx5330n.ppd, 12322 bytes. diff --git a/ppd/scx5330nfr.ppd b/ppd/scx5330nfr.ppd index 414611e9..325cae18 100644 --- a/ppd/scx5330nfr.ppd +++ b/ppd/scx5330nfr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-5330N with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "scx5330n.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-5330N" *ShortNickName: "Samsung SCX-5330N" -*NickName: "Samsung SCX-5330N, 2.0.0" +*NickName: "Samsung SCX-5330N, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx5330npt.ppd b/ppd/scx5330npt.ppd index b5f08c03..b0b6f33f 100644 --- a/ppd/scx5330npt.ppd +++ b/ppd/scx5330npt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-5330N with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "scx5330n.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-5330N" *ShortNickName: "Samsung SCX-5330N" -*NickName: "Samsung SCX-5330N, 2.0.0" +*NickName: "Samsung SCX-5330N, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx5530fn.ppd b/ppd/scx5530fn.ppd index 6ac16434..1bc47c74 100644 --- a/ppd/scx5530fn.ppd +++ b/ppd/scx5530fn.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for SCX-5530FN with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "scx5530fn.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-5530FN" *ShortNickName: "Samsung SCX-5530FN" -*NickName: "Samsung SCX-5530FN, 2.0.0" +*NickName: "Samsung SCX-5530FN, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -26,7 +26,7 @@ *QPDL QPDLVersion: "3" *General DocHeaderValues: "<0><0><1>" *cupsBackSide: "Normal" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -40,7 +40,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -67,7 +67,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -92,7 +92,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -116,7 +116,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -248,4 +248,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of scx5530fn.ppd, 12332 bytes. +*% End of scx5530fn.ppd, 12329 bytes. diff --git a/ppd/scx5530fnfr.ppd b/ppd/scx5530fnfr.ppd index 79db5138..75c98e05 100644 --- a/ppd/scx5530fnfr.ppd +++ b/ppd/scx5530fnfr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-5530FN with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "scx5530fn.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-5530FN" *ShortNickName: "Samsung SCX-5530FN" -*NickName: "Samsung SCX-5530FN, 2.0.0" +*NickName: "Samsung SCX-5530FN, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/scx5530fnpt.ppd b/ppd/scx5530fnpt.ppd index 5e6b0507..61b007d4 100644 --- a/ppd/scx5530fnpt.ppd +++ b/ppd/scx5530fnpt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SCX-5530FN with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "scx5530fn.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SCX-5530FN" *ShortNickName: "Samsung SCX-5530FN" -*NickName: "Samsung SCX-5530FN, 2.0.0" +*NickName: "Samsung SCX-5530FN, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/sf565p.ppd b/ppd/sf565p.ppd index b6dc93f7..958ab5dc 100644 --- a/ppd/sf565p.ppd +++ b/ppd/sf565p.ppd @@ -1,8 +1,8 @@ *PPD-Adobe: "4.3" *%%%% PPD file for SF-565P with CUPS. -*%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. +*%%%% Created by the CUPS PPD Compiler CUPS v2.4.10. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "sf565p.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SF-565P" *ShortNickName: "Samsung SF-565P" -*NickName: "Samsung SF-565P, 2.0.0" +*NickName: "Samsung SF-565P, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False @@ -23,9 +23,11 @@ *QPDL BandSize: "128" *PJL BeginPJL: "<1B>%-12345X" *PJL EndPJL: "<09><1B>%-12345X" +*cupsBackSide: "Normal" +*QPDL ManualDuplex: "On" *QPDL QPDLVersion: "1" *General DocHeaderValues: "<0><2><1>" -*cupsVersion: 1.5 +*cupsVersion: 2.4 *cupsModelNumber: 0 *cupsManualCopies: False *cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl" @@ -39,7 +41,7 @@ *PageSize Executive/Executive: "<>setpagedevice" *PageSize Ledger/US Ledger: "<>setpagedevice" *PageSize A3/A3: "<>setpagedevice" -*PageSize Env10/Envelope #10 : "<>setpagedevice" +*PageSize Env10/Envelope #10: "<>setpagedevice" *PageSize Monarch/Envelope Monarch: "<>setpagedevice" *PageSize C5/Envelope C5: "<>setpagedevice" *PageSize DL/Envelope DL: "<>setpagedevice" @@ -66,7 +68,7 @@ *PageRegion Executive/Executive: "<>setpagedevice" *PageRegion Ledger/US Ledger: "<>setpagedevice" *PageRegion A3/A3: "<>setpagedevice" -*PageRegion Env10/Envelope #10 : "<>setpagedevice" +*PageRegion Env10/Envelope #10: "<>setpagedevice" *PageRegion Monarch/Envelope Monarch: "<>setpagedevice" *PageRegion C5/Envelope C5: "<>setpagedevice" *PageRegion DL/Envelope DL: "<>setpagedevice" @@ -91,7 +93,7 @@ *ImageableArea Executive/Executive: "10.75 15 511.25 741" *ImageableArea Ledger/US Ledger: "10.75 15 1213.25 777" *ImageableArea A3/A3: "10.75 15 831.25 1176" -*ImageableArea Env10/Envelope #10 : "10.75 15 286.25 669" +*ImageableArea Env10/Envelope #10: "10.75 15 286.25 669" *ImageableArea Monarch/Envelope Monarch: "10.75 15 268.25 525" *ImageableArea C5/Envelope C5: "10.75 15 448.25 634" *ImageableArea DL/Envelope DL: "10.75 15 301.25 609" @@ -115,7 +117,7 @@ *PaperDimension Executive/Executive: "522 756" *PaperDimension Ledger/US Ledger: "1224 792" *PaperDimension A3/A3: "842 1191" -*PaperDimension Env10/Envelope #10 : "297 684" +*PaperDimension Env10/Envelope #10: "297 684" *PaperDimension Monarch/Envelope Monarch: "279 540" *PaperDimension C5/Envelope C5: "459 649" *PaperDimension DL/Envelope DL: "312 624" @@ -204,6 +206,13 @@ *Resolution 600dpi/600 DPI: "<>setpagedevice" *Resolution 300dpi/300 DPI: "<>setpagedevice" *CloseUI: *Resolution +*OpenUI *Duplex/2-Sided Printing: PickOne +*OrderDependency: 10 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Off (1-Sided): "<>setpagedevice" +*Duplex DuplexNoTumble/Long-Edge (Portrait): "<>setpagedevice" +*Duplex DuplexTumble/Short-Edge (Landscape): "<>setpagedevice" +*CloseUI: *Duplex *DefaultFont: Courier *Font AvantGarde-Book: Standard "(1.05)" Standard ROM *Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM @@ -240,4 +249,4 @@ *Font Times-Roman: Standard "(1.05)" Standard ROM *Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM *Font ZapfDingbats: Special "(001.005)" Special ROM -*% End of sf565p.ppd, 11924 bytes. +*% End of sf565p.ppd, 12329 bytes. diff --git a/ppd/sf565pfr.ppd b/ppd/sf565pfr.ppd index 277e12a4..a284f427 100644 --- a/ppd/sf565pfr.ppd +++ b/ppd/sf565pfr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SF-565P with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "sf565p.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SF-565P" *ShortNickName: "Samsung SF-565P" -*NickName: "Samsung SF-565P, 2.0.0" +*NickName: "Samsung SF-565P, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/sf565ppt.ppd b/ppd/sf565ppt.ppd index 54a60f51..f285f481 100644 --- a/ppd/sf565ppt.ppd +++ b/ppd/sf565ppt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for SF-565P with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "sf565p.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Samsung" *ModelName: "Samsung SF-565P" *ShortNickName: "Samsung SF-565P" -*NickName: "Samsung SF-565P, 2.0.0" +*NickName: "Samsung SF-565P, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/version.defs b/ppd/version.defs index 22135c0f..049da8a9 100644 --- a/ppd/version.defs +++ b/ppd/version.defs @@ -13,7 +13,7 @@ Font * -Version "2.0.0" +Version "2.0.2" /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 enc=utf8: */ diff --git a/ppd/wc3119.ppd b/ppd/wc3119.ppd index e26dac47..5d98481b 100644 --- a/ppd/wc3119.ppd +++ b/ppd/wc3119.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for WorkCentre 3119 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "wc3119.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox WorkCentre 3119" *ShortNickName: "Xerox WorkCentre 3119" -*NickName: "Xerox WorkCentre 3119, 2.0.0" +*NickName: "Xerox WorkCentre 3119, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/wc3119fr.ppd b/ppd/wc3119fr.ppd index aa78edf7..67d3fa57 100644 --- a/ppd/wc3119fr.ppd +++ b/ppd/wc3119fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for WorkCentre 3119 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "wc3119.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox WorkCentre 3119" *ShortNickName: "Xerox WorkCentre 3119" -*NickName: "Xerox WorkCentre 3119, 2.0.0" +*NickName: "Xerox WorkCentre 3119, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/wc3119pt.ppd b/ppd/wc3119pt.ppd index 7dbebf70..e307f005 100644 --- a/ppd/wc3119pt.ppd +++ b/ppd/wc3119pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for WorkCentre 3119 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "wc3119.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox WorkCentre 3119" *ShortNickName: "Xerox WorkCentre 3119" -*NickName: "Xerox WorkCentre 3119, 2.0.0" +*NickName: "Xerox WorkCentre 3119, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/wcpe114e.ppd b/ppd/wcpe114e.ppd index 0e4fa81a..38655b4b 100644 --- a/ppd/wcpe114e.ppd +++ b/ppd/wcpe114e.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for WorkCentre PE114e with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "wcpe114e.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox WorkCentre PE114e" *ShortNickName: "Xerox WorkCentre PE114e" -*NickName: "Xerox WorkCentre PE114e, 2.0.0" +*NickName: "Xerox WorkCentre PE114e, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/wcpe114efr.ppd b/ppd/wcpe114efr.ppd index 49df4530..c6587169 100644 --- a/ppd/wcpe114efr.ppd +++ b/ppd/wcpe114efr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for WorkCentre PE114e with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "wcpe114e.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox WorkCentre PE114e" *ShortNickName: "Xerox WorkCentre PE114e" -*NickName: "Xerox WorkCentre PE114e, 2.0.0" +*NickName: "Xerox WorkCentre PE114e, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/wcpe114ept.ppd b/ppd/wcpe114ept.ppd index fd09f749..12bca7b9 100644 --- a/ppd/wcpe114ept.ppd +++ b/ppd/wcpe114ept.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for WorkCentre PE114e with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "wcpe114e.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox WorkCentre PE114e" *ShortNickName: "Xerox WorkCentre PE114e" -*NickName: "Xerox WorkCentre PE114e, 2.0.0" +*NickName: "Xerox WorkCentre PE114e, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/wcpe16.ppd b/ppd/wcpe16.ppd index ffb20019..dc06e3fd 100644 --- a/ppd/wcpe16.ppd +++ b/ppd/wcpe16.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for WorkCentre PE16 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "wcpe16.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox WorkCentre PE16" *ShortNickName: "Xerox WorkCentre PE16" -*NickName: "Xerox WorkCentre PE16, 2.0.0" +*NickName: "Xerox WorkCentre PE16, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/wcpe16fr.ppd b/ppd/wcpe16fr.ppd index 639276d2..2a3d882e 100644 --- a/ppd/wcpe16fr.ppd +++ b/ppd/wcpe16fr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for WorkCentre PE16 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "wcpe16.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox WorkCentre PE16" *ShortNickName: "Xerox WorkCentre PE16" -*NickName: "Xerox WorkCentre PE16, 2.0.0" +*NickName: "Xerox WorkCentre PE16, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/wcpe16pt.ppd b/ppd/wcpe16pt.ppd index d24f2c9f..bdbd541f 100644 --- a/ppd/wcpe16pt.ppd +++ b/ppd/wcpe16pt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for WorkCentre PE16 with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "wcpe16.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Xerox" *ModelName: "Xerox WorkCentre PE16" *ShortNickName: "Xerox WorkCentre PE16" -*NickName: "Xerox WorkCentre PE16, 2.0.0" +*NickName: "Xerox WorkCentre PE16, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/x215mfp.ppd b/ppd/x215mfp.ppd index f86450d2..5d9b0bad 100644 --- a/ppd/x215mfp.ppd +++ b/ppd/x215mfp.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for X215 MFP with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: English *LanguageEncoding: ISOLatin1 *PCFileName: "x215mfp.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Lexmark" *ModelName: "Lexmark X215 MFP" *ShortNickName: "Lexmark X215 MFP" -*NickName: "Lexmark X215 MFP, 2.0.0" +*NickName: "Lexmark X215 MFP, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/x215mfpfr.ppd b/ppd/x215mfpfr.ppd index cd940a69..907d35aa 100644 --- a/ppd/x215mfpfr.ppd +++ b/ppd/x215mfpfr.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for X215 MFP with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: French *LanguageEncoding: ISOLatin1 *PCFileName: "x215mfp.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Lexmark" *ModelName: "Lexmark X215 MFP" *ShortNickName: "Lexmark X215 MFP" -*NickName: "Lexmark X215 MFP, 2.0.0" +*NickName: "Lexmark X215 MFP, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/ppd/x215mfppt.ppd b/ppd/x215mfppt.ppd index 637f30d4..8124b771 100644 --- a/ppd/x215mfppt.ppd +++ b/ppd/x215mfppt.ppd @@ -2,7 +2,7 @@ *%%%% PPD file for X215 MFP with CUPS. *%%%% Created by the CUPS PPD Compiler CUPS v1.5.0. *FormatVersion: "4.3" -*FileVersion: "2.0.0" +*FileVersion: "2.0.2" *LanguageVersion: Portuguese_Brazil *LanguageEncoding: ISOLatin1 *PCFileName: "x215mfp.ppd" @@ -10,7 +10,7 @@ *Manufacturer: "Lexmark" *ModelName: "Lexmark X215 MFP" *ShortNickName: "Lexmark X215 MFP" -*NickName: "Lexmark X215 MFP, 2.0.0" +*NickName: "Lexmark X215 MFP, 2.0.2" *PSVersion: "(3010.000) 0" *LanguageLevel: "3" *ColorDevice: False diff --git a/rules.mk b/rules.mk deleted file mode 100644 index 17ca4070..00000000 --- a/rules.mk +++ /dev/null @@ -1,100 +0,0 @@ -# -# rules.mk (C) 2007-2008, Aurélien Croc (AP²C) -# -# Compilation rules file for SpliX -# - -$(rastertoqpdl_TARGET): $(rastertoqpdl_OBJ) - $(call printCmd, $(cmd_link)) - $(Q)$(CXX) -o $@ $^ $(rastertoqpdl_CXXFLAGS) $(rastertoqpdl_LDFLAGS) \ - $(rastertoqpdl_LIBS) - -$(pstoqpdl_TARGET): $(pstoqpdl_OBJ) - $(call printCmd, $(cmd_link)) - $(Q)$(CXX) -o $@ $^ $(pstoqpdl_CXXFLAGS) $(pstoqpdl_LDFLAGS) \ - $(pstoqpdl_LIBS) - -.PHONY: install installcms -cmd_install_raster = INSTALL $(rastertoqpdl_TARGET) -cmd_install_ps = INSTALL $(pstoqpdl_TARGET) -cmd_install_cms = INSTALL color profile files -install: $(rastertoqpdl_TARGET) $(pstoqpdl_TARGET) - $(Q)mkdir -p $(DESTDIR)${CUPSFILTER} - $(call printCmd, $(cmd_install_raster)) - $(Q)install -m 755 $(rastertoqpdl_TARGET) $(DESTDIR)${CUPSFILTER} - $(call printCmd, $(cmd_install_ps)) - $(Q)install -m 755 $(pstoqpdl_TARGET) $(DESTDIR)${CUPSFILTER} - $(Q)$(MAKE) --no-print-directory -C ppd install Q=$(Q) \ - DESTDIR=$(abspath $(DESTDIR)) DISABLE_JBIG=$(DISABLE_JBIG) - @echo "" - @echo "PLEASE INSTALL MANUALLY COLOR PROFILE FILES (CHECK INSTALL)" - @echo " --- Everything is done! Have fun ---" - @echo "" - -installcms: - @if [ "$$CMSDIR" -a -d "$$CMSDIR" ]; then \ - CMSBASE=$(CUPSPROFILE)/$$MANUFACTURER; \ - mkdir -p $(DESTDIR)$$CMSBASE; \ - install -m 644 "$(CMSDIR)"/* $(DESTDIR)$$CMSBASE; \ - if [ $$? = 0 ]; then \ - echo "Color profile files has been copied."; \ - fi; \ - else \ - echo "Usage: make installcms CMSDIR=/path/to/cms" \ - "MANUFACTURER={samsung,xerox,dell}"; \ - fi - - - - -# Specific rules used for development and information - -.PHONY: tags optionList drv ppd cleanppd -tags: - ctags --recurse --language-force=c++ --extra=+q --fields=+i \ - --exclude=doc --exclude=.svn * - -drv: - @$(MAKE) --no-print-directory -C ppd/ drv DISABLE_JBIG=$(DISABLE_JBIG) -ppd: - @$(MAKE) --no-print-directory -C ppd/ ppd DISABLE_JBIG=$(DISABLE_JBIG) -cleanppd: - @$(MAKE) --no-print-directory -C ppd/ distclean DISABLE_JBIG=$(DISABLE_JBIG) - - -ifneq ($(DISABLE_JBIG),0) -JBIGSTATE := disabled -else -JBIGSTATE := enabled -endif -ifneq ($(DISABLE_THREADS),0) -THREADSSTATE := disabled -else -THREADSSTATE := enabled -endif -ifneq ($(DISABLE_BLACKOPTIM),0) -BLACKOPTIMSTATE := disabled -else -BLACKOPTIMSTATE := enabled -endif -ifeq ($(DRV_ONLY),0) -DRVSTATE := disabled -else -DRVSTATE := enabled -endif - - -MSG := +---------------------------------------------+\n -MSG += | COMPILATION PARAMETERS SUMMARY |\n -MSG += +---------------------------------------------+\n -MSG += | THREADS = %8s |\n -MSG += | THREADS Nr = %8i |\n -MSG += | CACHESIZE = %8i |\n -MSG += | JBIG = %8s |\n -MSG += | BLACK OPTIM = %8s |\n -MSG += | DRV ONLY = %8s |\n -MSG += +---------------------------------------------+\n -MSG += (Do a \"make clean\" before updating these values)\n\n -optionList: - @printf " $(MSG)" $(THREADSSTATE) $(THREADS) $(CACHESIZE) $(JBIGSTATE) \ - $(BLACKOPTIMSTATE) $(DRVSTATE) diff --git a/scripts/check_cpp23.sh b/scripts/check_cpp23.sh new file mode 100644 index 00000000..ae31796b --- /dev/null +++ b/scripts/check_cpp23.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# SpliX C++23 Capability Checker +# Checks for key C++23/20 features required by the modernized codebase. + +echo "Checking C++23 Feature Support..." + +cat < cpp23_test.cpp +#include +#include +#include +#include +#include + +int main() { +#if __cplusplus >= 202302L + return 0; +#else + return 1; +#endif +} +EOF + +# Try to compile with the detected compiler +if c++ -std=c++23 cpp23_test.cpp -o cpp23_test 2>/dev/null; then + echo "✅ Success: C++23 is supported by your compiler." + rm cpp23_test.cpp cpp23_test + exit 0 +elif c++ -std=c++2b cpp23_test.cpp -o cpp23_test 2>/dev/null; then + echo "✅ Success: C++23 (experimental) is supported via -std=c++2b." + rm cpp23_test.cpp cpp23_test + exit 0 +else + echo "❌ Error: C++23 is NOT supported by '$(c++ --version | head -n 1)'." + echo "Modernized SpliX requires GCC 12+, Clang 15+, or MSVC 19.33+." + rm cpp23_test.cpp + exit 1 +fi diff --git a/splix.speq b/splix.speq new file mode 100644 index 00000000..58ef56c6 --- /dev/null +++ b/splix.speq @@ -0,0 +1,65 @@ +VERSION 0.2.0 + +PROJECT + NAME "splix" + LANG "cpp" + STACK "cups, jbig, pthreads, cpp23" + ARCH "layered" + DEPS + SYSTEM "libcups2-dev, libjbig-dev" + DEV "gtest, cmake" + +VOCABULARY + Band # never: chunk, block, buffer + BandPlane # never: color_plane, plane_buffer + Page # never: surface, canvas + Request # never: job_params, options + SafeWrite # never: raw_write, write_all + Span # never: raw_pointer, pointer_length + +ENTITY printer, document, page, band, request, color_model, system + +TRANSFORM + document -> page : extract_pages + page -> band : render_to_bands + band -> band : optimize_ink, compress, color_transform + request -> printer : send_pjl, initialize + +LAYERS + FILTER + BOUNDARY external + OWNS main, argument_parsing, cups_interface + OWNS request + CALLS ENGINE + NEVER direct_raster_manipulation + NEVER protocol_generation + + ENGINE + OWNS rendering_orchestration, thread_management + OWNS document, page, system + CALLS PROTOCOL, CORE + NEVER cups_api + + PROTOCOL + OWNS qpdl_generation, compression_orchestration, pjl_headers + OWNS printer + CALLS CORE + NEVER rendering_logic + NEVER threading + + CORE + OWNS image_processing, colors, jbig_logic, portability + OWNS band, color_model + NEVER file_io + NEVER cups_api + +CONTRACTS + band.processing ALWAYS std::span + system.comparison ALWAYS std::ranges::equal-case-insensitive + system.write ALWAYS _safeWrite + system.allocation NEVER malloc, free + system.legacy_compare NEVER SP_STRCASECMP, strcasecmp + +CHANGELOG + 0.1.0 + ADDED formal specification for v2.0.2 diff --git a/src/algo0x0d.cpp b/src/algo0x0d.cpp index 8e8f28ab..febe9dbf 100644 --- a/src/algo0x0d.cpp +++ b/src/algo0x0d.cpp @@ -1,474 +1,417 @@ -/* - * algo0x0d.cpp SpliX is Copyright 2006-2008 by Aurélien Croc - * This file is a SpliX derivative work - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $Id$ - * - * -- - * This code is written by Leonardo Hamada - */ -#include "algo0x0d.h" -#include -#include -#include "errlog.h" -#include "request.h" -#include "printer.h" -#include "bandplane.h" - - - -/* - * Constructor. - */ -Algo0x0D::Algo0x0D() -{ -} - -Algo0x0D::~Algo0x0D() -{ -} - - - -/* - * Method for two-byte packet encoding. - */ -inline void Algo0x0D::writeTwoBytesPacket( unsigned char * output, - unsigned long & outputSize, - long int accumulatedHorizontalOffsetValue, - long int accumulatedVerticalOffsetValue, - unsigned long accumulatedRunCount ) -{ - /* Encodes the run count and vertical displacement in the first byte. */ - output[ outputSize++ ] = - ( unsigned char )( ( accumulatedVerticalOffsetValue << 6 ) | - accumulatedRunCount ); - - /* Encodes the offset value in the second byte. This is signed. */ - output[ outputSize++ ] = - ( unsigned char )( 0xFF & accumulatedHorizontalOffsetValue ); -} - - - -/* - * Method for four-byte packet encoding. - * Encodes the pen offset value as a 14-bit signed value in the first two bytes. - */ -inline void Algo0x0D::writeFourBytesPacket( unsigned char * output, - unsigned long & outputSize, - long int accumulatedHorizontalOffsetValue, - long int accumulatedVerticalOffsetValue, - unsigned long accumulatedRunCount ) -{ - /* Encodes the upper 6-bit value of the offset value. */ - output[ outputSize++ ] = 0x80 | - ( unsigned char )( ( 0x00003F00 & accumulatedHorizontalOffsetValue ) >> 8 ); - - /* Encode the lower 8-bit value of the offset value. */ - output[ outputSize++ ] = - ( unsigned char )( 0x000000FF & accumulatedHorizontalOffsetValue ); - - /* Encode the run count as a unsigned 12-bit value in the third byte. */ - output[ outputSize++ ] = 0x80 | - ( unsigned char )( ( accumulatedVerticalOffsetValue << 4 ) | - ( accumulatedRunCount >> 8 ) ); - /* Encode the last byte of run count. */ - output[ outputSize++ ] = - ( unsigned char )( 0x000000FF & accumulatedRunCount ); -} - - - -/* - * Method for six-byte packet encoding. - * Encodes the offset value as a 24-bit unsigned value in the second, - * third and fourth bytes. - */ -inline void Algo0x0D::writeSixBytesPacket( unsigned char * output, - unsigned long & outputSize, - long int accumulatedCombinedOffsetValue, - unsigned long accumulatedRunCount ) -{ - /* Write the packet header constant in the first byte. */ - output[ outputSize++ ] = 0xC0; - - /* Encodes the upper 8-bit value of the 24-bit offset value. */ - output[ outputSize++ ] = - ( unsigned char )( ( 0x00FF0000 & - accumulatedCombinedOffsetValue ) >> 16 ); - - /* Encodes the middle 8-bit value of the 24-bit offset value. */ - output[ outputSize++ ] = - ( unsigned char )( ( 0x0000FF00 & - accumulatedCombinedOffsetValue ) >> 8 ); - - /* Encodes the remaining 8-bit value of the 24-bit offset value. */ - output[ outputSize++ ] = - ( unsigned char )( 0x000000FF & - accumulatedCombinedOffsetValue ); - - /* Encodes the run counts as unsigned 14-bit value in the fifth and - sixth byte. */ - - /* Encodes the run counts in upper 6-bits. */ - output[ outputSize++ ] = 0xC0 | - ( unsigned char )( accumulatedRunCount >> 8 ); - - /* Encodes the run count lower 8-bits value. */ - output[ outputSize++ ] = - ( unsigned char )( 0x000000FF & accumulatedRunCount ); -} - - - -/* - * Modifications: Jun-29-2008, Jul-08-2008, Oct-03-2009, Oct-04-2009. - */ -inline void Algo0x0D::selectPacketSize( - unsigned char * output, - unsigned long & outputSize, - unsigned long preAccumulatedHorizontalOffsetValue, - unsigned long accumulatedHorizontalOffsetValue, - unsigned long currentHorizontalPenPosition, - unsigned long accumulatedRunCount, - unsigned long consecutiveBlankScanLines, - unsigned long currentVerticalPenPosition, - const unsigned long wrapWidth ) -{ - /* Set the initial vertical offset value. */ - long int verticalOffsetValue = consecutiveBlankScanLines; - - /* Set the initial horizontal offset value. */ - long int horizontalOffsetValue = accumulatedHorizontalOffsetValue; - - /* Verify if this is the first formed packet of the scan-line - and that it is not the first top-most scan-line of the given band. - Can be verified because on every beginning of a scan-line work, the - pre-accumulated horizontal offset value is zero. */ - if ( ( 0 == preAccumulatedHorizontalOffsetValue ) && - ( 0 < currentVerticalPenPosition ) ) { - /* Evaluate pixel distance between previous and current pen position - to find the relative horizontal offset value. */ - horizontalOffsetValue -= currentHorizontalPenPosition; - - /* Adjust by +1, when any of the previous scan-lines is not blank. - Must account for three cases: - A - When the band begins with any number of blank scan-lines. - B - When the current non-blank scan-line follow a blank scan-line, - but there are non-blank scan-lines previously. - C - When the previous scan-line was not blank. - Notice that when any of the previous scan-lines is non-blank, - the blank scan-line counter is always less than and not equal to - the value of the vertical pen position. */ - if ( consecutiveBlankScanLines < currentVerticalPenPosition ) { - verticalOffsetValue++; - } - - } else { - - /* Process a sequential packet for current scan-line. - The pre-accumulated offset value must be added, this was the - previous packet's run count value. */ - horizontalOffsetValue += preAccumulatedHorizontalOffsetValue; - - } - - /* Choosing the packet size. */ - if ( ( 127 >= horizontalOffsetValue ) - && ( -128 <= horizontalOffsetValue ) - && ( 63 >= accumulatedRunCount ) - && ( 1 >= verticalOffsetValue ) ) { - - /* Issue an encoded 2-byte packet. */ - writeTwoBytesPacket( output, outputSize, - horizontalOffsetValue, - verticalOffsetValue, - accumulatedRunCount ); - - } else if ( ( 8191 >= horizontalOffsetValue ) - && ( -8192 <= horizontalOffsetValue ) - && ( 4095 >= accumulatedRunCount ) - && ( 3 >= verticalOffsetValue ) ) { - - /* Issue an encoded 4-byte packet. */ - writeFourBytesPacket( output, outputSize, - horizontalOffsetValue, - verticalOffsetValue, - accumulatedRunCount ); - - } else { - - /* Issue an encoded 6-byte packet. */ - writeSixBytesPacket( output, outputSize, - wrapWidth * verticalOffsetValue - + horizontalOffsetValue, - accumulatedRunCount ); - - } - - /* Finished one packet encoding. */ -} - - - -/* - * Main algorithm 0xd encoder. - */ -BandPlane * Algo0x0D::compress(const Request & request, unsigned char *data, - unsigned long width, unsigned long height) -{ - /* Basic parameters validation. */ - if ( !data || !height || !width ) { - ERRORMSG(_("Invalid given data for compression: 0xd")); - return NULL; - } - - /* We will interpret the band heigth of 128 pixels as 600 DPI printing - request. Likewise, height of 64 pixels as 300 DPI printing. */ - if ( ! ( 128 == height || 64 == height ) ) { - ERRORMSG(_("Invalid band height for compression: 0xd")); - return NULL; - } - - /* Set the hardware wrapping width for six-byte type packet format. */ - const unsigned long wrapWidth = ( 64 == height ) ? 0x09A0 : 0x1360; - - /* These are the limits that an encoded scan-line is the allowed to produce - until encoding is given up. 250 bytes for 300 DPI, 122 bytes for 600 DPI.*/ - const unsigned long maxEncodedBytesPerScanLine = ( 64 == height ) ? - 250 : 122; - - /* Estimate a output buffer size limit equal to 256 bytes times the bitmap - height for 300 DPI printing, and 128 bytes times the bitmap height for - 600 DPI printing. */ - const unsigned long maximumBufferSize = ( 64 == height ) ? - 256 * height + 4: 128 * height + 4; - - /* Keep track of the size of encoded data. */ - unsigned long outputSize = 0; - - /* Encoded data size of current scan-line. */ - unsigned long encodedScanLineSize = 0; - - /* Create the output buffer for work. */ - unsigned char * output = NULL; - - try { - output = new unsigned char[ maximumBufferSize ]; - } catch( std::bad_alloc & ) { - ERRORMSG(_("Could not allocate work buffer for compression: 0xd")); - return NULL; - } - - /* Mask to track the bits in raw data-byte that is being processed. */ - unsigned char bitMask = 0x80; - - /* Accumulation of the number of (black) pixel runs. */ - unsigned long accumulatedRunCount = 0; - - /* Accumulation of horizontal offset value in pixels. */ - unsigned long accumulatedHorizontalOffsetValue = 0; - - /* Index for the raw data byte in the current scanline. */ - unsigned long rowByteIndex = 0; - - /* Current absolute horizontal pen position. */ - unsigned long currentHorizontalPenPosition = 0; - - /* Run counts are accounted for as an offset after each packet encodings. */ - unsigned long preAccumulatedHorizontalOffsetValue = 0; - - /* Current absolute vertical pen position. */ - unsigned long currentVerticalPenPosition = 0; - - /* Number of row-bytes in the bitmap. */ - const unsigned long rowBytes = ( width + 7 ) / 8; - - /* This is the working and therefore the effective printing width. - Crop the working width if bitmap is longer than wrap width. */ - const unsigned long workWidth = ( width > wrapWidth ) ? wrapWidth : width; - - /* Working width row-bytes. How many bytes need to store a working width - number of pixels. */ - const unsigned long workWidthRowBytes = ( workWidth + 7 ) / 8; - - /* Number of pixels left to be processed in the scanline. */ - unsigned long pixelsLeftInScanline = workWidth; - - /* Number of acumulated consecutive blank scanline. */ - unsigned long consecutiveBlankScanLines = 0; - - /* Main encoding loop. */ - while ( currentVerticalPenPosition < height ) { - - /* Scan for offset value. */ - while ( rowByteIndex < workWidthRowBytes ) { - - /* Check current byte data against the mask for a unset bit. */ - if ( ( 0 == ( bitMask & data[ rowByteIndex ] ) ) && - ( pixelsLeftInScanline > 0 ) ) { - /* Account for a blank pixel. */ - accumulatedHorizontalOffsetValue++; - - /* Make a discount for previous processed pixel. */ - pixelsLeftInScanline--; - } else { - /* Exit current loop for scanning of offset values. */ - break; - } - - /* Rotating the bit mask. */ - bitMask >>= 1; - - /* Reset the mask if needed. */ - if ( 0 == bitMask ) { - bitMask = 0x80; - - /* Advance the row byte index. */ - rowByteIndex++; - } - } - - /* Now, scan for run count. */ - while ( rowByteIndex < workWidthRowBytes ) { - - /* Check byte against the mask for an one-bit (set) value. */ - if ( ( 0 != ( bitMask & data[ rowByteIndex ] ) ) && - ( pixelsLeftInScanline > 0 ) ) { - /* Account for a black pixel. */ - accumulatedRunCount++; - - /* Make a discount for previous processed pixel. */ - pixelsLeftInScanline--; - } else { - /* Exit current loop for scanning of run count. */ - break; - } - - /* Rotating the bit mask. */ - bitMask >>= 1; - - /* Reset the mask if needed. */ - if ( 0 == bitMask ) { - bitMask = 0x80; - - /* Advance the row byte index. */ - rowByteIndex++; - } - } - - /* We have an offset value and a run count pair. */ - /* Verify if it's a blank scanline before proceeding. */ - if ( ( accumulatedHorizontalOffsetValue == workWidth ) && - ( 0 == accumulatedRunCount ) ) { - /* We encountered a blank scanline, so account for it. */ - consecutiveBlankScanLines++; - } else if ( 0 < accumulatedRunCount ) { - - /* We have pixels to encode, proceed. */ - unsigned long previousOutputSize = outputSize; - - if ( outputSize + 6 + 4 <= maximumBufferSize ) { - selectPacketSize( output, outputSize, - preAccumulatedHorizontalOffsetValue, - accumulatedHorizontalOffsetValue, - currentHorizontalPenPosition, - accumulatedRunCount, consecutiveBlankScanLines, - currentVerticalPenPosition, wrapWidth ); - } else { - /* Here we failed. Unlikely. */ - ERRORMSG(_("Out of buffer space: 0xd")); - delete [] output; - return NULL; - } - - encodedScanLineSize += ( outputSize - previousOutputSize ); - - if ( maxEncodedBytesPerScanLine < encodedScanLineSize ) { - /* We did not fail, but gave up because data is unsuited for - encoding by this algorithm. */ - delete [] output; - return NULL; - } - - /* After encoding, reset the blank scan-line counter. */ - consecutiveBlankScanLines = 0; - - /* Update the pen position. This is one way of doing it. */ - currentHorizontalPenPosition = - workWidth - pixelsLeftInScanline - accumulatedRunCount; - - /* Must pre-accumulate the offset value. */ - preAccumulatedHorizontalOffsetValue = accumulatedRunCount; - } - - if ( 0 == pixelsLeftInScanline ) { - /* Advance the vertical pen position. */ - if ( ++currentVerticalPenPosition < height ) { - /* No more pixels left in this scan-line, so go to the next one. */ - data = & data[ rowBytes ]; - } - - /* Re-initialize the encoded scan-line data size tracker to zero. */ - encodedScanLineSize = 0; - - /* Reset control variables to initial values. */ - rowByteIndex = 0; - - /* Reset the bit mask. */ - bitMask = 0x80; - - /* Re-init the working width. */ - pixelsLeftInScanline = workWidth; - - /* Reset the pre-accumulated offset value at each scan-line done. */ - preAccumulatedHorizontalOffsetValue = 0; - } - - /* Always reset the run count and the offset value in every pass. */ - accumulatedRunCount = 0; - accumulatedHorizontalOffsetValue = 0; - } - - /* Zero value byte padding for data size alignment to 4-byte boundary. */ - unsigned long zerosPad = 4 - ( outputSize % 4 ); - - /* Pad anyway even if already aligned. */ - if ( outputSize + zerosPad <= maximumBufferSize ) { - while ( zerosPad-- ) { - output[ outputSize++ ] = 0; - } - } else { - /* Here we failed. Unlikely. */ - ERRORMSG(_("No buffer during padding: 0xd")); - delete [] output; - return NULL; - } - - /* Prepare to return data encoded by algorithm 0xd. */ - BandPlane * plane = new BandPlane(); - - plane->setData( output, outputSize ); - plane->setEndian( BandPlane::Dependant ); - plane->setCompression( 0xd ); - - /* Finished this band encoding. */ - DEBUGMSG(_("Finished band encoding: type=0xd, size=%lu"), outputSize); - - return plane; -} +/* + * algo0x0d.cpp SpliX is Copyright 2006-2008 by Aurélien Croc + * This file is a SpliX derivative work + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $Id$ + * + * -- + * This code is written by Leonardo Hamada + */ +#include "algo0x0d.h" +#include +#include +#include +#include "errlog.h" +#include "request.h" +#include "printer.h" +#include "bandplane.h" + + + +// LIFECYCLE: Managed by compiler defaults in the header. + + + +/* + * Method for two-byte packet encoding. + */ +inline void Algo0x0D::writeTwoBytesPacket( std::vector &output, + int32_t accumulatedHorizontalOffsetValue, + int32_t accumulatedVerticalOffsetValue, + uint32_t accumulatedRunCount ) +{ + /* Encodes the run count and vertical displacement in the first byte. */ + output.push_back( static_cast((accumulatedVerticalOffsetValue << 6) | accumulatedRunCount) ); + + /* Encodes the offset value in the second byte. This is signed. */ + output.push_back( static_cast(0xFF & accumulatedHorizontalOffsetValue) ); +} + + + +/* + * Method for four-byte packet encoding. + * Encodes the pen offset value as a 14-bit signed value in the first two bytes. + */ +inline void Algo0x0D::writeFourBytesPacket( std::vector &output, + int32_t accumulatedHorizontalOffsetValue, + int32_t accumulatedVerticalOffsetValue, + uint32_t accumulatedRunCount ) +{ + /* Encodes the upper 6-bit value of the offset value. */ + output.push_back( 0x80 | static_cast((0x00003F00 & accumulatedHorizontalOffsetValue) >> 8) ); + + /* Encode the lower 8-bit value of the offset value. */ + output.push_back( static_cast(0x000000FF & accumulatedHorizontalOffsetValue) ); + + /* Encode the run count as a unsigned 12-bit value in the third byte. */ + output.push_back( 0x80 | static_cast((accumulatedVerticalOffsetValue << 4) | (accumulatedRunCount >> 8)) ); + + /* Encode the last byte of run count. */ + output.push_back( static_cast(0x000000FF & accumulatedRunCount) ); +} + + + +/* + * Method for six-byte packet encoding. + * Encodes the offset value as a 24-bit unsigned value in the second, + * third and fourth bytes. + */ +inline void Algo0x0D::writeSixBytesPacket( std::vector &output, + uint32_t accumulatedCombinedOffsetValue, + uint32_t accumulatedRunCount ) +{ + /* Write the packet header constant in the first byte. */ + output.push_back( 0xC0 ); + + /* Encodes the upper 8-bit value of the 24-bit offset value. */ + output.push_back( static_cast((0x00FF0000 & accumulatedCombinedOffsetValue) >> 16) ); + + /* Encodes the middle 8-bit value of the 24-bit offset value. */ + output.push_back( static_cast((0x0000FF00 & accumulatedCombinedOffsetValue) >> 8) ); + + /* Encodes the remaining 8-bit value of the 24-bit offset value. */ + output.push_back( static_cast(0x000000FF & accumulatedCombinedOffsetValue) ); + + /* Encodes the run counts as unsigned 14-bit value in the fifth and sixth byte. */ + /* Encodes the run counts in upper 6-bits. */ + output.push_back( 0xC0 | static_cast(accumulatedRunCount >> 8) ); + + /* Encodes the run count lower 8-bits value. */ + output.push_back( static_cast(0x000000FF & accumulatedRunCount) ); +} + + + +/* + * Modifications: Jun-29-2008, Jul-08-2008, Oct-03-2009, Oct-04-2009. + */ +inline void Algo0x0D::selectPacketSize( + std::vector &output, + uint32_t preAccumulatedHorizontalOffsetValue, + uint32_t accumulatedHorizontalOffsetValue, + uint32_t currentHorizontalPenPosition, + uint32_t accumulatedRunCount, + uint32_t consecutiveBlankScanLines, + uint32_t currentVerticalPenPosition, + const uint32_t wrapWidth ) +{ + /* Set the initial vertical offset value. */ + int32_t verticalOffsetValue = consecutiveBlankScanLines; + + /* Set the initial horizontal offset value. */ + int32_t horizontalOffsetValue = accumulatedHorizontalOffsetValue; + + /* Verify if this is the first formed packet of the scan-line + and that it is not the first top-most scan-line of the given band. + Can be verified because on every beginning of a scan-line work, the + pre-accumulated horizontal offset value is zero. */ + if ( ( 0 == preAccumulatedHorizontalOffsetValue ) && + ( 0 < currentVerticalPenPosition ) ) { + /* Evaluate pixel distance between previous and current pen position + to find the relative horizontal offset value. */ + horizontalOffsetValue -= currentHorizontalPenPosition; + + /* Adjust by +1, when any of the previous scan-lines is not blank. */ + if ( consecutiveBlankScanLines < currentVerticalPenPosition ) { + verticalOffsetValue++; + } + + } else { + + /* Process a sequential packet for current scan-line. + The pre-accumulated offset value must be added, this was the + previous packet's run count value. */ + horizontalOffsetValue += preAccumulatedHorizontalOffsetValue; + + } + + /* Choosing the packet size. */ + if ( ( 127 >= horizontalOffsetValue ) + && ( -128 <= horizontalOffsetValue ) + && ( 63 >= accumulatedRunCount ) + && ( 1 >= verticalOffsetValue ) ) { + + /* Issue an encoded 2-byte packet. */ + writeTwoBytesPacket( output, + horizontalOffsetValue, + verticalOffsetValue, + accumulatedRunCount ); + + } else if ( ( 8191 >= horizontalOffsetValue ) + && ( -8192 <= horizontalOffsetValue ) + && ( 4095 >= accumulatedRunCount ) + && ( 3 >= verticalOffsetValue ) ) { + + /* Issue an encoded 4-byte packet. */ + writeFourBytesPacket( output, + horizontalOffsetValue, + verticalOffsetValue, + accumulatedRunCount ); + + } else { + + /* Issue an encoded 6-byte packet. */ + writeSixBytesPacket( output, + wrapWidth * verticalOffsetValue + + horizontalOffsetValue, + accumulatedRunCount ); + + } +} + + + +/* + * Main algorithm 0xd encoder. + */ +SP::Result> Algo0x0D::compress(const Request& request, std::span data, + uint32_t width, uint32_t height) +{ + /* Basic parameters validation. */ + if (data.empty() || !height || !width ) { + ERRORMSG(_("Invalid given data for compression: 0xd")); + return SP::Unexpected(SP::Error::InvalidArgument); + } + + /* Input sanitization: prevent absurd dimensions that could lead to overflow or resource exhaustion. */ + if (width > 65536 || height > 65536) { + ERRORMSG(_("Absurd dimensions for compression: %u x %u"), width, height); + return SP::Unexpected(SP::Error::InvalidArgument); + } + + /* We will interpret the band height of 128 pixels as 600 DPI printing + request. Likewise, height of 64 pixels as 300 DPI printing. */ + if ( ! ( 128 == height || 64 == height ) ) { + ERRORMSG(_("Invalid band height for compression: 0xd")); + return SP::Unexpected(SP::Error::InvalidArgument); + } + + /* Set the hardware wrapping width for six-byte type packet format. */ + const uint32_t wrapWidth = ( 64 == height ) ? 0x09A0 : 0x1360; + + /* These are the limits that an encoded scan-line is the allowed to produce + until encoding is given up. 250 bytes for 300 DPI, 122 bytes for 600 DPI.*/ + const uint32_t maxEncodedBytesPerScanLine = ( 64 == height ) ? + 250 : 122; + + /* Estimate a output buffer size limit equal to 256 bytes times the bitmap + height for 300 DPI printing, and 128 bytes times the bitmap height for + 600 DPI printing. */ + const uint32_t maximumBufferSize = ( 64 == height ) ? + 256 * height + 4: 128 * height + 4; + + /* Safety cap on buffer size (512MB) to prevent OOM attacks. */ + if (maximumBufferSize > 512 * 1024 * 1024) { + ERRORMSG(_("Compression buffer size exceeds safety limit: %u"), maximumBufferSize); + return SP::Unexpected(SP::Error::MemoryError); + } + + /* Create the output buffer for work. */ + std::vector output; + try { + output.reserve(maximumBufferSize); + } catch (const std::bad_alloc&) { + ERRORMSG(_("Failed to allocate compression buffer for 0xd")); + return SP::Unexpected(SP::Error::MemoryError); + } + + + /* Encoded data size of current scan-line. */ + uint32_t encodedScanLineSize = 0; + + /* Mask to track the bits in raw data-byte that is being processed. */ + uint8_t bitMask = 0x80; + + /* Accumulation of the number of (black) pixel runs. */ + uint32_t accumulatedRunCount = 0; + + /* Accumulation of horizontal offset value in pixels. */ + uint32_t accumulatedHorizontalOffsetValue = 0; + + /* Index for the raw data byte in the current scanline. */ + uint32_t rowByteIndex = 0; + + /* Current absolute horizontal pen position. */ + uint32_t currentHorizontalPenPosition = 0; + + /* Run counts are accounted for as an offset after each packet encodings. */ + uint32_t preAccumulatedHorizontalOffsetValue = 0; + + /* Current absolute vertical pen position. */ + uint32_t currentVerticalPenPosition = 0; + + /* Number of row-bytes in the bitmap. */ + const uint32_t rowBytes = ( width + 7 ) / 8; + + /* This is the working and therefore the effective printing width. + Crop the working width if bitmap is longer than wrap width. */ + const uint32_t workWidth = ( width > wrapWidth ) ? wrapWidth : width; + + /* Working width row-bytes. How many bytes need to store a working width + number of pixels. */ + const uint32_t workWidthRowBytes = ( workWidth + 7 ) / 8; + + /* Number of pixels left to be processed in the scanline. */ + uint32_t pixelsLeftInScanline = workWidth; + + /* Number of accumulated consecutive blank scanline. */ + uint32_t consecutiveBlankScanLines = 0; + + /* Current scanline view */ + std::span scanline = data; + /* Main encoding loop. */ + while (currentVerticalPenPosition < height) { + + // Lambda to scan consecutive bits of a specific value (set/unset) + auto scanConsecutiveBits = [&](bool targetValue) -> uint32_t { + uint32_t count = 0; + while (pixelsLeftInScanline > 0) { + if (rowByteIndex >= scanline.size()) { + pixelsLeftInScanline = 0; + break; + } + + const bool isSet = (scanline[rowByteIndex] & bitMask) != 0; + if (isSet != targetValue) { + break; + } + + // Bit matches target value + count++; + pixelsLeftInScanline--; + + // Advance bit mask and byte index + bitMask >>= 1; + if (bitMask == 0) { + bitMask = 0x80; + rowByteIndex++; + } + } + return count; + }; + + /* 1. Scan for the offset (consecutive white/unset pixels). */ + accumulatedHorizontalOffsetValue = scanConsecutiveBits(false); + + /* 2. Scan for the run (consecutive black/set pixels). */ + accumulatedRunCount = scanConsecutiveBits(true); + + /* 3. Handle the captured run/offset pair. */ + if (accumulatedHorizontalOffsetValue == workWidth && accumulatedRunCount == 0) { + /* This was an entirely blank scanline. */ + consecutiveBlankScanLines++; + } else if (accumulatedRunCount > 0) { + /* We have actual pixels to encode. */ + const size_t outputSizeBefore = output.size(); + + // Guard against buffer overflow (though reserved, we stay safe) + if (output.size() + 12 > maximumBufferSize) { + ERRORMSG(_("Compression buffer limit reached: 0xd")); + return SP::Unexpected(SP::Error::MemoryError); + } + + selectPacketSize(output, + preAccumulatedHorizontalOffsetValue, + accumulatedHorizontalOffsetValue, + currentHorizontalPenPosition, + accumulatedRunCount, + consecutiveBlankScanLines, + currentVerticalPenPosition, + wrapWidth); + + const uint32_t bytesProduced = static_cast(output.size() - outputSizeBefore); + encodedScanLineSize += bytesProduced; + + /* Check if this scanline's complexity exceeds the algorithm's density limit. */ + if (encodedScanLineSize > maxEncodedBytesPerScanLine) { + DEBUGMSG(_("Scanline too complex for 0xd (size=%u), giving up."), encodedScanLineSize); + return SP::Unexpected(SP::Error::LogicError); + } + + /* Reset the blank scanline counter since we've now hit a non-blank line. */ + consecutiveBlankScanLines = 0; + + /* Update the pen's horizontal tracking. */ + currentHorizontalPenPosition = workWidth - pixelsLeftInScanline - accumulatedRunCount; + + /* Update pre-accumulation for the next packet on this line. */ + preAccumulatedHorizontalOffsetValue = accumulatedRunCount; + } + + /* 4. Check if the scanline is finished. */ + if (pixelsLeftInScanline == 0) { + /* Advance to the next scanline. */ + if (++currentVerticalPenPosition < height) { + if (scanline.size() >= rowBytes) { + scanline = scanline.subspan(rowBytes); + } else { + scanline = {}; // Safety + } + } + + /* Reset scanline-specific counters. */ + encodedScanLineSize = 0; + rowByteIndex = 0; + bitMask = 0x80; + pixelsLeftInScanline = workWidth; + preAccumulatedHorizontalOffsetValue = 0; + } + + /* Ensure we don't carry over run/offset counts to the next iteration. */ + accumulatedRunCount = 0; + accumulatedHorizontalOffsetValue = 0; + } + + /* Zero value byte padding for data size alignment to 4-byte boundary. */ + uint32_t zerosPad = 4 - (static_cast(output.size()) % 4); + + /* Pad anyway even if already aligned. */ + if (zerosPad > 0 && zerosPad < 4) { + if (output.size() + zerosPad <= maximumBufferSize) { + output.insert(output.end(), zerosPad, 0); + } else { + ERRORMSG(_("No buffer during padding: 0xd")); + return SP::Unexpected(SP::Error::MemoryError); + } + } + + + /* Prepare to return data encoded by algorithm 0xd. */ + auto plane = std::make_unique(); + + plane->setData( std::move(output) ); + plane->setEndian( BandPlane::Endian::Dependant ); + plane->setCompression( 0xd ); + + /* Finished this band encoding. */ + DEBUGMSG(_("Finished band encoding: type=0xd, size=%zu"), plane->dataSize()); + + return plane; +} + diff --git a/src/algo0x0e.cpp b/src/algo0x0e.cpp index 8efbe75f..e28904a0 100644 --- a/src/algo0x0e.cpp +++ b/src/algo0x0e.cpp @@ -22,306 +22,295 @@ * This code is written by Leonardo Hamada */ #include "algo0x0e.h" -#include -#include +#include +#include +#include +#include +#include #include "errlog.h" #include "request.h" #include "printer.h" #include "bandplane.h" -#define getData(x) data[(x)] +// Replaced macros with direct calls or inline logic -#define setOutputData(y,z) output[(y)]=(z) -#define codecR(R, V, n) \ - addReplicativeRun(output, outputSize, R, V) -#define codecL(X, L, B, n) \ - addLiteralSequence(output, outputSize, data, X, L, B) - - - -/* - * Constructor - */ -Algo0x0E::Algo0x0E() -{ -} - -Algo0x0E::~Algo0x0E() -{ -} +// LIFECYCLE: Managed by compiler defaults in the header. inline void Algo0x0E::addLiteralSequence( - unsigned char * output, - unsigned long & outputSize, - unsigned char * data, - unsigned long position, - unsigned long length, - unsigned long blanks ) + std::vector &output, + std::span data, + uint32_t position, + uint32_t length, + uint32_t blanks ) { /* Set control value for the literal chunk length. */ - unsigned long tmp = length + blanks - 1; + uint32_t tmp = length + blanks - 1; - unsigned long w; - - output[ outputSize++ ] = 0x80 | (unsigned char)(tmp >> 8); - - output[ outputSize++ ] = (unsigned char)tmp; + output.push_back(0x80 | static_cast(tmp >> 8)); + output.push_back(static_cast(tmp)); /* Copy literal data chunk. */ - for(w=0;w 0) { + auto literalSource = data.subspan(position, length); + output.insert(output.end(), literalSource.begin(), literalSource.end()); } /* Pad with required blanks. */ - for(w=0;w 0) { + output.insert(output.end(), blanks, 0xff); } } inline void Algo0x0E::addReplicativeRun( - unsigned char * output, - unsigned long & outputSize, - unsigned long runs, - unsigned char value ) + std::vector &output, + uint32_t runs, + uint8_t value ) { /* Verify run numbers to choose appropriate control header. */ if ( 65 >= runs ) { - output[ outputSize++ ] = 0x7f & (unsigned char)(1L - runs); + output.push_back(0x7f & static_cast(1L - runs)); } else { - unsigned long t = 0xffff - runs + 2; - - output[ outputSize++ ] = (unsigned char)(t >> 8); + uint32_t t = 0xffff - runs + 2; - output[ outputSize++ ] = (unsigned char)t; + output.push_back(static_cast(t >> 8)); + output.push_back(static_cast(t)); } /* Set value to be replicated. */ - output[ outputSize++ ] = value; + output.push_back(value); } -/* Check if segment at 'e' position and forward can be encoded as - consecutive runs. 'L' limits the width of the seek. */ -unsigned long Algo0x0E::verifyGain(unsigned long e, - unsigned long L, - unsigned char * data) +/* + * Check if the segment starting at the beginning of 'data' can be encoded + * as consecutive runs with a positive encoding gain. + * Returns the gain in bytes. + */ +uint32_t Algo0x0E::verifyGain(std::span data) { - unsigned long g=0, u=1; - while(e+u=2){ - g+=(u<=65)?(u-2):(u-3); - if(g<2){ - e+=u; - if(e+1= 2) { + gain += (runLength <= 65) ? (runLength - 2) : (runLength - 3); + if (gain >= 2) { + return gain; } + e += runLength; + } else { + break; } } - return g; + return gain; } -unsigned long Algo0x0E::encodeReplications(unsigned long q, - unsigned long L, - unsigned char * data, - unsigned char * output, - unsigned long & outputSize) +/* + * Returns the new 'q' index after encoding as many replicative runs as possible. + */ +uint32_t Algo0x0E::encodeReplications(uint32_t q, uint32_t L, + std::span data, + std::vector &output) { - unsigned long r; - runs_enc: r=1; - while(q+r= 2) { + addReplicativeRun(output, r, data[q]); + q += r; + } else { break; } } - if(r>=2){ - codecR(r,getData(q),0); - q+=r; - goto runs_enc; - } return q; } -unsigned long Algo0x0E::locateBackwardReplications(unsigned long L, - unsigned char * data) +/* + * Seeks the beginning position of the last segment of the scan-line + * that can be encoded as contiguous replication runs. + */ +uint32_t Algo0x0E::locateBackwardReplications(std::span data) { - /* This must be signed.*/ - long int i=L-1, r; - seek_literal2: r=1; - while(i-r>=0){ - if(data[i-r+1]==data[i-r]){ + if (data.empty()) return 0; + + int32_t i = static_cast(data.size()) - 1; + while (i > 0) { + uint32_t r = 1; + while (i - static_cast(r) >= 0 && data[i - r + 1] == data[i - r]) { r++; - }else{ + } + if (r > 1) { + i = i - r; + } else { break; } } - if(r>1){ - i=i-r; - goto seek_literal2; - } - return i+1; + return static_cast(i + 1); } -BandPlane * Algo0x0E::compress(const Request & request, unsigned char *data, - unsigned long width, unsigned long height) +SP::Result> Algo0x0E::compress([[maybe_unused]] const Request & request, std::span data, + uint32_t width, uint32_t height) { /* Basic parameters validation. */ - if ( !data || !height || !width ) { + if ( data.empty() || !height || !width ) { ERRORMSG(_("Invalid given data for compression: 0xe")); - return NULL; + return SP::Unexpected(SP::Error::InvalidArgument); } - /* We will interpret the band heigth of 128 pixels as 600 DPI printing + /* Input sanitization: prevent absurd dimensions. */ + if (width > 65536 || height > 65536) { + ERRORMSG(_("Absurd dimensions for compression: %u x %u"), width, height); + return SP::Unexpected(SP::Error::InvalidArgument); + } + + /* We will interpret the band height of 128 pixels as 600 DPI printing request. Likewise, height of 64 pixels as 300 DPI printing. */ if ( ! ( 128 == height || 64 == height ) ) { ERRORMSG(_("Invalid band height for compression: 0xe")); - return NULL; + return SP::Unexpected(SP::Error::InvalidArgument); } /* The row-bytes of the bitmap. */ - const unsigned long rowBytes = ( width + 7 ) / 8; + const uint32_t rowBytes = ( width + 7 ) / 8; /* This is the allowed raw data size per scan-line. */ - const unsigned long maxWorkRb = ( 0x40 == height ) ? + const uint32_t maxWorkRb = ( 0x40 == height ) ? 0x09A0 / 8 : 0x1360 / 8; /* If rowBytes is larger than allowed size, print will be cropped. */ - const unsigned long workRb = ( rowBytes > maxWorkRb ) ? + const uint32_t workRb = ( rowBytes > maxWorkRb ) ? maxWorkRb : rowBytes; - unsigned char * output = NULL; + /* Pre-calculate maximum possible output size and verify safety limits. */ + const uint32_t estimatedOutSize = ( 2 + maxWorkRb ) * height + 3; + if (estimatedOutSize > 512 * 1024 * 1024) { + ERRORMSG(_("Compression buffer size exceeds safety limit: %u"), estimatedOutSize); + return SP::Unexpected(SP::Error::MemoryError); + } + std::vector output; try { /* Estimate a buffer size equal to 2-byte control header overhead + maxWorkRb, times the bitmap height + up to 3-byte padding at end. */ - output = new unsigned char[ ( 2 + maxWorkRb ) * height + 3 ]; - } catch( std::bad_alloc & ){ + output.reserve(estimatedOutSize); + } catch( const std::bad_alloc & ){ /* Catch error if buffer creation fails. */ ERRORMSG(_("Could not allocate work buffer for encoding: 0xe")); - return NULL; + return SP::Unexpected(SP::Error::MemoryError); } - /* Keep track of encoded data size. */ - unsigned long outputSize = 0; - /* Main encoding loop for each scan-line. Top to bottom scan-line processing. */ - while(true){ - /* - i: index into data. - F: last replication encodable marker. - E: resized WorkRb per scan-line. - B: blank paddings. - */ - unsigned long i, F, E, B; + for (uint32_t h = height; h > 0; --h) { + if (data.empty()) break; // Safety + + // Current scanline view + std::span currentData = data.subspan(0, std::min(workRb, data.size())); /* Adjust this working scan-line size up to where there is no blank bytes on the right end. */ - for(E=workRb;(E>0)&&(getData(E-1)==0xff);E--) - /* Empty statement. */ - ; + auto it = std::find_if(currentData.rbegin(), currentData.rend(), + [](uint8_t b) { return b != 0xff; }); + + uint32_t E = static_cast(std::distance(it, currentData.rend())); /* Determine the number of padding blank bytes to the right end of the scan-line relative to constant max. width. */ - B=maxWorkRb-E; + uint32_t B = maxWorkRb - E; /* If scan-line is not blank and the number of blank padding is not 1, seek the beginning position of the last scan-line segment, when it can be encoded as contiguous replication runs. */ - F=((E>0)&&(B!=1))?locateBackwardReplications(E,data):E; + uint32_t F = ((E > 0) && (B != 1)) ? locateBackwardReplications(currentData.subspan(0, E)) : E; /* Try to encode the first segment as replication runs. */ - i=(F>0)?encodeReplications(0,F,data,output,outputSize):0; + uint32_t i = (F > 0) ? encodeReplications(0, F, currentData, output) : 0; /* Continue to encode the rest of data as replication or literal segment chunks as appropriate. */ /* l: length of cumulative literal segment.*/ - unsigned long l=0; - while(i+l+1=2){ - codecL(i,l,0,1); - i=encodeReplications(i+l,F,data,output,outputSize); - l=0; - }else{ + } else { + if (verifyGain(currentData.subspan(i + l, F - (i + l))) >= 2) { + addLiteralSequence(output, currentData, i, l, 0); + i = encodeReplications(i + l, F, currentData, output); + l = 0; + } else { l++; } } } /* Encode last remaining segments and white paddings. */ - if(F=2){ - codecR(B,0xff,3); + if (B >= 2) { + addReplicativeRun(output, B, 0xff); } - }else{ + } else { /* When the end of non blank data of a scan-line does not end with replication runs, encode with literal sequence. */ - if(B>=2){ + if (B >= 2) { /* Encode previous literal segment that remains unencoded. */ - if(i0)||(i 0) || (i < E)) { /* Ends a scan-line encoding with a literal sequence with blanks if any. */ - codecL(i,E-i,B,6); + addLiteralSequence(output, currentData, i, E - i, B); } } - if( --height>0 ){ + if (h > 1) { /* Proceed to the next scan-line. */ - data = & data[ rowBytes ]; - }else{ - break; + data = data.subspan(std::min(rowBytes, data.size())); } } /* Zero value byte padding for data size alignment to 4-bytes bounds. */ - unsigned long zerosPad = 4 - ( outputSize % 4 ); + uint32_t zerosPad = 4 - (static_cast(output.size()) % 4); /* Check if it is already aligned. */ - if ( 4 > zerosPad ){ - while ( zerosPad-- ){ - output[ outputSize++ ] = 0; - } + if (zerosPad > 0 && zerosPad < 4) { + output.insert(output.end(), zerosPad, 0); } /* Prepare to return data encoded by algorithm 0xe. */ - BandPlane * plane = new BandPlane(); + auto plane = std::make_unique(); - /* Regsiter data and its size. */ - plane->setData( output, outputSize ); - plane->setEndian( BandPlane::Dependant ); + /* Register data and its size. */ + uint32_t finalSize = static_cast(output.size()); + plane->setData(std::move(output)); + plane->setEndian(BandPlane::Endian::Dependant); /* Set this band encoding type. */ - plane->setCompression( 0xe ); - DEBUGMSG(_("Finished band encoding: type=0xe, size=%lu"), outputSize); - /* Bye-bye. */ + plane->setCompression(0xe); + DEBUGMSG(_("Finished band encoding: type=0xe, size=%u"), finalSize); return plane; } + diff --git a/src/algo0x11.cpp b/src/algo0x11.cpp index 45c6a3e8..1e82ec63 100644 --- a/src/algo0x11.cpp +++ b/src/algo0x11.cpp @@ -19,8 +19,14 @@ * */ #include "algo0x11.h" -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include "bandplane.h" #include "errlog.h" @@ -30,182 +36,198 @@ * Fonctions locales * Local functions */ -int Algo0x11::__compare(const void *n1, const void *n2) -{ - // n2 and n1 has been exchanged since the first - // element of the array MUST be the biggest - return *(uint32_t *)n2 - *(uint32_t *)n1; -} +// Removed legacy __compare function -bool Algo0x11::_lookupBestOccurs(const unsigned char* data, unsigned long size) +SP::Result<> Algo0x11::_lookupBestOccurs(std::span data) { - uint32_t occurs[COMPRESS_SAMPLE_RATE][2]; - bool oneIsPresent = false; - unsigned char b; - unsigned long i; - - // Initialize the table - // occurs[i][0] = number of occurences of the offset - // occurs[i][1] = offset - for (i=0; i < COMPRESS_SAMPLE_RATE; i++) { - occurs[i][0] = 0; - occurs[i][1] = i; + struct Occurence { + uint32_t count; + uint32_t offset; + }; + + // Safety check: Don't process if data is too small for sampling + if (data.size() < Algo0x11::COMPRESS_SAMPLE_RATE) { + return {}; // Not an error, just can't optimize } - // Calculate the byte occurrence - for (i=COMPRESS_SAMPLE_RATE; i < size; i += COMPRESS_SAMPLE_RATE) { - b = data[i]; - for (unsigned long j=1; j < COMPRESS_SAMPLE_RATE; j++) - if (data[i - j] == b) - occurs[(j - 1)][0]++; - } + try { + std::vector occurs(Algo0x11::COMPRESS_SAMPLE_RATE); + bool oneIsPresent = false; + uint32_t size = static_cast(data.size()); + + // Initialize the table + for (uint32_t i=0; i < Algo0x11::COMPRESS_SAMPLE_RATE; i++) { + occurs[i] = {0, i}; + } + + // Calculate the byte occurrence + for (uint32_t i=Algo0x11::COMPRESS_SAMPLE_RATE; i < size; i += Algo0x11::COMPRESS_SAMPLE_RATE) { + uint8_t b = data[i]; + for (uint32_t j=1; j < Algo0x11::COMPRESS_SAMPLE_RATE; j++) { + if (data[i - j] == b) { + occurs[j - 1].count++; + } + } + } - // Order the array - qsort(occurs, COMPRESS_SAMPLE_RATE, sizeof(uint32_t)*2, __compare); + // Order the array (biggest first) + std::ranges::sort(occurs, [](const Occurence& a, const Occurence& b) { + return a.count > b.count; + }); - // Set the pointer table to use for compression - for (i=0; i < TABLE_PTR_SIZE; i++) { - _ptrArray[i] = occurs[i][1] + 1; - if (_ptrArray[i] == 1) - oneIsPresent = true; + // Set the pointer table to use for compression + for (uint32_t i=0; i < Algo0x11::TABLE_PTR_SIZE; i++) { + _ptrArray[i] = occurs[i].offset + 1; + if (_ptrArray[i] == 1) { + oneIsPresent = true; + } + } + // Append the value 1 which improves the compression of multiple same bytes + if (!oneIsPresent) { + _ptrArray[Algo0x11::TABLE_PTR_SIZE-1] = 1; + } + } catch (const std::bad_alloc&) { + return SP::Unexpected(SP::Error::MemoryError); } - // Append the value 1 which improves the compression of multiple same bytes - if (!oneIsPresent) - _ptrArray[TABLE_PTR_SIZE-1] = 1; - return true; + return {}; } -bool Algo0x11::_compress(const unsigned char *data, unsigned long size, - unsigned char* &output, unsigned long &outputSize) +SP::Result<> Algo0x11::_compress(std::span data, std::vector &output) { - unsigned long r, w=4, uncompSize=0, maxCompSize, bestCompCounter, bestPtr; - unsigned long rawDataCounter = 0, rawDataCounterPtr=0, maxOutputSize; - unsigned char *out; - - // Create the output buffer - maxOutputSize = size; - out = new unsigned char[maxOutputSize]; + uint32_t r=0, uncompSize=0, maxCompSize, bestCompCounter, bestPtr; + uint32_t rawDataCounter = 0, rawDataCounterPtr=0; + uint32_t size = static_cast(data.size()); + + // Create the output buffer with estimated size + output.clear(); + try { + output.reserve(size + (Algo0x11::TABLE_PTR_SIZE * 2) + 4); + output.resize(4); // placeholder for uncompSize + } catch (const std::bad_alloc&) { + return SP::Unexpected(SP::Error::MemoryError); + } // Print the table - for (unsigned long i=0; i < TABLE_PTR_SIZE; i++, w += 2) { - *(uint16_t *)(out + w) = (uint16_t)_ptrArray[i]; + for (uint32_t i=0; i < Algo0x11::TABLE_PTR_SIZE; i++) { + uint16_t ptrVal = static_cast(_ptrArray[i]); + output.push_back(static_cast(ptrVal & 0xFF)); + output.push_back(static_cast((ptrVal >> 8) & 0xFF)); if (_ptrArray[i] > uncompSize) uncompSize = _ptrArray[i]; } // Print the first uncompressed bytes - if (uncompSize > MAX_UNCOMPRESSED_BYTES) - uncompSize = MAX_UNCOMPRESSED_BYTES; - *(uint32_t *)out = (uint32_t)uncompSize; - for (r=0; r < uncompSize; r++, w++) - out[w] = data[r]; + if (uncompSize > Algo0x11::MAX_UNCOMPRESSED_BYTES) + uncompSize = Algo0x11::MAX_UNCOMPRESSED_BYTES; + + // Safety check: ensure r doesn't exceed data size + if (uncompSize > size) + uncompSize = size; + + // Correctly write uncompSize to the first 4 bytes + for (int i=0; i<4; ++i) { + output[i] = (uncompSize >> (i*8)) & 0xFF; + } + + for (r=0; r < uncompSize; r++) { + output.push_back(data[r]); + } // // Compress the data // + /* 6. Main compression loop. */ do { - maxCompSize = size - r > MAX_COMPRESSED_BYTES ? MAX_COMPRESSED_BYTES : - size - r; + const uint32_t remaining = size - r; + const uint32_t maxCompSize = std::min(remaining, Algo0x11::MAX_COMPRESSED_BYTES); - // End of the compression - if (!maxCompSize) { - if (rawDataCounter) - out[rawDataCounterPtr] = rawDataCounter - 1; + // a) End of the compression? + if (maxCompSize == 0) { + if (rawDataCounter > 0) { + output[rawDataCounterPtr] = static_cast(rawDataCounter - 1); + } break; + } + + // b) Try to find a match in the pointer table + bool matchFound = false; + if (maxCompSize >= 2) { + uint32_t bestCompCounter = 0; + uint32_t bestPtrIndex = 0; + + for (uint32_t i = 0; i < Algo0x11::TABLE_PTR_SIZE; i++) { + const uint32_t offset = _ptrArray[i]; + if (offset > r) { + continue; + } - // Try to compress the next piece of data - } else if (maxCompSize >= 2) { - bestCompCounter = 0; - bestPtr = 0; - - // Check if there is enough space - if (w + 2 >= maxOutputSize) { - w += 2; - break; - } + // Check how many bytes match at this offset + const uint32_t rTmp = r - offset; + uint32_t counter = 0; + while (counter < maxCompSize && data[r + counter] == data[rTmp + counter]) { + counter++; + } - // Check the best similar piece of data - for (unsigned long i=0; i < TABLE_PTR_SIZE; i++) { - unsigned long rTmp, counter; - - if (_ptrArray[i] > r) - continue; - rTmp = r - _ptrArray[i]; - for (counter = 0; counter < maxCompSize; counter++) - if (data[r + counter] != data[rTmp + counter]) - break; if (counter > bestCompCounter) { bestCompCounter = counter; - bestPtr = i; + bestPtrIndex = i; } } - // If the reproduced piece is large enough, use it! - if (bestCompCounter > MIN_COMPRESSED_BYTES) { - r += bestCompCounter; - bestCompCounter -= 3; - out[w] = COMPRESSION_FLAG | (bestCompCounter & 0x7F); - out[w+1] = ((bestCompCounter >> 1) & 0xC0) | (bestPtr & 0x3F); - w += 2; - if (rawDataCounter) { - out[rawDataCounterPtr] = rawDataCounter - 1; + // If the match is large enough (e.g. > 1 byte saved), use it! + if (bestCompCounter > Algo0x11::MIN_COMPRESSED_BYTES) { + matchFound = true; + + // Finalize any pending raw data chunk + if (rawDataCounter > 0) { + output[rawDataCounterPtr] = static_cast(rawDataCounter - 1); rawDataCounter = 0; } - continue; + + r += bestCompCounter; + // Encoding format: flag bit | (count-adj) + const uint32_t encodedCount = bestCompCounter - (Algo0x11::MIN_COMPRESSED_BYTES + 1); + output.push_back(Algo0x11::COMPRESSION_FLAG | (encodedCount & 0x7F)); + output.push_back(((encodedCount >> 1) & 0xC0) | (bestPtrIndex & 0x3F)); } } - // Else write the uncompressed data - rawDataCounter++; - if (rawDataCounter == 1) { - // Check if there is enough space - if (w + 2 >= maxOutputSize) { - w += 2; - break; + // c) If no match, write it as a literal (uncompressed) byte + if (!matchFound) { + if (rawDataCounter == 0) { + rawDataCounterPtr = static_cast(output.size()); + output.push_back(0); // Placeholder for count + } + + output.push_back(data[r]); + r++; + rawDataCounter++; + + if (rawDataCounter == Algo0x11::MAX_UNCOMPRESSED_BYTES) { + output[rawDataCounterPtr] = 0x7F; // Max literal flag + rawDataCounter = 0; } - rawDataCounterPtr = w; - w++; - } else if (rawDataCounter == MAX_UNCOMPRESSED_BYTES) { - out[rawDataCounterPtr] = 0x7F; - rawDataCounter = 0; } - out[w] = data[r]; - w++; - r++; - } while (w < maxOutputSize); + } while (r < size); - // Does the compression finished without any error? - if (w >= maxOutputSize) { + // Safety check: if compressed output exceeds input size, compression has + // expanded the data. The original driver used a fixed buffer of input size + // and returned false on overflow. Match that behavior to protect printer + // firmware decompressors that may have fixed receive buffers. + if (output.size() >= data.size()) { ERRORMSG(_("No more space available in the output buffer for " "compression")); - delete[] out; - return false; + return SP::Unexpected(SP::Error::CompressionError); } - // Copy the buffer in a best buffer - outputSize = w; - output = new unsigned char[outputSize]; - memcpy(output, out, outputSize); - delete[] out; - - return true; + return {}; } -/* - * Constructeur - Destructeur - * Init - Uninit - */ -Algo0x11::Algo0x11() -{ -} - -Algo0x11::~Algo0x11() -{ -} +// LIFECYCLE: Managed by compiler defaults in the header. @@ -213,32 +235,54 @@ Algo0x11::~Algo0x11() * Routine de compression * Compression routine */ -BandPlane* Algo0x11::compress(const Request& request, unsigned char *data, - unsigned long width, unsigned long height) +SP::Result> Algo0x11::compress([[maybe_unused]] const Request& request, std::span data, + uint32_t width, uint32_t height) { - unsigned long outputSize, size = width * height / 8; - unsigned char *output; - BandPlane *plane; + // Input sanitization + if (width > 32768 || height > 32768 || width == 0 || height == 0) { + ERRORMSG(_("Invalid raster dimensions for Algo0x11: %ux%u"), width, height); + return SP::Unexpected(SP::Error::InvalidArgument); + } + + uint64_t expectedSize = (static_cast(width) * height) / 8; + if (data.size() < expectedSize) { + ERRORMSG(_("Input data too small for Algo0x11: got %zu, expected %llu"), data.size(), (unsigned long long)expectedSize); + return SP::Unexpected(SP::Error::InvalidArgument); + } - if (!data || !size) { + // Safety limit on output size (512MB) + if (expectedSize > 512 * 1024 * 1024) { + ERRORMSG(_("Output size too large for security safety (0x11)")); + return SP::Unexpected(SP::Error::MemoryError); + } + + if (data.empty()) { ERRORMSG(_("Invalid given data for compression (0x11)")); - return NULL; + return SP::Unexpected(SP::Error::InvalidArgument); } // Lookup for the best occurs - if (!_lookupBestOccurs(data, size) || - !_compress(data, size, output, outputSize)) { - return NULL; + auto lookupRes = _lookupBestOccurs(data); + if (!lookupRes) { + return SP::Unexpected(lookupRes.error()); + } + + std::vector output; + auto compressRes = _compress(data, output); + if (!compressRes) { + return SP::Unexpected(compressRes.error()); } // Register the result into a band plane - plane = new BandPlane(); - plane->setData(output, outputSize); - plane->setEndian(BandPlane::Dependant); + auto plane = std::make_unique(); + const size_t outputSize = output.size(); + plane->setData(std::move(output)); + plane->setEndian(BandPlane::Endian::Dependant); plane->setCompression(0x11); + DEBUGMSG(_("Finished band encoding: type=0x11, size=%zu"), outputSize); + return plane; } /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ - diff --git a/src/algo0x13.cpp b/src/algo0x13.cpp index d93a4fda..46d03fbc 100644 --- a/src/algo0x13.cpp +++ b/src/algo0x13.cpp @@ -19,7 +19,14 @@ * */ #include "algo0x13.h" -#include +#include +#include +#include +#include +#include +#include +#include +#include #include "errlog.h" #include "request.h" #include "printer.h" @@ -33,146 +40,133 @@ */ void Algo0x13::_callback(unsigned char *data, size_t len, void *arg) { - info_t* info = (info_t *)arg; + auto* info = static_cast(arg); if (!len) return; // It's the first BIH - if (!info->last) { - bandList_t* bandList; - unsigned char *tmp; - - tmp = new unsigned char[len]; - bandList = new bandList_t; - memcpy(tmp, data, len); - bandList->band = new BandPlane(); - bandList->band->setData(tmp, len); - bandList->band->setEndian(BandPlane::BigEndian); - bandList->band->setCompression(0x13); - bandList->next = NULL; - *(info->list) = bandList; - info->last = bandList; + if (info->list->empty()) { + std::vector bih(data, data + len); + auto plane = std::make_unique(); + plane->setData(std::move(bih)); + plane->setEndian(BandPlane::Endian::BigEndian); + plane->setCompression(0x13); + info->list->push_back(std::move(plane)); if (len != 20) - ERRORMSG(_("the first BIG *MUST* be 20 bytes long (currently=%zu"), - len); - info->data = NULL; - info->size = 0; - - // Register the BIH + ERRORMSG(_("the first BIH *MUST* be 20 bytes long (currently={})"), len); } else { - while (len) { - unsigned long freeSpace, toCopy; - + while (len > 0) { // Full band: register it - if (info->size == info->maxSize) { - bandList_t* bandList; - - bandList = new bandList_t; - bandList->band = new BandPlane(); - bandList->band->setData(info->data, info->size); - bandList->band->setEndian(BandPlane::BigEndian); - bandList->band->setCompression(0x13); - bandList->next = NULL; - info->last->next = bandList; - info->last = bandList; - info->data = NULL; - info->size = 0; + if (!info->currentData.empty() && info->currentData.size() == info->maxSize) { + auto plane = std::make_unique(); + plane->setData(std::move(info->currentData)); + plane->setEndian(BandPlane::Endian::BigEndian); + plane->setCompression(0x13); + info->list->push_back(std::move(plane)); + info->currentData.clear(); } - // Allocate a new data buffer if needed - if (!info->data) - info->data = new unsigned char[info->maxSize]; - - // Register data - freeSpace = info->maxSize - info->size; - toCopy = freeSpace < len ? freeSpace : len; - memcpy(info->data + info->size, data, toCopy); - info->size += toCopy; + // Collect data + uint32_t freeSpace = info->maxSize - static_cast(info->currentData.size()); + uint32_t toCopy = std::min(freeSpace, static_cast(len)); + + size_t oldSize = info->currentData.size(); + info->currentData.resize(oldSize + toCopy); + std::ranges::copy(std::span(data, toCopy), info->currentData.begin() + oldSize); + data += toCopy; len -= toCopy; } } } +// LIFECYCLE: Managed by compiler defaults in the header. +#endif /* DISABLE_JBIG */ - -/* - * Constructeur - Destructeur - * Init - Uninit - */ -Algo0x13::Algo0x13() -{ - _compressed = false; - _list = NULL; -} - -Algo0x13::~Algo0x13() -{ -} - - - +#ifndef DISABLE_JBIG /* * Routine de compression * Compression routine */ -BandPlane* Algo0x13::compress(const Request& request, unsigned char *data, - unsigned long width, unsigned long height) +SP::Result> Algo0x13::compress(const Request& request, std::span data, + uint32_t width, uint32_t height) { jbg85_enc_state state; - unsigned long i, wbytes; - info_t info = {&_list, NULL, NULL, 0, 0}; - BandPlane *plane; - bandList_t* tmp; + uint32_t i, wbytes; + info_t info = {&_list, {}, 0}; + + if (width > 32768 || height > 32768 || width == 0 || height == 0) { + ERRORMSG(_("Invalid raster dimensions for Algo0x13: %ux%u"), width, height); + return SP::Unexpected(SP::Error::InvalidArgument); + } - if (!data || !width || !height) { + if (data.empty()) { ERRORMSG(_("Invalid given data for compression (0x13)")); - return NULL; + return SP::Unexpected(SP::Error::InvalidArgument); } // Compress if it's the first time if (!_compressed) { - info.maxSize = request.printer()->packetSize(); + if (!request.printer()) { + return SP::Unexpected(SP::Error::InvalidArgument); + } + + info.maxSize = static_cast(request.printer()->packetSize()); if (!info.maxSize) { ERRORMSG(_("PacketSize is set to 0!")); info.maxSize = 512*1024; } + + // Defensive check: prevent overflow in wbytes calculation + if (width > 0x1FFFFFFF) { + return SP::Unexpected(SP::Error::RasterDimensionTooLarge); + } wbytes = (width + 7) / 8; + + // Ensure data span is large enough + if (data.size() < static_cast(wbytes) * height) { + ERRORMSG(_("Data span too small for dimensions: %zu < %u*%u"), + data.size(), wbytes, height); + return SP::Unexpected(SP::Error::InvalidArgument); + } + jbg85_enc_init(&state, width, height, _callback, &info); jbg85_enc_options(&state, JBG_LRLTWO | JBG_TPBON, height, 0); - for (i = 0; i < height; i++) { + + for (uint32_t i = 0; i < height; i++) { + const size_t rowOffset = static_cast(i) * wbytes; + const uint8_t* curr = &data[rowOffset]; + const uint8_t* prev = (i > 0) ? &data[rowOffset - wbytes] : nullptr; + const uint8_t* prev2 = (i > 1) ? &data[rowOffset - (2 * wbytes)] : nullptr; + jbg85_enc_lineout(&state, - data + i * wbytes, - data + (i - 1) * wbytes, - data + (i - 2) * wbytes); + const_cast(curr), + const_cast(prev), + const_cast(prev2)); } // Register the last band - if (info.size) { - bandList_t* bandList; - - bandList = new bandList_t; - bandList->band = new BandPlane(); - bandList->band->setData(info.data, info.size); - bandList->band->setEndian(BandPlane::BigEndian); - bandList->band->setCompression(0x13); - bandList->next = NULL; - info.last->next = bandList; + if (!info.currentData.empty()) { + auto plane = std::make_unique(); + plane->setData(std::move(info.currentData)); + plane->setEndian(BandPlane::Endian::BigEndian); + plane->setCompression(0x13); + _list.push_back(std::move(plane)); } _compressed = true; } - if (!_list) - return NULL; - tmp = _list; - plane = tmp->band; - _list = _list->next; - delete tmp; + if (_list.empty()) { + ERRORMSG(_("Algo0x13 list empty after compression")); + return SP::Unexpected(SP::Error::LogicError); + } + + auto plane = std::move(_list.front()); + _list.pop_front(); return plane; } #endif /* DISABLE_JBIG */ /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ - diff --git a/src/algo0x15.cpp b/src/algo0x15.cpp index b498b4f9..5a067c8a 100644 --- a/src/algo0x15.cpp +++ b/src/algo0x15.cpp @@ -22,7 +22,11 @@ * */ #include "algo0x15.h" -#include +#include +#include +#include +#include +#include #include "errlog.h" #include "request.h" #include "printer.h" @@ -40,28 +44,27 @@ extern "C" { */ void Algo0x15::_callback(unsigned char *data, size_t data_len, void *arg) { - Algo0x15 *compressor = (Algo0x15 *)arg; + Algo0x15 *compressor = static_cast(arg); if (!data_len) { compressor->_error = true; return; } - if ((!compressor->_has_bih) && (0 == compressor->_size)) { + if ((!compressor->_has_bih) && compressor->_data.empty()) { if (20 != data_len) { ERRORMSG(_("Expected 20 bytes from BIH (0x15)")); compressor->_error = true; return; } - memcpy(compressor->_bih, data, 20); + std::ranges::copy(std::span(data, 20), compressor->_bih.begin()); compressor->_has_bih = true; } else { - unsigned long freeSpace = compressor->_maxSize - compressor->_size; - if (data_len > freeSpace) { + if (compressor->_data.size() + data_len > compressor->_maxSize) { ERRORMSG(_("Insufficient buffer space to store BIE (0x15)")); compressor->_error = true; + compressor->_errorCode = SP::Error::CompressionError; return; } - memcpy(compressor->_data + compressor->_size, data, data_len); - compressor->_size += data_len; + compressor->_data.insert(compressor->_data.end(), data, data + data_len); } } @@ -71,18 +74,9 @@ void Algo0x15::_callback(unsigned char *data, size_t data_len, void *arg) */ Algo0x15::Algo0x15() { - _has_bih = false; - _data = NULL; - _size = 0; - _maxSize = 0; - _error = false; } -Algo0x15::~Algo0x15() -{ - if (_data) - delete [] _data; -} +// Destructor is defaulted in header /* * Routine de compression @@ -93,56 +87,93 @@ Algo0x15::~Algo0x15() * Assumes compressed band data fits in the space specified * in the printer PPD file: QPDL PacketSize: "512", specifies 512 Kbytes limit. */ -BandPlane* Algo0x15::compress(const Request& request, unsigned char *data, - unsigned long width, unsigned long height) +SP::Result> Algo0x15::compress([[maybe_unused]] const Request& request, + std::span data, uint32_t width, + uint32_t height) { - #define MAX_SIZE 512 * 1024 - BandPlane *plane; + const uint32_t MAX_SIZE_LIMIT = 512 * 1024; jbg85_enc_state state; - unsigned long wbytes; - if (!data || !width || !height) { + uint32_t wbytes; + + // Input sanitization + if (width > 32768 || height > 32768 || width == 0 || height == 0) { + ERRORMSG(_("Invalid raster dimensions for Algo0x15: %ux%u"), width, height); + return SP::Unexpected(SP::Error::InvalidArgument); + } + + if (data.empty()) { ERRORMSG(_("Invalid given data for compression (0x15)")); - return NULL; + return SP::Unexpected(SP::Error::InvalidArgument); + } + + _has_bih = false; + _data.clear(); + _error = false; + _errorCode = SP::Error::None; + + if (0 == _maxSize) { + if (!request.printer()) { + return SP::Unexpected(SP::Error::InvalidArgument); + } + _maxSize = static_cast(request.printer()->packetSize()); } - if (_has_bih) - _has_bih = false; - if (_size) - _size = 0; - if (_error) - _error = false; - if (0 == _maxSize) - _maxSize = request.printer()->packetSize(); - if ((!_maxSize) || (_maxSize > MAX_SIZE)) { - ERRORMSG(_("PacketSize is set to %luBytes! Reset to %dBytes."), - _maxSize, MAX_SIZE); - _maxSize = MAX_SIZE; + + if ((!_maxSize) || (_maxSize > MAX_SIZE_LIMIT)) { + ERRORMSG(_("PacketSize is set to %u Bytes! Reset to %u Bytes."), + _maxSize, MAX_SIZE_LIMIT); + _maxSize = MAX_SIZE_LIMIT; + } + + try { + _data.reserve(_maxSize); + } catch (const std::bad_alloc&) { + return SP::Unexpected(SP::Error::MemoryError); + } + + // Defensive check: prevent overflow in wbytes calculation + if (width > 0x1FFFFFFF) { + return SP::Unexpected(SP::Error::RasterDimensionTooLarge); } - if (NULL == _data) - _data = new unsigned char[_maxSize]; wbytes = (width + 7) / 8; + + // Ensure data span is large enough + if (data.size() < static_cast(wbytes) * height) { + ERRORMSG(_("Data span too small for dimensions: %zu < %u*%u"), + data.size(), wbytes, height); + return SP::Unexpected(SP::Error::InvalidArgument); + } + jbg85_enc_init(&state, width, height, _callback, this); jbg85_enc_options(&state, JBG_LRLTWO, height, 0); - for (unsigned long i = 0; i < height; i++) { + for (uint32_t i = 0; i < height; i++) { + const uint8_t* curr = &data[i * wbytes]; + const uint8_t* prev = (i > 0) ? &data[(i - 1) * wbytes] : nullptr; + const uint8_t* prev2 = (i > 1) ? &data[(i - 2) * wbytes] : nullptr; + + /* JBIG85 C API requires non-const pointers; we cast here as we manage + the buffer lifecycle during this call. */ jbg85_enc_lineout(&state, - data + i * wbytes, - data + (i - 1) * wbytes, - data + (i - 2) * wbytes); + const_cast(curr), + const_cast(prev), + const_cast(prev2)); + + if (_error) { + break; + } + } + + if (_error) { + return SP::Unexpected(_errorCode != SP::Error::None ? _errorCode : SP::Error::LogicError); } - if (_error) - return NULL; - unsigned char *final_data = new unsigned char[_size]; - memcpy(final_data, _data, _size); - plane = new BandPlane(); + + auto plane = std::make_unique(); plane->setCompression(0x15); - plane->setEndian(BandPlane::BigEndian); - plane->setData(final_data, _size); + plane->setEndian(BandPlane::Endian::BigEndian); + plane->setData(std::move(_data)); + /* Finished encoding of this band. */ - DEBUGMSG(_("Band encoded with type=0x15, size=%lu"), _size); - /* Clean up. */ - _has_bih = false; - _size = 0; - if (_error) - _error = false; + DEBUGMSG(_("Band encoded with type=0x15, size=%zu"), plane->dataSize()); + return plane; } diff --git a/src/band.cpp b/src/band.cpp index e8f7633b..bb7a9be3 100644 --- a/src/band.cpp +++ b/src/band.cpp @@ -19,88 +19,72 @@ * */ #include "band.h" -#include +#include "sp_portable.h" #include "errlog.h" #include "bandplane.h" +#include "page.h" /* * Constructeur - Destructeur * Init - Uninit */ -Band::Band() -{ - _bandNr = 0; - _colors = 0; - _parent = NULL; - _planes[0] = NULL; - _planes[1] = NULL; - _planes[2] = NULL; - _planes[3] = NULL; - _width = 0; - _height = 0; - _sibling = NULL; -} +Band::Band() = default; +Band::Band (uint32_t nr, uint32_t width, uint32_t height) + : _bandNr(nr), _width(width), _height(height) {} +Band::~Band() = default; -Band::Band(unsigned long nr, unsigned long width, unsigned long height) -{ - _colors = 0; - _parent = NULL; - _planes[0] = NULL; - _planes[1] = NULL; - _planes[2] = NULL; - _planes[3] = NULL; - _sibling = NULL; - _bandNr = nr; - _width = width; - _height = height; -} -Band::~Band() +void Band::registerPlane(std::unique_ptr plane) { - for (unsigned int i=0; i < _colors; i++) - delete _planes[i]; - if (_sibling) - delete _sibling; + if (_planes.size() < 4) { + _planes.push_back(std::move(plane)); + } } - /* * Mise sur disque / Rechargement * Swapping / restoring */ -bool Band::swapToDisk(int fd) +SP::Result<> Band::swapToDisk(int fd) { - write(fd, &_bandNr, sizeof(_bandNr)); - write(fd, &_colors, sizeof(_colors)); - write(fd, &_width, sizeof(_width)); - write(fd, &_height, sizeof(_height)); - for (unsigned int i=0; i < _colors; i++) - if (!_planes[i]->swapToDisk(fd)) - return false; - return true; + uint32_t colors = static_cast(_planes.size()); + if (write(fd, &_bandNr, sizeof(_bandNr)) == -1) return SP::Unexpected(SP::Error::IOError); + if (write(fd, &colors, sizeof(colors)) == -1) return SP::Unexpected(SP::Error::IOError); + if (write(fd, &_width, sizeof(_width)) == -1) return SP::Unexpected(SP::Error::IOError); + if (write(fd, &_height, sizeof(_height)) == -1) return SP::Unexpected(SP::Error::IOError); + + for (auto &plane : _planes) { + auto res = plane->swapToDisk(fd); + if (!res) return res; + } + return {}; } -Band* Band::restoreIntoMemory(int fd) +SP::Result> Band::restoreIntoMemory(int fd) { - unsigned char colors; - Band* band; + uint32_t colors = 0; + auto band = std::make_unique(); + + if (read(fd, &band->_bandNr, sizeof(band->_bandNr)) <= 0) return SP::Unexpected(SP::Error::IOError); + if (read(fd, &colors, sizeof(colors)) <= 0) return SP::Unexpected(SP::Error::IOError); + if (read(fd, &band->_width, sizeof(band->_width)) <= 0) return SP::Unexpected(SP::Error::IOError); + if (read(fd, &band->_height, sizeof(band->_height)) <= 0) return SP::Unexpected(SP::Error::IOError); + + // Safety check: SpliX supports up to 4 colors (CMYK) + if (colors > 4) { + return SP::Unexpected(SP::Error::InconsistentData); + } - band = new Band(); - read(fd, &band->_bandNr, sizeof(band->_bandNr)); - read(fd, &colors, sizeof(colors)); - read(fd, &band->_width, sizeof(band->_width)); - read(fd, &band->_height, sizeof(band->_height)); - for (unsigned int i=0; i < colors; i++) { - BandPlane *plane = BandPlane::restoreIntoMemory(fd); - if (!plane) { - delete band; - return NULL; + for (uint32_t i = 0; i < colors; i++) { + auto res = BandPlane::restoreIntoMemory(fd); + if (!res) { + return SP::Unexpected(res.error()); } - band->registerPlane(plane); + band->registerPlane(std::move(res.value())); } - return band; + return std::move(band); } /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ diff --git a/src/bandplane.cpp b/src/bandplane.cpp index 93bec114..0c90ace9 100644 --- a/src/bandplane.cpp +++ b/src/bandplane.cpp @@ -19,42 +19,24 @@ * */ #include "bandplane.h" -#include +#include "sp_portable.h" +#include /* * Constructeur - Destructeur * Init - Uninit */ -BandPlane::BandPlane() -{ - _endian = Dependant; - _size = 0; - _data = NULL; -} - -BandPlane::~BandPlane() -{ - if (_data) - delete[] _data; -} +// LIFECYCLE: Standard constructors and destructors are defaulted in the header via member initializers. /* * Enregistrement des données * Set data */ -void BandPlane::setData(unsigned char *data, unsigned long size) +void BandPlane::setData(std::vector data) { - if (!data) - size = 0; - if (_data) - delete[] _data; - - _data = data; - _size = size; - _checksum = 0; - for (unsigned int i=0; i < _size; i++) - _checksum += (unsigned char)_data[i]; + _data = std::move(data); + _checksum = std::accumulate(_data.begin(), _data.end(), 0U); } @@ -63,34 +45,76 @@ void BandPlane::setData(unsigned char *data, unsigned long size) * Mise sur disque / Rechargement * Swapping / restoring */ -bool BandPlane::swapToDisk(int fd) +namespace { + /** + * @brief Helper for robustly writing a fixed-size buffer. + */ + bool writeAll(int fd, const void* data, size_t size) noexcept { + const uint8_t* ptr = static_cast(data); + while (size > 0) { + ssize_t written = write(fd, ptr, size); + if (written <= 0) return false; + ptr += written; + size -= written; + } + return true; + } + + /** + * @brief Helper for robustly reading a fixed-size buffer. + */ + bool readAll(int fd, void* data, size_t size) noexcept { + uint8_t* ptr = static_cast(data); + while (size > 0) { + ssize_t bytesRead = read(fd, ptr, size); + if (bytesRead <= 0) return false; + ptr += bytesRead; + size -= bytesRead; + } + return true; + } +} + +SP::Result<> BandPlane::swapToDisk(int fd) { - write(fd, &_colorNr, sizeof(_colorNr)); - write(fd, &_size, sizeof(_size)); - write(fd, _data, _size); - write(fd, &_checksum, sizeof(_checksum)); - write(fd, &_endian, sizeof(_endian)); - write(fd, &_compression, sizeof(_compression)); - return true; + const size_t size = _data.size(); + + if (!writeAll(fd, &_colorNr, sizeof(_colorNr))) return SP::Unexpected(SP::Error::IOError); + if (!writeAll(fd, &size, sizeof(size))) return SP::Unexpected(SP::Error::IOError); + if (!writeAll(fd, _data.data(), size)) return SP::Unexpected(SP::Error::IOError); + if (!writeAll(fd, &_checksum, sizeof(_checksum))) return SP::Unexpected(SP::Error::IOError); + if (!writeAll(fd, &_endian, sizeof(_endian))) return SP::Unexpected(SP::Error::IOError); + if (!writeAll(fd, &_compression, sizeof(_compression))) return SP::Unexpected(SP::Error::IOError); + + return {}; } -BandPlane* BandPlane::restoreIntoMemory(int fd) +SP::Result> BandPlane::restoreIntoMemory(int fd) { - unsigned char* data; - BandPlane* plane; + auto plane = std::make_unique(); + size_t size = 0; - plane = new BandPlane(); - read(fd, &plane->_colorNr, sizeof(plane->_colorNr)); - read(fd, &plane->_size, sizeof(plane->_size)); - data = new unsigned char[plane->_size]; - read(fd, data, plane->_size); - plane->_data = data; - read(fd, &plane->_checksum, sizeof(plane->_checksum)); - read(fd, &plane->_endian, sizeof(plane->_endian)); - read(fd, &plane->_compression, sizeof(plane->_compression)); + if (!readAll(fd, &plane->_colorNr, sizeof(plane->_colorNr))) return SP::Unexpected(SP::Error::IOError); + if (!readAll(fd, &size, sizeof(size))) return SP::Unexpected(SP::Error::IOError); + + // Safety check: 512MB cap for cached planes + if (size > 1024 * 1024 * 512) { + return SP::Unexpected(SP::Error::InconsistentData); + } + + try { + plane->_data.resize(size); + } catch (const std::bad_alloc&) { + return SP::Unexpected(SP::Error::MemoryError); + } + + if (!readAll(fd, plane->_data.data(), size)) return SP::Unexpected(SP::Error::IOError); + + if (!readAll(fd, &plane->_checksum, sizeof(plane->_checksum))) return SP::Unexpected(SP::Error::IOError); + if (!readAll(fd, &plane->_endian, sizeof(plane->_endian))) return SP::Unexpected(SP::Error::IOError); + if (!readAll(fd, &plane->_compression, sizeof(plane->_compression))) return SP::Unexpected(SP::Error::IOError); return plane; } /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ - diff --git a/src/cache.cpp b/src/cache.cpp index d31b57f0..e0f7d709 100644 --- a/src/cache.cpp +++ b/src/cache.cpp @@ -19,15 +19,23 @@ * */ #ifndef DISABLE_THREADS +#include +#include +#include +#include +#include +#include "sp_semaphore.h" +#include "sp_result.h" + #include "cache.h" #include #include -#include +#include "sp_portable.h" #include #include #include "page.h" #include "errlog.h" -#include "semaphore.h" +#include /* * Variables internes @@ -35,27 +43,27 @@ */ // Cache controller thread variables static CachePolicy _policy = EveryPagesIncreasing; -static bool _stopCacheControllerThread = false; -static pthread_t _cacheThread; -static Semaphore _work(0); +static std::jthread _cacheThread; +static SP::Semaphore _work(0); // Page request variables static unsigned long _lastPageRequested = 0, _pageRequested = 0; -static Semaphore _pageAvailable(0); +static SP::Semaphore _pageAvailable(0); // Document information -static unsigned long _numberOfPages = 0; +static uint32_t _numberOfPages = 0; +static bool _pageLimitKnown = false; // Cache variables -static CacheEntry *_waitingList=NULL, *_lastWaitingList=NULL; -static Semaphore _waitingListLock; -static unsigned long _maxPagesInTable = 0, _pagesInTable = 0; -static CacheEntry **_pages = NULL; -static Semaphore _pageTableLock; +static CacheEntry *_waitingList = nullptr, *_lastWaitingList = nullptr; +static std::mutex _waitingListLock; +static uint32_t _pagesInTable = 0; +static std::vector> _pages; +static std::mutex _pageTableLock; // Cache in memory variables -static CacheEntry *_inMemory = NULL, *_inMemoryLast = NULL; -static unsigned long _pagesInMemory = 0; +static CacheEntry *_inMemory = nullptr, *_inMemoryLast = nullptr; +static uint32_t _pagesInMemory = 0; @@ -66,11 +74,11 @@ static unsigned long _pagesInMemory = 0; static void __registerIntoCacheList(CacheEntry *entry, bool swapLast) { unsigned long pageNr; - CacheEntry *tmp=NULL; + CacheEntry *tmp = nullptr; if (!_inMemory) { - entry->setNext(NULL); - entry->setPrevious(NULL); + entry->setNext(nullptr); + entry->setPrevious(nullptr); _inMemory = entry; _inMemoryLast = entry; _pagesInMemory = 1; @@ -112,7 +120,12 @@ static void __registerIntoCacheList(CacheEntry *entry, bool swapLast) // Register the new entry if (swapLast && tmp == _inMemoryLast) { - entry->swapToDisk(); + auto res = entry->swapToDisk(); + if (!res) { + ERRORMSG(_("Failed to swap page %lu to disk: %s"), + static_cast(entry->page()->pageNr()), + SP::to_string(res.error()).data()); + } swapLast = false; } else { if (!tmp) { @@ -137,14 +150,20 @@ static void __registerIntoCacheList(CacheEntry *entry, bool swapLast) if (swapLast) { tmp = _inMemoryLast; _inMemoryLast = tmp->previous(); - tmp->previous()->setNext(NULL); - tmp->swapToDisk(); + if (tmp->previous()) + tmp->previous()->setNext(nullptr); + auto res = tmp->swapToDisk(); + if (!res) { + ERRORMSG(_("Failed to swap page %lu to disk: %s"), + static_cast(tmp->page()->pageNr()), + SP::to_string(res.error()).data()); + } } } static void __manageMemoryCache(CacheEntry *entry) { - _pageTableLock.lock(); + std::lock_guard lock(_pageTableLock); // Append an entry if (entry) { @@ -157,7 +176,7 @@ static void __manageMemoryCache(CacheEntry *entry) if (_inMemoryLast) nr = _inMemoryLast->page()->pageNr(); else - nr = _lastPageRequested; + nr = static_cast(_lastPageRequested); switch (_policy) { case EveryPagesIncreasing: @@ -178,54 +197,59 @@ static void __manageMemoryCache(CacheEntry *entry) nr -= 2; break; } - if (nr <= _maxPagesInTable && _pages[nr-1]) { - if (_pages[nr-1]->isSwapped()) - _pages[nr-1]->restoreIntoMemory(); - _pages[nr-1]->setNext(NULL); + if (nr <= _pages.size() && _pages[nr-1]) { + if (_pages[nr-1]->isSwapped()) { + auto res = _pages[nr-1]->restoreIntoMemory(); + if (!res) { + ERRORMSG(_("Failed to restore page %u from disk: %s"), + nr, SP::to_string(res.error()).data()); + _pages[nr-1]->setError(res.error()); + if (nr == _pageRequested) + _pageAvailable.release(); + return; + } + } + _pages[nr-1]->setNext(nullptr); _pages[nr-1]->setPrevious(_inMemoryLast); if (_inMemoryLast) { - _inMemoryLast->setNext(_pages[nr-1]); - _inMemoryLast = _pages[nr-1]; + _inMemoryLast->setNext(_pages[nr-1].get()); + _inMemoryLast = _pages[nr-1].get(); } else { - _inMemory = _pages[nr-1]; - _inMemoryLast = _pages[nr-1]; + _inMemory = _pages[nr-1].get(); + _inMemoryLast = _pages[nr-1].get(); } _pagesInMemory++; if (nr == _pageRequested) - _pageAvailable++; + _pageAvailable.release(); } } - _pageTableLock.unlock(); -} - -static void* _cacheControllerThread(void *_exitVar) +}static void _cacheControllerThread(std::stop_token stopToken) { - bool *needToExit = (bool *)_exitVar; bool whatToDo = true; DEBUGMSG(_("Cache controller thread loaded and is waiting for a job")); - while (!(*needToExit)) { + while (!stopToken.stop_requested()) { bool preloadPage = false; // Waiting for a job - _work--; + _work.acquire(); #ifdef DUMP_CACHE if (_pagesInMemory) { CacheEntry *tmp = _inMemory; - fprintf(stderr, _("DEBUG: Cache dump: ")); + fprintf(stderr, _("DEBUG: \033[34mCache dump: ")); for (unsigned int i=0; i < _pagesInMemory && tmp; i++) { fprintf(stderr, "%lu ", tmp->page()->pageNr()); tmp = tmp->next(); } - fprintf(stderr, "\n"); + fprintf(stderr, "\033[0m\n"); } else - fprintf(stderr, _("DEBUG: Cache empty\n")); + fprintf(stderr, _("DEBUG: \033[34mCache empty\033[0m\n")); #endif /* DUMP_CACHE */ // Does the thread needs to exit? - if (*needToExit) + if (stopToken.stop_requested()) break; @@ -242,10 +266,10 @@ static void* _cacheControllerThread(void *_exitVar) if (_waitingList && !(_pagesInMemory == CACHESIZE || _pagesInMemory == _pagesInTable)) { preloadPage = whatToDo; - whatToDo = ~whatToDo; + whatToDo = !whatToDo; // One of the two thing to do } else - preloadPage = (_waitingList == NULL); + preloadPage = (_waitingList == nullptr); /* * Preload a page @@ -261,50 +285,38 @@ static void* _cacheControllerThread(void *_exitVar) // Get the cache entry to store { - _waitingListLock.lock(); + std::lock_guard lock(_waitingListLock); entry = _waitingList; - _waitingList = entry->next(); - if (_lastWaitingList == entry) - _lastWaitingList = NULL; - _waitingListLock.unlock(); + if (entry) { + _waitingList = entry->next(); + if (_lastWaitingList == entry) + _lastWaitingList = nullptr; + } } + if (!entry) + continue; + // Store the entry in the page table { - _pageTableLock.lock(); + std::lock_guard lock(_pageTableLock); // Resize the page table if needed - while (entry->page()->pageNr() > _maxPagesInTable) { - if (!_maxPagesInTable) { - _maxPagesInTable = CACHESIZE; - _pages = new CacheEntry*[_maxPagesInTable]; - memset(_pages, 0, _maxPagesInTable * - sizeof(CacheEntry*)); - } else { - CacheEntry** tmp = new CacheEntry*[_maxPagesInTable*10]; - memcpy(tmp, _pages, _maxPagesInTable * - sizeof(CacheEntry*)); - memset(tmp + _maxPagesInTable, 0, _maxPagesInTable * 9 * - sizeof(CacheEntry*)); - delete[] _pages; - _pages = tmp; - _maxPagesInTable *= 10; - } + if (entry->page()->pageNr() > _pages.size()) { + _pages.resize(entry->page()->pageNr()); } // Store the page in the table - _pages[entry->page()->pageNr() - 1] = entry; - _pageTableLock.unlock(); + _pages[entry->page()->pageNr() - 1] = std::unique_ptr(entry); } _pagesInTable++; // Does the main thread needs this page? if (_pageRequested == entry->page()->pageNr()) { - _pageTableLock.lock(); - entry->setNext(NULL); - entry->setPrevious(NULL); - _pageAvailable++; - _pageTableLock.unlock(); + std::lock_guard lock(_pageTableLock); + entry->setNext(nullptr); + entry->setPrevious(nullptr); + _pageAvailable.release(); // So check whether the page can be kept in memory or have to // be swapped on the disk @@ -314,7 +326,6 @@ static void* _cacheControllerThread(void *_exitVar) } DEBUGMSG(_("Cache controller unloaded. See ya")); - return NULL; } @@ -326,10 +337,10 @@ static void* _cacheControllerThread(void *_exitVar) bool initializeCache() { // Load the cache controller thread - if (pthread_create(&_cacheThread, NULL, _cacheControllerThread, - (void *)&_stopCacheControllerThread)) { - ERRORMSG(_("Cannot load the cache controller thread. Operation " - "aborted.")); + try { + _cacheThread = std::jthread(_cacheControllerThread); + } catch (const std::system_error& e) { + ERRORMSG(_("Cannot load the cache controller thread: %s"), e.what()); return false; } @@ -339,29 +350,20 @@ bool initializeCache() bool uninitializeCache() { - void *threadResult; - bool res = true; - // Stop the cache controller thread - _stopCacheControllerThread = true; - _work++; - if (pthread_join(_cacheThread, &threadResult)) { - ERRORMSG(_("An error occurred while waiting the end of the cache " - "controller thread")); - res = false; - } + _cacheThread.request_stop(); + _work.release(); // wake up thread to check for stop + _cacheThread.join(); // Check if all pages has been read. Otherwise free them - for (unsigned long i=0; i < _maxPagesInTable; i++) { + for (size_t i = 0; i < _pages.size(); i++) { if (_pages[i]) { - ERRORMSG(_("Cache: page %lu hasn't be used!"), i+1); - delete _pages[i]->page(); - delete _pages[i]; + ERRORMSG(_("Cache: page %lu hasn't be used!"), static_cast(i+1)); } } - delete[] _pages; + _pages.clear(); - return res; + return true; } @@ -370,23 +372,21 @@ bool uninitializeCache() * Enregistrement d'une page dans le cache * Register a new page in the cache */ -void registerPage(Page* page) +void registerPage(std::unique_ptr page) { - CacheEntry *entry; - - entry = new CacheEntry(page); + auto entry = std::make_unique(std::move(page)); + CacheEntry* entryRaw = entry.release(); { - _waitingListLock.lock(); + std::lock_guard lock(_waitingListLock); if (_lastWaitingList) { - _lastWaitingList->setNext(entry); - _lastWaitingList = entry; + _lastWaitingList->setNext(entryRaw); + _lastWaitingList = entryRaw; } else { - _waitingList = entry; - _lastWaitingList = entry; + _waitingList = entryRaw; + _lastWaitingList = entryRaw; } - _waitingListLock.unlock(); } - _work++; + _work.release(); } @@ -395,21 +395,20 @@ void registerPage(Page* page) * Extraction d'une page du cache * Cache page extraction */ -Page* getNextPage() +SP::Result> getNextPage() { - CacheEntry *entry = NULL; - unsigned long nr=0; + CacheEntry *entry = nullptr; + uint32_t nr = 0; bool notUnregister = false; - Page *page; // Get the next page number switch (_policy) { case EveryPagesIncreasing: - nr = _lastPageRequested + 1; + nr = static_cast(_lastPageRequested + 1); break; case EvenDecreasing: if (_lastPageRequested > 2) - nr = _lastPageRequested - 2; + nr = static_cast(_lastPageRequested - 2); else { nr = 1; setCachePolicy(OddIncreasing); @@ -419,21 +418,27 @@ Page* getNextPage() if (!_lastPageRequested) nr = 1; else - nr = _lastPageRequested + 2; + nr = static_cast(_lastPageRequested + 2); break; } - DEBUGMSG(_("Next requested page : %lu (# pages into memory=%lu/%u)"), nr, - _pagesInMemory, CACHESIZE); + DEBUGMSG(_("Next requested page : %lu (# pages into memory=%lu/%u)"), static_cast(nr), + static_cast(_pagesInMemory), CACHESIZE); // Wait for the page - while (nr && (!_numberOfPages || _numberOfPages >= nr)) { + while (nr && (!_pageLimitKnown || _numberOfPages >= nr)) { { - _pageTableLock.lock(); - if (_maxPagesInTable >= nr && _pages[nr - 1] && + std::lock_guard lock(_pageTableLock); + if (_pages.size() >= nr && _pages[nr - 1] && !_pages[nr - 1]->isSwapped()) { - entry = _pages[nr - 1]; - _pages[nr - 1] = NULL; + + entry = _pages[nr - 1].get(); + + // If the background thread encountered an error, propagate it + if (entry->error() != SP::Error::None) { + return SP::Unexpected(entry->error()); + } + if (!entry->previous() && !entry->next() && entry != _inMemory) notUnregister = true; if (entry->previous()) @@ -443,30 +448,33 @@ Page* getNextPage() if (entry == _inMemory) _inMemory = entry->next(); if (entry == _inMemoryLast) - _inMemoryLast = NULL; - _pageTableLock.unlock(); + _inMemoryLast = entry->previous(); break; - } else if (_maxPagesInTable >= nr && _pages[nr - 1] && + } else if (_pages.size() >= nr && _pages[nr - 1] && _pages[nr - 1]->isSwapped()) - _work++; + _work.release(); _pageRequested = nr; - _pageTableLock.unlock(); } - _pageAvailable--; - }; + _pageAvailable.acquire(); + } // Extract the page instance if (!entry) - return NULL; + return std::unique_ptr(nullptr); + + _pageTableLock.lock(); + auto entryPtr = std::move(_pages[nr - 1]); + _pageTableLock.unlock(); + _pagesInTable--; _lastPageRequested = nr; - page = entry->page(); - delete entry; + auto page = entryPtr->releasePage(); + // entryPtr (the CacheEntry) is destroyed here when we return or at end of scope // Preload a new page if (!notUnregister) _pagesInMemory--; - _work++; + _work.release(); return page; } @@ -486,7 +494,7 @@ void setCachePolicy(CachePolicy policy) _lastPageRequested = 0; else { while (!_numberOfPages) - _pageAvailable--; + _pageAvailable.acquire(); _lastPageRequested = (_numberOfPages & ~0x1) + 2; } } @@ -497,10 +505,11 @@ void setCachePolicy(CachePolicy policy) * Enregistrer le nombre de pages maximum * Set the maximum number of pages */ -void setNumberOfPages(unsigned long nr) +void setNumberOfPages(uint32_t nr) { _numberOfPages = nr; - _pageAvailable++; + _pageLimitKnown = true; + _pageAvailable.release(); } @@ -509,94 +518,93 @@ void setNumberOfPages(unsigned long nr) * Gestion des entrées du cache * Cache entry management */ -CacheEntry::CacheEntry(Page* page) -{ - _tempFile = NULL; - _next = NULL; - _previous = NULL; - _page = page; -} + +CacheEntry::CacheEntry(std::unique_ptr page) : _page(std::move(page)) +{} CacheEntry::~CacheEntry() { - if (_tempFile) { + if (!_tempFile.empty()) { ERRORMSG(_("Destroy a cache entry which is still swapped on disk.")); - unlink(_tempFile); - delete[] _tempFile; + unlink(_tempFile.c_str()); } } -bool CacheEntry::swapToDisk() +SP::Result<> CacheEntry::swapToDisk() { - const char *path = "/tmp/splixV2-pageXXXXXX"; + char path[] = "/tmp/splixV2-pageXXXXXX"; int fd; - if (_tempFile) { + if (!_tempFile.empty()) { ERRORMSG(_("Trying to swap a page instance on the disk which is " "already swapped.")); - return false; + return SP::Unexpected(SP::Error::InvalidState); } // Create the temporarily file - _tempFile = new char[strlen(path)+1]; - strcpy(_tempFile, path); - if ((fd = mkstemp(_tempFile)) == -1) { - delete[] _tempFile; - _tempFile = NULL; + if ((fd = mkstemp(path)) == -1) { ERRORMSG(_("Cannot swap a page into disk (%i)"), errno); - return false; + return SP::Unexpected(SP::Error::IOError); } + _tempFile = path; // Swap the instance into the file - if (!_page->swapToDisk(fd)) { - unlink(_tempFile); - delete[] _tempFile; - _tempFile = NULL; + auto res = _page->swapToDisk(fd); + if (!_page || !res) { + unlink(_tempFile.c_str()); + _tempFile.clear(); ERRORMSG(_("Cannot swap a page into disk")); - return false; + close(fd); + return res.has_value() ? SP::Unexpected(SP::Error::SerializationError) : res; } - DEBUGMSG(_("Page %lu swapped to disk"), _page->pageNr()); + DEBUGMSG(_("Page %lu swapped to disk"), static_cast(_page->pageNr())); close(fd); - delete _page; - _page = NULL; + _page.reset(); - return true; + return {}; } -bool CacheEntry::restoreIntoMemory() +SP::Result<> CacheEntry::restoreIntoMemory() { int fd; - if (!_tempFile) { + if (_tempFile.empty()) { ERRORMSG(_("Trying to restore a page instance into memory which is " "already into memory")); - return false; + return SP::Unexpected(SP::Error::InvalidState); } // Open the swap file - if ((fd = open(_tempFile, O_RDONLY)) == -1) { + if ((fd = open(_tempFile.c_str(), O_RDONLY)) == -1) { ERRORMSG(_("Cannot restore page into memory (%i)"), errno); - return false; + return SP::Unexpected(SP::Error::IOError); } // Restore the instance - if (!(_page = Page::restoreIntoMemory(fd))) { - ERRORMSG(_("Cannot restore page into memory")); - return false; + auto res = Page::restoreIntoMemory(fd); + if (!res) { + ERRORMSG(_("Cannot restore page into memory: %s"), SP::to_string(res.error()).data()); + close(fd); + return SP::Unexpected(res.error()); } + _page = std::move(*res); // Destroy the swap file close(fd); - unlink(_tempFile); - delete[] _tempFile; - _tempFile = NULL; + unlink(_tempFile.c_str()); + _tempFile.clear(); - DEBUGMSG(_("Page %lu restored into memory"), _page->pageNr()); - return true; + DEBUGMSG(_("Page %lu restored into memory"), static_cast(_page->pageNr())); + return {}; } #endif /* DISABLE_THREADS */ +std::unique_ptr CacheEntry::releasePage() +{ + return std::move(_page); +} + /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ diff --git a/src/colors.cpp b/src/colors.cpp index 8079113a..1bbb60ca 100644 --- a/src/colors.cpp +++ b/src/colors.cpp @@ -24,69 +24,44 @@ #ifndef DISABLE_BLACKOPTIM void applyBlackOptimization(Page* page) { - unsigned long size, sizeByUL, mod, mask; - unsigned char *planes[4], bmask; - - // Only optimize colors if there are present + // Only optimize colors if there are 4 (CMYK) if (!page || page->colorsNr() != 4) return; - for (unsigned int i=0; i < 4; i++) { - if (!(planes[i] = page->planeBuffer(i))) - return; - } - - size = page->width() * page->height() / 8; - sizeByUL = size / sizeof(unsigned long); - mod = size % sizeof(unsigned long); - - /* - * To optimize this algorithm, data are first evaluated by unsigned long - * (32-Bits on 32-Bits architecture and 64-Bits on 64-Bits architecture). - * The last bytes are evaluated individually if the size is not a multiple - * of the size of the unsigned long - */ - for (unsigned long i=0; i < sizeByUL; i++) { - // Clear cyan, magenta and yellow dots if a black dot is present - mask = ((unsigned long *)planes[3])[i]; - if (mask) { - ((unsigned long *)planes[0])[i] &= ~mask; - ((unsigned long *)planes[1])[i] &= ~mask; - ((unsigned long *)planes[2])[i] &= ~mask; - } - - // Set a black dot if cyan, magenta and yellow dots are present and - // clear them - mask = ((unsigned long *)planes[0])[i]; - mask &= ((unsigned long *)planes[1])[i]; - mask &= ((unsigned long *)planes[2])[i]; - if (mask) { - ((unsigned long *)planes[3])[i] |= mask; - ((unsigned long *)planes[0])[i] &= ~mask; - ((unsigned long *)planes[1])[i] &= ~mask; - ((unsigned long *)planes[2])[i] &= ~mask; - } + std::array, 4> planes; + for (uint8_t i = 0; i < 4; i++) { + uint8_t* ptr = page->planeBuffer(i); + if (!ptr) return; + planes[i] = std::span(ptr, page->width() * page->height() / 8); } - for (unsigned long i=1; i <= mod; i++) { - // Clear cyan, magenta and yellow dots if a black dot is present - bmask = planes[3][size - i]; - if (bmask) { - planes[0][size - i] &= ~bmask; - planes[1][size - i] &= ~bmask; - planes[2][size - i] &= ~bmask; + const size_t size = planes[0].size(); + + // Process in chunks of unsigned long for performance where possible, + // but use a safer approach than raw reinterpret_cast if we were strictly + // following C++23, however for high-performance bitwise ops on buffers + // we'll use a clean loop that the compiler can optimize. + + for (size_t i = 0; i < size; ++i) { + uint8_t& cyan = planes[0][i]; + uint8_t& magenta = planes[1][i]; + uint8_t& yellow = planes[2][i]; + uint8_t& black = planes[3][i]; + + // optimization 1: if black is present, clear CMY + if (black) { + cyan &= ~black; + magenta &= ~black; + yellow &= ~black; } - // Set a black dot if cyan, magenta and yellow dots are present and - // clear them - bmask = planes[0][size - i]; - bmask &= planes[1][size - i]; - bmask &= planes[2][size - i]; - if (bmask) { - planes[3][size - i] |= bmask; - planes[0][size - i] &= ~bmask; - planes[1][size - i] &= ~bmask; - planes[2][size - i] &= ~bmask; + // optimization 2: if all CMY present, convert to black and clear CMY + uint8_t common = cyan & magenta & yellow; + if (common) { + black |= common; + cyan &= ~common; + magenta &= ~common; + yellow &= ~common; } } } diff --git a/src/compress.cpp b/src/compress.cpp index 762f77d3..144b82fb 100644 --- a/src/compress.cpp +++ b/src/compress.cpp @@ -19,13 +19,20 @@ * */ #include "compress.h" -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include "page.h" #include "band.h" #include "errlog.h" #include "request.h" #include "bandplane.h" +#include "printer.h" #include "algo0x0d.h" #include "algo0x0e.h" @@ -118,52 +125,57 @@ unsigned long _get2020BandWidthInB(unsigned char papertype, return 0; } -static bool _isEmptyBand(unsigned char* band, unsigned long size) +static bool _isEmptyBand(std::span band) { - unsigned long max, mod; - - max = size / sizeof(unsigned long); - mod = size % sizeof(unsigned long); - - for (unsigned long i=0; i < max; i++) { - if (((unsigned long*)band)[i]) - return false; - } - for (unsigned long i=0; i < mod; i++) - if (band[size-i-1]) - return false; - return true; + // Use std::all_of for clarity; modern compilers often vectorize this + return std::all_of(band.begin(), band.end(), [](uint8_t b) { return b == 0; }); } -static bool _compressBandedPage(const Request& request, Page* page) +static SP::Result<> _compressBandedPage(const Request& request, Page* page) { - unsigned long index=0, pageHeight, pageWidth, lineWidthInB, bandHeight; - unsigned long bandWidth, bandWidthInB; - unsigned long bandSize, hardMarginX, hardMarginXInB, hardMarginY; - unsigned char *planes[4], *band; - unsigned long bandNumber=0; - unsigned char colors; + uint32_t index=0, pageHeight, pageWidth, lineWidthInB, bandHeight; + uint32_t bandWidth, bandWidthInB, bandSize; + uint32_t hardMarginX, hardMarginXInB, hardMarginY; + const uint8_t *planes[4]; + uint32_t bandNumber=0; + uint8_t colors; + + if (!request.printer()) { + return SP::Unexpected(SP::Error::InvalidArgument); + } colors = page->colorsNr(); - hardMarginX = ((unsigned long)ceil(page->convertToXResolution(request. - printer()->hardMarginX())) + 7) & ~7; - hardMarginY = ceil(page->convertToYResolution(request.printer()-> - hardMarginY())); + hardMarginX = (static_cast(std::ceil(page->convertToXResolution(request. + printer()->hardMarginX()))) + 7) & ~7; + hardMarginY = static_cast(std::ceil(page->convertToYResolution(request.printer()-> + hardMarginY()))); hardMarginXInB = hardMarginX / 8; pageWidth = page->width(); - pageHeight = page->height() - hardMarginY; + pageHeight = page->height(); + + if (pageHeight <= hardMarginY) { + ERRORMSG(_("Page height (%u) is smaller than hard margin (%u)"), pageHeight, hardMarginY); + return SP::Unexpected(SP::Error::InvalidArgument); + } + pageHeight -= hardMarginY; + page->setWidth(pageWidth); page->setHeight(pageHeight); lineWidthInB = (pageWidth + 7) / 8; - bandHeight = request.printer()->bandHeight(); + bandHeight = static_cast(request.printer()->bandHeight()); if (page->xResolution() == 300 && page->yResolution() == 300) bandHeight /= 2; + if (!bandHeight) { + ERRORMSG(_("Invalid zero band height")); + return SP::Unexpected(SP::Error::InvalidArgument); + } + //Patch for Samsung M2026 if (request.printer()->specialBandWidth()) { - bandWidthInB = _get2020BandWidthInB(request.printer()->paperType(), + bandWidthInB = static_cast(_get2020BandWidthInB(request.printer()->paperType(), page->xResolution(), - pageWidth); + pageWidth)); if (!bandWidthInB) bandWidthInB = lineWidthInB; } else if (request.printer()->fixedBandWidth()) { //Some of QPDL 1 and 2 models require full-width data @@ -173,159 +185,205 @@ static bool _compressBandedPage(const Request& request, Page* page) } else bandWidthInB = lineWidthInB; //original assumption before M2026 patch bandWidth = bandWidthInB * 8; + + // Safety check for bandSize + if (static_cast(bandWidthInB) * bandHeight > 0x20000000) { // 512MB limit + ERRORMSG(_("Calculated band size is too large")); + return SP::Unexpected(SP::Error::MemoryError); + } bandSize = bandWidthInB * bandHeight; index = hardMarginY * lineWidthInB; - band = new unsigned char[bandSize]; - for (unsigned int i=0; i < colors; i++) - planes[i] = page->planeBuffer(i); + + std::vector band; + try { + band.resize(bandSize); + } catch (const std::bad_alloc&) { + return SP::Unexpected(SP::Error::MemoryError); + } + + for (uint32_t i=0; i < colors; i++) { + planes[i] = page->planeBuffer(static_cast(i)); + if (!planes[i]) { + ERRORMSG(_("Plane %u has no data"), i); + return SP::Unexpected(SP::Error::LogicError); + } + } - /* - * 1. On vérifier si la bande n'est pas blanche - * |-> Si bande blanche, on passe - * '-> Sinon, on compresse - * 2. On rajoute les informations de bande (numéro de bande et de - * couleur). - * 3. On enregistre la bande dans la page. - * 4. On détruit les buffers de plans dans la page. - */ while (pageHeight) { - unsigned long localHeight = bandHeight; - Band *current = NULL; + uint32_t localHeight = bandHeight; + std::unique_ptr current = nullptr; bool theEnd = false; // Special things to do for the last band if (pageHeight < bandHeight) { theEnd = true; localHeight = pageHeight; - memset(band, 0, bandSize); + std::fill(band.begin(), band.end(), 0); } - for (unsigned int i=0; i < colors; i++) { - Algorithm *algo = NULL; - BandPlane *plane; + for (uint32_t i=0; i < colors; i++) { + std::unique_ptr algo = nullptr; + SP::Result> planeRes = SP::Unexpected(SP::Error::None); switch (page->compression()) { case 0x0D: - algo = new Algo0x0D; + algo = std::make_unique(); break; case 0x0E: - algo = new Algo0x0E; + algo = std::make_unique(); break; case 0x11: - algo = new Algo0x11; + algo = std::make_unique(); break; default: ERRORMSG(_("Unknown compression algorithm. Aborted")); - return false; + return SP::Unexpected(SP::Error::InvalidArgument); } // Copy the data into the band depending on the algorithm options if (algo->reverseLineColumn()) { - for (unsigned int y=0; y < localHeight; y++) { - for (unsigned int x=0; (x < lineWidthInB - hardMarginXInB) && (x < bandWidthInB); x++) { - band[x * bandHeight + y] = planes[i][index + x + hardMarginXInB + y * lineWidthInB]; // ERR? + // Special case where columns and lines are swapped (transposed) + for (uint32_t y = 0; y < localHeight; y++) { + const uint32_t srcRowStart = index + hardMarginXInB + y * lineWidthInB; + const size_t copyWidth = std::min(static_cast(lineWidthInB - hardMarginXInB), + static_cast(bandWidthInB)); + + for (uint32_t x = 0; x < copyWidth; x++) { + band[x * bandHeight + y] = planes[i][srcRowStart + x]; } - for (unsigned int x=lineWidthInB - hardMarginXInB; x < bandWidthInB; x++) + // Filling remaining with 0 if necessary + for (uint32_t x = static_cast(copyWidth); x < bandWidthInB; x++) { band[x * bandHeight + y] = 0; + } } } else { - for (unsigned int y=0; y < localHeight; y++) { - for (unsigned int x=0; (x < lineWidthInB - hardMarginXInB) && (x < bandWidthInB); x++) { - band[x + y * bandWidthInB] = planes[i][index + x + hardMarginXInB + y * lineWidthInB]; + // Standard row-wise copy + for (uint32_t y = 0; y < localHeight; y++) { + const uint32_t dstRowStart = y * bandWidthInB; + const uint32_t srcRowStart = index + hardMarginXInB + y * lineWidthInB; + const size_t copyWidth = std::min(static_cast(lineWidthInB - hardMarginXInB), + static_cast(bandWidthInB)); + + std::ranges::copy(std::span(planes[i] + srcRowStart, copyWidth), band.begin() + dstRowStart); + if (bandWidthInB > copyWidth) { + std::ranges::fill(std::span(band.data() + dstRowStart + copyWidth, bandWidthInB - copyWidth), 0); } - for (unsigned int x=lineWidthInB - hardMarginXInB; x < bandWidthInB; x++) - band[x + y * lineWidthInB] = 0; } } - // Does the band is empty? - if (_isEmptyBand(band, bandSize)) { - delete algo; + // Is the band empty? + if (_isEmptyBand(band)) { continue; } // Check if bytes have to be reversed if (algo->inverseByte()) - for (unsigned int j=0; j < bandSize; j++) + for (uint32_t j=0; j < bandSize; j++) band[j] = ~band[j]; // Call the compression method - plane = algo->compress(request, band, bandWidth, bandHeight); + planeRes = algo->compress(request, band, bandWidth, bandHeight); /* - * If algorithm 0xd did not create a plane, it means that the - * complementary algorithm 0xE need to be used + * If algorithm 0x0D did not create a plane, it means that the + * complementary algorithm 0x0E needs to be used */ - if (!plane && page->compression() == 0x0D) { - delete algo; - algo = new Algo0x0E; - /* Bytes has to be reversed first, as algo0xd didn't do that. */ - for (unsigned int j = 0; j < bandSize; j++) + if (!planeRes && page->compression() == 0x0D) { + algo = std::make_unique(); + /* Bytes must be reversed first, as algo0x0D didn't do that. */ + for (uint32_t j = 0; j < bandSize; j++) band[j] = ~band[j]; - /* Do the encoding with algo0xe. */ - plane = algo->compress(request, band, bandWidth, bandHeight); + /* Do the encoding with algo0x0E. */ + planeRes = algo->compress(request, band, bandWidth, bandHeight); } - if (plane) { - plane->setColorNr(i + 1); + if (planeRes) { + std::unique_ptr plane = std::move(*planeRes); + plane->setColorNr(static_cast(i + 1)); if (!current) - current = new Band(bandNumber, bandWidth, bandHeight); - current->registerPlane(plane); + current = std::make_unique(bandNumber, bandWidth, bandHeight); + current->registerPlane(std::move(plane)); + } else if (planeRes.error() != SP::Error::None) { + return SP::Unexpected(planeRes.error()); } - - delete algo; } if (current) - page->registerBand(current); + page->registerBand(std::move(current)); bandNumber++; index += lineWidthInB * bandHeight; pageHeight = theEnd ? 0 : pageHeight - bandHeight; } page->flushPlanes(); - delete[] band; - return true; + return {}; } #ifndef DISABLE_JBIG -static bool _compressBandedJBIGPage(const Request& request, Page* page) +static SP::Result<> _compressBandedJBIGPage(const Request& request, Page* page) { - unsigned long index=0, pageHeight, lineWidthInB, bandHeight = 128; - unsigned long bufferWidth, specialBufferWidthInB, bandSize, hardMarginXInB=13, hardMarginY=100; - unsigned char *planes[4], *band[4]; - unsigned long bandNumber=0, xLimitInB, bufferWidthInB; - Algo0x15 *algo = new Algo0x15; + uint32_t index=0, pageHeight, lineWidthInB, bandHeight = 128; + uint32_t bufferWidth, specialBufferWidthInB, bandSize, hardMarginXInB=13, hardMarginY=100; + const uint8_t *planes[4]; + std::vector band[4]; + uint32_t bandNumber=0, xLimitInB, bufferWidthInB; + auto algo = std::make_unique(); + + if (!request.printer()) { + return SP::Unexpected(SP::Error::InvalidArgument); + } + /* Image trimming are done from hardware margins defined in the ppd. */ - hardMarginXInB = ((unsigned long)ceil(page->convertToXResolution(request. - printer()->hardMarginX())) + 7) / 8; - hardMarginY = ceil(page->convertToYResolution(request.printer()-> - hardMarginY())); - bandHeight = request.printer()->bandHeight(); - lineWidthInB = ((page->width()) + 7) / 8; - // Compute an updated page height, clipped on top. + hardMarginXInB = (static_cast(std::ceil(page->convertToXResolution(request. + printer()->hardMarginX()))) + 7) / 8; + hardMarginY = static_cast(std::ceil(page->convertToYResolution(request.printer()-> + hardMarginY()))); + + if (page->height() <= hardMarginY) { + ERRORMSG(_("Page height (%u) is smaller than hard margin (%u)"), page->height(), hardMarginY); + return SP::Unexpected(SP::Error::InvalidArgument); + } pageHeight = page->height() - hardMarginY; + + lineWidthInB = ((page->width()) + 7) / 8; // Compute the buffer width that is nearest multiple of 256 to the original. bufferWidth = page->width() & ~255; if ((bufferWidth + 128) < page->width()) bufferWidth += 256; + bandHeight = static_cast(request.printer()->bandHeight()); if (request.printer()->specialBandWidth()) { - specialBufferWidthInB = _get2020BandWidthInB(request.printer()->paperType(), + specialBufferWidthInB = static_cast(_get2020BandWidthInB(request.printer()->paperType(), page->xResolution(), - page->width()); + page->width())); if (specialBufferWidthInB) bufferWidth = specialBufferWidthInB * 8; } - // Update the page heigth. + // Update the page height. page->setHeight(pageHeight); // Update the page width. page->setWidth(bufferWidth); bufferWidthInB = (bufferWidth + 7) / 8; + + // Safety check for bandSize + if (static_cast(bufferWidthInB) * bandHeight > 0x20000000) { + ERRORMSG(_("Calculated jbig band size is too large")); + return SP::Unexpected(SP::Error::MemoryError); + } bandSize = bufferWidthInB * bandHeight; index = hardMarginY * lineWidthInB; - for (unsigned int i=0; i < page->colorsNr(); i++) { - band[i] = new unsigned char[bandSize]; - planes[i] = page->planeBuffer(i); + + try { + for (uint32_t i=0; i < page->colorsNr(); i++) { + band[i].resize(bandSize); + planes[i] = page->planeBuffer(static_cast(i)); + if (!planes[i]) { + ERRORMSG(_("JBIG Plane %u has no data"), i); + return SP::Unexpected(SP::Error::LogicError); + } + } + } catch (const std::bad_alloc&) { + return SP::Unexpected(SP::Error::MemoryError); } + /* Here, limit the width of the copied image to the buffer, as the buffer width varies and can lead to 6 practical cases, the following is a @@ -336,60 +394,73 @@ static bool _compressBandedJBIGPage(const Request& request, Page* page) else xLimitInB = lineWidthInB - hardMarginXInB; bool theEnd = false; - unsigned long indexSizeIncrement = bandHeight * lineWidthInB; - unsigned long localHeight = bandHeight; + uint32_t indexSizeIncrement = bandHeight * lineWidthInB; + uint32_t localHeight = bandHeight; while (pageHeight) { - Band *current = NULL; + std::unique_ptr current = nullptr; bool cmyPlanesHasData = false; // Special things to do for the last band if (pageHeight < bandHeight) { theEnd = true; localHeight = pageHeight; - for (unsigned int i=0; i < page->colorsNr(); i++) - memset(band[i], 0, bandSize); + for (uint32_t i=0; i < page->colorsNr(); i++) + std::fill(band[i].begin(), band[i].end(), 0); } - for (unsigned int i=0; i < page->colorsNr(); i++) { - for (unsigned int y=0; y < localHeight; y++) { - for (unsigned int x=hardMarginXInB; x < xLimitInB; x++) - band[i][x - hardMarginXInB + y * bufferWidthInB] = - planes[i][index + x + y * lineWidthInB]; - for (unsigned int x=lineWidthInB - 2 * hardMarginXInB; - x < bufferWidthInB; x++) - band[i][x + y * bufferWidthInB] = 0; + for (uint32_t i=0; i < page->colorsNr(); i++) { + for (uint32_t y=0; y < localHeight; y++) { + const uint32_t dstRowStart = y * bufferWidthInB; + const uint32_t srcRowStart = index + y * lineWidthInB; + const size_t copyWidth = xLimitInB - hardMarginXInB; + + // Copy the actual pixel data + std::ranges::copy(std::span(planes[i] + srcRowStart + hardMarginXInB, copyWidth), + band[i].begin() + dstRowStart); + + // Clear the rest of the buffer row + if (bufferWidthInB > copyWidth) { + std::ranges::fill(std::span(band[i].data() + dstRowStart + copyWidth, + bufferWidthInB - copyWidth), 0); + } } } // Are the CMY planes completely empty in the band? - for (unsigned int i=0; i < page->colorsNr() - 1; i++) - if (!_isEmptyBand(band[i], bandSize)) { + for (uint32_t i=0; i < static_cast(page->colorsNr() - 1); i++) + if (!_isEmptyBand(band[i])) { cmyPlanesHasData = true; break; }; // Compress the entire band. if (cmyPlanesHasData) { - for (unsigned int i=0; i < page->colorsNr(); i++) { - BandPlane *plane = algo->compress(request, band[i], + for (uint32_t i=0; i < page->colorsNr(); i++) { + auto planeRes = algo->compress(request, band[i], bufferWidth, bandHeight); - if (plane) { - plane->setColorNr((1 == page->colorsNr()) ? 4:i + 1); + if (planeRes) { + std::unique_ptr plane = std::move(*planeRes); + plane->setColorNr(static_cast((1 == page->colorsNr()) ? 4 : i + 1)); if (!current) - current = new Band(bandNumber, bufferWidth, bandHeight); - current->registerPlane(plane); + current = std::make_unique(bandNumber, bufferWidth, bandHeight); + current->registerPlane(std::move(plane)); + } else if (planeRes.error() != SP::Error::None) { + return SP::Unexpected(planeRes.error()); } } - } else if (!_isEmptyBand(band[page->colorsNr() - 1], bandSize)) { + } else if (!_isEmptyBand(band[page->colorsNr() - 1])) { // Compress only the K band. - BandPlane *plane = algo->compress(request, + auto planeRes = algo->compress(request, band[page->colorsNr() - 1], bufferWidth, bandHeight); - if (plane) { + if (planeRes) { + std::unique_ptr plane = std::move(*planeRes); plane->setColorNr(4); if (!current) - current = new Band(bandNumber, bufferWidth, bandHeight); - current->registerPlane(plane); + current = std::make_unique(bandNumber, bufferWidth, bandHeight); + current->registerPlane(std::move(plane)); + } else if (planeRes.error() != SP::Error::None) { + return SP::Unexpected(planeRes.error()); } } if (current) - page->registerBand(current); + page->registerBand(std::move(current)); bandNumber++; index += indexSizeIncrement; pageHeight = theEnd ? 0 : pageHeight - bandHeight; @@ -397,78 +468,106 @@ static bool _compressBandedJBIGPage(const Request& request, Page* page) if (page->bandsNr() > 0) page->setBIH(algo->getBIHdata()); page->flushPlanes(); - for (unsigned int i=0; i < page->colorsNr(); i++) - delete[] band[i]; - delete algo; - return true; + + return {}; } -static bool _compressWholePage(const Request& request, Page* page) +static SP::Result<> _compressWholePage(const Request& request, Page* page) { - unsigned long hardMarginX, hardMarginXInB, hardMarginY, lineWidthInB; - unsigned long pageWidth, bandHeight, planeHeight, pageHeight, index; - unsigned long bandNumber=0; - unsigned char *buffer; - Band *current = NULL; + uint32_t hardMarginX, hardMarginXInB, hardMarginY, lineWidthInB; + uint32_t pageWidth, bandHeight, planeHeight, pageHeight, index; + uint32_t bandNumber=0; + std::vector buffer; + Band *raw_current = nullptr; Algo0x13 algo[4]; - hardMarginX = ((unsigned long)ceil(page->convertToXResolution(request. - printer()->hardMarginX())) + 7) & ~7; - hardMarginY = ceil(page->convertToYResolution(request.printer()-> - hardMarginY())); + if (!request.printer()) { + return SP::Unexpected(SP::Error::InvalidArgument); + } + + hardMarginX = (static_cast(std::ceil(page->convertToXResolution(request. + printer()->hardMarginX()))) + 7) & ~7; + hardMarginY = static_cast(std::ceil(page->convertToYResolution(request.printer()-> + hardMarginY()))); hardMarginXInB = hardMarginX / 8; + + if (page->width() <= hardMarginX * 2 || page->height() <= hardMarginY * 2) { + ERRORMSG(_("Page dimensions too small for margins")); + return SP::Unexpected(SP::Error::InvalidArgument); + } + pageWidth = page->width() - hardMarginX * 2; pageHeight = page->height() - hardMarginY * 2; page->setWidth(pageWidth); page->setHeight(pageHeight); lineWidthInB = (pageWidth + 7) / 8; - bandHeight = request.printer()->bandHeight(); + bandHeight = static_cast(request.printer()->bandHeight()); + if (!bandHeight) { + ERRORMSG(_("Invalid zero band height")); + return SP::Unexpected(SP::Error::InvalidArgument); + } + // Alignment of the page height on band height planeHeight = ((pageHeight + bandHeight - 1) / bandHeight) * bandHeight; - buffer = new unsigned char[lineWidthInB * planeHeight]; + + try { + buffer.resize(lineWidthInB * planeHeight); + } catch (const std::bad_alloc&) { + return SP::Unexpected(SP::Error::MemoryError); + } do { - current = NULL; - for (unsigned int i=0; i < page->colorsNr(); i++) { - unsigned char *curPlane = page->planeBuffer(i); - BandPlane *plane; + std::unique_ptr current = nullptr; + for (uint32_t i=0; i < page->colorsNr(); i++) { + const uint8_t *curPlane = page->planeBuffer(static_cast(i)); + if (!curPlane) { + ERRORMSG(_("Plane %u has no data"), i); + return SP::Unexpected(SP::Error::LogicError); + } + SP::Result> planeRes = SP::Unexpected(SP::Error::None); index = hardMarginY * (lineWidthInB + 2 * hardMarginXInB) + hardMarginXInB; - for (unsigned int y=0; y < pageHeight; y++, - index += 2 * hardMarginXInB) { - for (unsigned int x=0; x < lineWidthInB; x++, index++) { - buffer[x + y * lineWidthInB] = curPlane[index]; - } + for (uint32_t y = 0; y < pageHeight; y++) { + const uint32_t dstRowStart = y * lineWidthInB; + const uint32_t srcRowStart = index + y * (lineWidthInB + 2 * hardMarginXInB); + + std::ranges::copy(std::span(curPlane + srcRowStart, lineWidthInB), + buffer.begin() + dstRowStart); } - memset(buffer + pageHeight * lineWidthInB, 0, - (planeHeight - pageHeight) * lineWidthInB); + std::fill(buffer.begin() + pageHeight * lineWidthInB, buffer.end(), 0); // Call the compression method - plane = algo[i].compress(request, buffer, page->width(), + planeRes = algo[i].compress(request, buffer, page->width(), planeHeight); - if (plane) { - plane->setColorNr(i + 1); + if (planeRes) { + std::unique_ptr plane = std::move(*planeRes); + plane->setColorNr(static_cast(i + 1)); if (!current) - current = new Band(bandNumber, page->width(), + current = std::make_unique(bandNumber, page->width(), request.printer()->bandHeight()); - current->registerPlane(plane); + current->registerPlane(std::move(plane)); + } else if (planeRes.error() != SP::Error::None) { + return SP::Unexpected(planeRes.error()); } } + raw_current = current.get(); if (current) - page->registerBand(current); + page->registerBand(std::move(current)); bandNumber++; - } while (current); + } while (raw_current); page->flushPlanes(); - delete[] buffer; - return true; + return {}; } #endif /* DISABLE_JBIG */ -bool compressPage(const Request& request, Page* page) +SP::Result<> compressPage(const Request& request, Page* page) { + if (!page) + return SP::Unexpected(SP::Error::InvalidArgument); + switch(page->compression()) { case 0x0D: case 0x0E: @@ -481,7 +580,7 @@ bool compressPage(const Request& request, Page* page) ERRORMSG(_("J-BIG compression algorithm has been disabled during " "the compilation. Please recompile SpliX and enable the " "J-BIG compression algorithm.")); - break; + return SP::Unexpected(SP::Error::InvalidArgument); #endif /* DISABLE_JBIG */ case 0x15: #ifndef DISABLE_JBIG @@ -490,13 +589,13 @@ bool compressPage(const Request& request, Page* page) ERRORMSG(_("J-BIG compression algorithm has been disabled during " "the compilation. Please recompile SpliX and enable the " "J-BIG compression algorithm.")); - break; + return SP::Unexpected(SP::Error::InvalidArgument); #endif /* DISABLE_JBIG */ default: - ERRORMSG(_("Compression algorithm 0x%lX does not exist"), - page->compression()); + ERRORMSG(_("Compression algorithm 0x%X does not exist"), + static_cast(page->compression())); + return SP::Unexpected(SP::Error::InvalidArgument); } - return false; } /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ diff --git a/src/document.cpp b/src/document.cpp index d5e3b771..981b7bd2 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -18,92 +18,97 @@ * $Id$ * */ -#include "document.h" -#include -#include +#include +#include +#include +#include +#include "sp_portable.h" #include "page.h" +#include "document.h" +#include "band.h" #include "errlog.h" #include "request.h" -/* - * Constructeur - Destructeur - * Init - Uninit - */ -Document::Document() -{ - _raster = NULL; -} - -Document::~Document() -{ - if (_raster) - cupsRasterClose(_raster); -} - - /* * Ouverture du fichier contenant la requête * Open the file which contains the job */ -bool Document::load(const Request& request) +SP::Result<> Document::load([[maybe_unused]] const Request& request) { _currentPage = 1; _lastPage = false; - _raster = cupsRasterOpen(STDIN_FILENO, CUPS_RASTER_READ); + _raster.reset(cupsRasterOpen(SP_STDIN_FILENO, CUPS_RASTER_READ)); if (!_raster) { ERRORMSG(_("Cannot open job")); - return false; + return SP::Unexpected(SP::Error::RasterOpenError); } - return true; + return {}; } - - /* * Extraction d'une nouvelle page de la requête * Exact a new job page */ -Page* Document::getNextRawPage(const Request& request) +SP::Result> Document::getNextRawPage([[maybe_unused]] const Request& request) { - cups_page_header_t header; - unsigned long pageWidth, pageWidthInB, pageHeight, clippingX=0, clippingY=0; - unsigned long documentWidth, documentHeight, lineSize, planeSize, index=0; - unsigned long bytesToCopy, marginWidthInB=0, marginHeight=0; - unsigned char *line, *planes[4]; - unsigned char colors; - Page *page; + cups_page_header2_t header; + uint32_t pageWidth, pageWidthInB, pageHeight, clippingX = 0, clippingY = 0; + uint32_t documentWidth, documentHeight, lineSize, planeSize, index = 0; + uint32_t bytesToCopy, marginWidthInB = 0, marginHeight = 0; + uint8_t colors; // Read the header if (_lastPage) - return NULL; + return SP::Unexpected(SP::Error::EndOfJob); if (!_raster) { ERRORMSG(_("The raster hasn't been loaded")); - return NULL; + return SP::Unexpected(SP::Error::RasterOpenError); } - if (!cupsRasterReadHeader(_raster, &header) || !header.cupsBytesPerLine || + if (!cupsRasterReadHeader2(_raster.get(), &header) || !header.cupsBytesPerLine || !header.PageSize[1]) { DEBUGMSG(_("No more pages")); _lastPage = true; - return NULL; + return SP::Unexpected(SP::Error::EndOfJob); + } + + // Input Sanitization: Validate header dimensions to prevent excessive resource allocation + if (header.cupsWidth > 20000 || header.cupsHeight > 30000) { + ERRORMSG(_("Invalid page dimensions in CUPS header: %ux%u"), + header.cupsWidth, header.cupsHeight); + return SP::Unexpected(SP::Error::InconsistentData); } // Make some calculations and store important data - page = new Page; + auto page = std::make_unique(); page->setXResolution(header.HWResolution[0]); page->setYResolution(header.HWResolution[1]); colors = header.cupsColorSpace == CUPS_CSPACE_K ? 1 : 4; documentWidth = (header.cupsWidth + 7) & ~7; documentHeight = header.cupsHeight; lineSize = header.cupsBytesPerLine / colors; - pageWidth = ((unsigned long)ceil(page->convertToXResolution(request. - printer()->pageWidth())) + 7) & ~7; - pageHeight = ceil(page->convertToYResolution(request.printer()-> - pageHeight())); - marginWidthInB =(ceil(page->convertToXResolution(header.Margins[0]))+7)/8; - marginHeight = ceil(page->convertToYResolution(header.Margins[1])); + pageWidth = (static_cast(std::ceil(page->convertToXResolution(request. + printer()->pageWidth()))) + 7) & ~7; + pageHeight = static_cast(std::ceil(page->convertToYResolution(request.printer()-> + pageHeight()))); + + // Safety check for calculated dimensions + if (pageWidth == 0 || pageHeight == 0) { + ERRORMSG(_("Resolved page dimensions are zero")); + return SP::Unexpected(SP::Error::InconsistentData); + } + + marginWidthInB = (static_cast(std::ceil(page->convertToXResolution(header.Margins[0]))) + 7) / 8; + marginHeight = static_cast(std::ceil(page->convertToYResolution(header.Margins[1]))); pageWidthInB = (pageWidth + 7) / 8; planeSize = pageWidthInB * pageHeight; + + // Last line components validation + if (planeSize > 1024 * 1024 * 512) { // 512MB safety cap per plane + ERRORMSG(_("Plane size is too large: %u"), planeSize); + return SP::Unexpected(SP::Error::MemoryError); + } + page->setWidth(pageWidth); page->setHeight(pageHeight); page->setColorsNr(colors); @@ -125,49 +130,49 @@ Page* Document::getNextRawPage(const Request& request) clippingY = (documentHeight - (pageHeight - 2 * marginHeight)) / 2; index = pageWidthInB * marginHeight; } else { - clippingY = 0; - index = pageWidthInB * ((pageHeight - documentHeight)/2); + clippingX = 0; // redundant but safe + index = pageWidthInB * ((pageHeight - documentHeight) / 2); } documentHeight -= clippingY; - pageHeight -= 2*marginHeight; + pageHeight -= 2 * marginHeight; clippingY *= colors; - line = new unsigned char[header.cupsBytesPerLine]; - DEBUGMSG(_("Document width=%lu height=%lu"), documentWidth, documentHeight); - DEBUGMSG(_("Page width=%lu (%lu) height=%lu"), pageWidth, pageWidthInB, pageHeight); - DEBUGMSG(_("Margin width in bytes=%lu height=%lu"), marginWidthInB, marginHeight); - DEBUGMSG(_("Clipping X=%lu Y=%lu"), clippingX, clippingY); - DEBUGMSG(_("Line size=%lu, Plane size=%lu, bytes to copy=%lu"), lineSize, planeSize, bytesToCopy); + + std::vector line(header.cupsBytesPerLine); + DEBUGMSG(_("Document width=%u height=%u"), documentWidth, documentHeight); + DEBUGMSG(_("Page width=%u (%u) height=%u"), pageWidth, pageWidthInB, pageHeight); + DEBUGMSG(_("Margin width in bytes=%u height=%u"), marginWidthInB, marginHeight); + DEBUGMSG(_("Clipping X=%u Y=%u"), clippingX, clippingY); + DEBUGMSG(_("Line size=%u, Plane size=%u, bytes to copy=%u"), lineSize, planeSize, bytesToCopy); // Prepare planes and clip vertically the document if needed - for (unsigned char i=0; i < colors; i++) { - planes[i] = new unsigned char[planeSize]; - memset(planes[i], 0, planeSize); + std::array, 4> planes; + for (uint8_t i = 0; i < colors; i++) { + try { + planes[i].resize(planeSize, 0); + } catch (const std::bad_alloc&) { + ERRORMSG(_("Failed to allocate plane buffer")); + return SP::Unexpected(SP::Error::MemoryError); + } } + while (clippingY) { - if (cupsRasterReadPixels(_raster, line, lineSize) < 1) { - ERRORMSG(_("Cannot read pixel line")); - for (unsigned int i=0; i < colors; i++) - delete[] planes[i]; - delete[] line; - delete page; - return NULL; + if (cupsRasterReadPixels(_raster.get(), line.data(), lineSize) < 1) { + ERRORMSG(_("Cannot read pixel line during clipping")); + return SP::Unexpected(SP::Error::RasterReadError); } clippingY--; } // Load the bitmap while (pageHeight && documentHeight) { - for (unsigned int i=0; i < colors; i++) { - if (cupsRasterReadPixels(_raster, line, lineSize) < 1) { - ERRORMSG(_("Cannot read pixel line")); - for (unsigned int j=0; j < colors; j++) - delete[] planes[j]; - delete[] line; - delete page; - return NULL; + for (uint8_t i = 0; i < colors; i++) { + if (cupsRasterReadPixels(_raster.get(), line.data(), lineSize) < 1) { + ERRORMSG(_("Cannot read pixel line during data load")); + return SP::Unexpected(SP::Error::RasterReadError); } - memcpy(planes[i] + index + marginWidthInB, line + clippingX, - bytesToCopy); + auto destSpan = std::span(planes[i]).subspan(index + marginWidthInB, bytesToCopy); + auto srcSpan = std::span(line).subspan(clippingX, bytesToCopy); + std::ranges::copy(srcSpan, destSpan.begin()); } index += pageWidthInB; pageHeight--; @@ -177,30 +182,23 @@ Page* Document::getNextRawPage(const Request& request) // Finish to clip vertically the document documentHeight *= colors; while (documentHeight) { - if (cupsRasterReadPixels(_raster, line, lineSize) < 1) { - ERRORMSG(_("Cannot read pixel line")); - for (unsigned int j=0; j < colors; j++) - delete[] planes[j]; - delete[] line; - delete page; - return NULL; + if (cupsRasterReadPixels(_raster.get(), line.data(), lineSize) < 1) { + ERRORMSG(_("Cannot read pixel line during final clipping")); + return SP::Unexpected(SP::Error::RasterReadError); } documentHeight--; } _currentPage++; - for (unsigned int i=0; i < colors; i++) - page->setPlaneBuffer(i, planes[i]); + for (uint8_t i = 0; i < colors; i++) + page->setPlaneBuffer(i, std::move(planes[i])); - DEBUGMSG(_("Page %lu (%u×%u on %lu×%lu) has been successfully loaded into " - "memory"), page->pageNr(), header.cupsWidth, header.cupsHeight, + DEBUGMSG(_("Page %u (%u×%u on %u×%u) has been successfully loaded into memory"), + page->pageNr(), header.cupsWidth, header.cupsHeight, page->width(), page->height()); - delete[] line; - return page; + return std::move(page); } - - /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ diff --git a/src/module.mk b/src/module.mk deleted file mode 100644 index 8c02c60f..00000000 --- a/src/module.mk +++ /dev/null @@ -1,14 +0,0 @@ -# -# Part of the SpliX project (C) 2006-2008 by Aurélien Croc (AP²C) -# - -rastertoqpdl_SRC += src/rastertoqpdl.cpp src/request.cpp \ - src/printer.cpp src/qpdl.cpp src/document.cpp \ - src/core.cpp src/compress.cpp src/algorithm.cpp \ - src/ppdfile.cpp src/page.cpp src/colors.cpp \ - src/band.cpp src/bandplane.cpp src/cache.cpp \ - src/rendering.cpp src/semaphore.cpp \ - src/algo0x0d.cpp src/algo0x0e.cpp src/algo0x11.cpp \ - src/algo0x13.cpp src/algo0x15.cpp - -pstoqpdl_SRC += src/pstoqpdl.cpp src/ppdfile.cpp diff --git a/src/page.cpp b/src/page.cpp index 3efb4f65..2ce0d625 100644 --- a/src/page.cpp +++ b/src/page.cpp @@ -19,63 +19,67 @@ * */ #include "page.h" -#include -#include +#include "sp_portable.h" +#include +#include #include "band.h" #include "errlog.h" +Page::Page() = default; +Page::~Page() = default; + /* * This magic formula reverse the bit of a byte. ie. the bit 1 becomes the * bit 8, the bit 2 becomes the bit 7 etc. */ -#define REVERSE_BITS(N) ((N * 0x0202020202ULL & 0x010884422010ULL) % 1023) - -/* - * Constructeur - Destructeur - * Init - Uninit - */ -Page::Page() -{ - _empty = true; - _xResolution = 0; - _yResolution = 0; - _planes[0] = NULL; - _planes[1] = NULL; - _planes[2] = NULL; - _planes[3] = NULL; - _firstBand = NULL; - _lastBand = NULL; - _bandsNr = 0; - _bih = NULL; -} - -Page::~Page() -{ - flushPlanes(); - if (_firstBand) - delete _firstBand; - if (_bih) - delete[] _bih; +static constexpr uint8_t REVERSE_BITS(uint8_t n) { + uint64_t res = (static_cast(n) * 0x0202020202ULL & 0x010884422010ULL) % 1023; + return static_cast(res); } - /* * Enregistrement d'une nouvelle bande * Register a new band */ -void Page::registerBand(Band *band) +void Page::registerBand(std::unique_ptr band) { + band->registerParent(this); + Band* raw_band = band.get(); + if (_lastBand) - _lastBand->registerSibling(band); + _lastBand->registerSibling(std::move(band)); else - _firstBand = band; - _lastBand = band; - band->registerParent(this); + _firstBand = std::move(band); + + _lastBand = raw_band; _bandsNr++; } +/* + * Register a new color plane. + */ +SP::Result<> Page::setPlaneBuffer(uint8_t color, std::vector buffer) +{ + if (color >= 4) { + return SP::Unexpected(SP::Error::InvalidArgument); + } + + // Harden: check for excessive memory allocation (safety cap 512MB per plane) + if (buffer.size() > 512 * 1024 * 1024) { + ERRORMSG(_("Plane buffer too large: %zu bytes"), buffer.size()); + return SP::Unexpected(SP::Error::MemoryError); + } + try { + _planes[color] = std::move(buffer); + } catch (const std::bad_alloc&) { + return SP::Unexpected(SP::Error::MemoryError); + } + + _empty = false; + return {}; +} /* * Rotation des couches @@ -83,117 +87,109 @@ void Page::registerBand(Band *band) */ void Page::rotate() { - unsigned long size, midSize; - unsigned char tmp; - - size = _width * _height / 8; - midSize = size / 2; - - for (unsigned int i=0; i < _colors; i++) { - for (unsigned long j=0; j < midSize; j++) { - tmp = _planes[i][j]; - _planes[i][j] = REVERSE_BITS(_planes[i][size - j - 1]); - _planes[i][size - j - 1] = REVERSE_BITS(tmp); + if (_width == 0 || _height == 0) return; + + size_t size = static_cast(_width) * _height / 8; + size_t midSize = size / 2; + + for (uint8_t i = 0; i < _colors; i++) { + if (_planes[i].empty()) continue; + + auto& plane = _planes[i]; + for (size_t j = 0; j < midSize; j++) { + uint8_t tmp = plane[j]; + plane[j] = REVERSE_BITS(plane[size - j - 1]); + plane[size - j - 1] = REVERSE_BITS(tmp); } } } - - /* * Libération de la mémoire utilisée par les couches * Flush the planes */ void Page::flushPlanes() { - for (unsigned int i=0; i < 4; i++) { - if (_planes[i]) { - delete[] _planes[i]; - _planes[i] = NULL; - } + for (auto& plane : _planes) { + plane.clear(); + plane.shrink_to_fit(); } _empty = false; } - - /* * Mise sur disque / Rechargement * Swapping / restoring */ -bool Page::swapToDisk(int fd) +SP::Result<> Page::swapToDisk(int fd) { - unsigned long i; - Band* band; - - if (_planes[0] || _planes[1] || _planes[2] || _planes[3]) { + if (!_planes[0].empty() || !_planes[1].empty() || !_planes[2].empty() || !_planes[3].empty()) { ERRORMSG(_("Cannot swap page instance which still contains bitmap " "representation")); - return false; + return SP::Unexpected(SP::Error::InvalidState); + } + + if (write(fd, &_xResolution, sizeof(_xResolution)) == -1) return SP::Unexpected(SP::Error::IOError); + if (write(fd, &_yResolution, sizeof(_yResolution)) == -1) return SP::Unexpected(SP::Error::IOError); + if (write(fd, &_width, sizeof(_width)) == -1) return SP::Unexpected(SP::Error::IOError); + if (write(fd, &_height, sizeof(_height)) == -1) return SP::Unexpected(SP::Error::IOError); + if (write(fd, &_colors, sizeof(_colors)) == -1) return SP::Unexpected(SP::Error::IOError); + if (write(fd, &_pageNr, sizeof(_pageNr)) == -1) return SP::Unexpected(SP::Error::IOError); + if (write(fd, &_copiesNr, sizeof(_copiesNr)) == -1) return SP::Unexpected(SP::Error::IOError); + if (write(fd, &_compression, sizeof(_compression)) == -1) return SP::Unexpected(SP::Error::IOError); + if (write(fd, &_empty, sizeof(_empty)) == -1) return SP::Unexpected(SP::Error::IOError); + if (write(fd, &_bandsNr, sizeof(_bandsNr)) == -1) return SP::Unexpected(SP::Error::IOError); + + if (0x15 == _compression && _bandsNr > 0 && !_bih.empty()) { + if (write(fd, _bih.data(), 20) == -1) return SP::Unexpected(SP::Error::IOError); } - write(fd, &_xResolution, sizeof(_xResolution)); - write(fd, &_yResolution, sizeof(_yResolution)); - write(fd, &_width, sizeof(_width)); - write(fd, &_height, sizeof(_height)); - write(fd, &_colors, sizeof(_colors)); - write(fd, &_pageNr, sizeof(_pageNr)); - write(fd, &_copiesNr, sizeof(_copiesNr)); - write(fd, &_compression, sizeof(_compression)); - write(fd, &_empty, sizeof(_empty)); - write(fd, &_bandsNr, sizeof(_bandsNr)); - /* Carefully check if there is BIH data and compression type is 0x15, - before saving BIH data to file. */ - if (( 0x15 == _compression ) && ( _bandsNr > 0 ) && ( NULL != _bih )) - write(fd, _bih, 20); - for (i=0, band = _firstBand; i < _bandsNr; i++) { - if (!band->swapToDisk(fd)) - return false; + + Band* band = _firstBand.get(); + while (band) { + auto res = band->swapToDisk(fd); + if (!res) + return res; band = band->sibling(); } - return true; + return {}; } -Page* Page::restoreIntoMemory(int fd) +SP::Result> Page::restoreIntoMemory(int fd) { - unsigned long nr; - Page* page; - - page = new Page(); - read(fd, &page->_xResolution, sizeof(page->_xResolution)); - read(fd, &page->_yResolution, sizeof(page->_yResolution)); - read(fd, &page->_width, sizeof(page->_width)); - read(fd, &page->_height, sizeof(page->_height)); - read(fd, &page->_colors, sizeof(page->_colors)); - read(fd, &page->_pageNr, sizeof(page->_pageNr)); - read(fd, &page->_copiesNr, sizeof(page->_copiesNr)); - read(fd, &page->_compression, sizeof(page->_compression)); - read(fd, &page->_empty, sizeof(page->_empty)); - read(fd, &nr, sizeof(nr)); - /* Check if compression type is 0x15 and that there is at least one - image band before reading BIH data. */ - if (( 0x15 == page->_compression ) && ( nr > 0 )) { - unsigned char bih[20]; - read(fd, bih, 20); - page->setBIH(bih); + auto page = std::make_unique(); + uint32_t bandsCount = 0; + + if (read(fd, &page->_xResolution, sizeof(page->_xResolution)) <= 0) return SP::Unexpected(SP::Error::IOError); + if (read(fd, &page->_yResolution, sizeof(page->_yResolution)) <= 0) return SP::Unexpected(SP::Error::IOError); + if (read(fd, &page->_width, sizeof(page->_width)) <= 0) return SP::Unexpected(SP::Error::IOError); + if (read(fd, &page->_height, sizeof(page->_height)) <= 0) return SP::Unexpected(SP::Error::IOError); + if (read(fd, &page->_colors, sizeof(page->_colors)) <= 0) return SP::Unexpected(SP::Error::IOError); + if (read(fd, &page->_pageNr, sizeof(page->_pageNr)) <= 0) return SP::Unexpected(SP::Error::IOError); + if (read(fd, &page->_copiesNr, sizeof(page->_copiesNr)) <= 0) return SP::Unexpected(SP::Error::IOError); + if (read(fd, &page->_compression, sizeof(page->_compression)) <= 0) return SP::Unexpected(SP::Error::IOError); + if (read(fd, &page->_empty, sizeof(page->_empty)) <= 0) return SP::Unexpected(SP::Error::IOError); + if (read(fd, &bandsCount, sizeof(bandsCount)) <= 0) return SP::Unexpected(SP::Error::IOError); + + if (0x15 == page->_compression && bandsCount > 0) { + uint8_t bih[20]; + if (read(fd, bih, 20) <= 0) return SP::Unexpected(SP::Error::IOError); + page->setBIH(bih, 20); } - for (unsigned int i=0; i < nr; i++) { - Band *band = Band::restoreIntoMemory(fd); - if (!band) { - delete page; - return NULL; + + for (uint32_t i = 0; i < bandsCount; i++) { + auto band_res = Band::restoreIntoMemory(fd); + if (!band_res) { + return SP::Unexpected(band_res.error()); } - page->registerBand(band); + page->registerBand(std::move(*band_res)); } return page; } -void Page::setBIH(const unsigned char *bih_data) { - if (NULL == _bih) - _bih = new unsigned char[20]; - memcpy(_bih, bih_data, 20); +void Page::setBIH(const uint8_t *bih_data, size_t size) { + _bih.assign(bih_data, bih_data + size); } /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ - diff --git a/src/ppdfile.cpp b/src/ppdfile.cpp index 573d9522..0f22c430 100644 --- a/src/ppdfile.cpp +++ b/src/ppdfile.cpp @@ -19,127 +19,202 @@ * */ #include "ppdfile.h" +#include #include -#include +#include #include +#include +#include #include "errlog.h" - - +#include "sp_portable.h" /* * Constructeur - Destructeur * Init - Uninit */ -PPDFile::PPDFile() -{ - _ppd = NULL; -} - -PPDFile::~PPDFile() +PPDFile::PPDFile() : + _num_options(0), _options(nullptr) { - close(); } - +PPDFile::~PPDFile() = default; /* * Ouverture et fermeture du fichier PPD * Opening or closing PPD file */ -bool PPDFile::open(const char *file, const char *version, const char *useropts) +SP::Result<> PPDFile::open(std::string_view file, std::string_view version, std::string_view useropts) { - const char *fileVersion; - cups_option_t *options; - int nr; + const char *printerName; + PPDValue fileVersion; - // Check if a PPD file was previously opened - if (_ppd) { - ERRORMSG(_("Internal warning: a PPD file was previously opened. Please " + // Check if printer information was previously opened + if (_dest || _dinfo) { + ERRORMSG(_("Internal warning: printer info was previously opened. Please " "close it before opening a new one.")); close(); } - // Open the PPD file - _ppd = ppdOpenFile(file); - if (!_ppd) { - ERRORMSG(_("Cannot open PPD file %s"), file); - return false; + if (!file.empty()) _ppdPath = file; + + // Get the printer name from the environment + printerName = getenv("PRINTER"); + if (!printerName) + printerName = getenv("CUPS_DEST"); + + _dest.reset(cupsGetNamedDest(CUPS_HTTP_DEFAULT, printerName, NULL)); + if (!_dest) { + // Fallback: try to find any destination if PRINTER is not set + _dest.reset(cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL)); } - // Mark the default values and the user options - ppdMarkDefaults(_ppd); - nr = cupsParseOptions(useropts, 0, &options); - cupsMarkOptions(_ppd, nr, options); - cupsFreeOptions(nr, options); + if (!_dest) { + WARNMSG(_("Cannot find printer destination (PRINTER=%s). Proceeding with defaults."), + printerName ? printerName : "NULL"); + } else { + _dinfo.reset(cupsCopyDestInfo(CUPS_HTTP_DEFAULT, _dest.get())); + if (!_dinfo) { + WARNMSG(_("Cannot get destination info for printer %s. Proceeding with defaults."), _dest->name); + } + } - // Check if the PPD version is compatible with this filter - fileVersion = get("FileVersion"); - if (!fileVersion) { - ERRORMSG(_("No FileVersion found in the PPD file: invalid " - "PPD file")); - ppdClose(_ppd); - _ppd = NULL; - return false; + // Direct PPD file loading fallback + if (!file.empty()) { + _ppd.reset(ppdOpenFile(file.data())); + if (!_ppd) { + ERRORMSG(_("Cannot open PPD file %s: %s"), file.data(), cupsLastErrorString()); + return SP::Unexpected(SP::Error::PPDOpenError); + } else { + ppdMarkDefaults(_ppd.get()); + } } - if (strcmp(fileVersion, version)) { - ERRORMSG(_("Invalid PPD file version: %s but the PPD file " - "is designed for SpliX V. %s"), version, fileVersion); - ppdClose(_ppd); - _ppd = NULL; - return false; + + // Parse user options + _num_options = cupsParseOptions(useropts.data(), 0, &_options); + + // Check version + fileVersion = get("FileVersion"); + if (!fileVersion.isNull() && fileVersion != version) { + ERRORMSG(_("Invalid PPD version: %s (Expected: %s)"), (const char*)fileVersion, version.data()); + return SP::Unexpected(SP::Error::PPDVersionMismatch); } - return true; + return {}; } void PPDFile::close() { - if (!_ppd) - return; - ppdClose(_ppd); - _ppd = NULL; + _dinfo.reset(); + _dest.reset(); + _ppd.reset(); + if (_options) { + cupsFreeOptions(_num_options, _options); + _options = nullptr; + _num_options = 0; + } } - - - /* - * Obtention d'une donnée du fichier PPD - * Get a string from the PPD file + * Obtention d'une donnée + * Get a value */ -PPDValue PPDFile::get(const char *name, const char *opt) +PPDValue PPDFile::get(std::string_view name, std::string_view opt) { - ppd_attr_t *attr; + const char *valStr = nullptr; PPDValue val; - if (!_ppd) { - ERRORMSG(_("Trying to read a PPD file which wasn't opened")); - return val; + // 1. Search in job-specific options first + valStr = cupsGetOption(name.data(), _num_options, _options); + + // 2. Search in destination info (defaults/attributes) + if (!valStr && _dinfo) { + if (!opt.empty()) { + // It might be a choice for a specific option + ipp_attribute_t *attr = cupsFindDestSupported(CUPS_HTTP_DEFAULT, + _dest.get(), _dinfo.get(), name.data()); + if (attr) { + // Return default value if present + valStr = cupsGetOption(name.data(), _dest->num_options, _dest->options); + } + } else { + // Check for general IPP attributes + valStr = cupsGetOption(name.data(), _dest->num_options, _dest->options); + if (!valStr) { + std::string cupsName = std::string("cups-") + std::string(name); + valStr = cupsGetOption(cupsName.c_str(), _dest->num_options, + _dest->options); + } + } + } + + // 3. Fallback to direct PPD file loading + if (!valStr && _ppd) { + ppd_choice_t *choice = ppdFindMarkedChoice(_ppd.get(), name.data()); + if (choice) { + valStr = choice->choice; + } else { + ppd_option_t *option = ppdFindOption(_ppd.get(), name.data()); + if (option) { + valStr = option->defchoice; + } else { + // Finally, look for attributes (e.g. *QPDL BandSize) + ppd_attr_t *attr = nullptr; + if (!opt.empty()) { + attr = ppdFindAttr(_ppd.get(), opt.data(), name.data()); + } else { + attr = ppdFindAttr(_ppd.get(), name.data(), nullptr); + } + + if (attr && attr->value) { + valStr = attr->value; + // Attributes in PPD often have quotes, e.g., "128" + if (valStr[0] == '"') { + std::string_view sv(valStr); + if (sv.size() >= 2 && sv.back() == '"') { + val.set(sv.substr(1, sv.size() - 2)); + val.setPreformatted(); + return val; + } + } + } else if (!opt.empty() && !name.empty()) { + // Fallback: try reversed just in case libcups/PPD is weird + attr = ppdFindAttr(_ppd.get(), name.data(), opt.data()); + if (attr && attr->value) { + valStr = attr->value; + } + } + + } + } } - if (!opt) - attr = ppdFindAttr(_ppd, name, NULL); - else - attr = ppdFindAttr(_ppd, opt, name); - if (!attr) { - ppd_choice_t *choice; - choice = ppdFindMarkedChoice(_ppd, name); - if (!choice) - return val; - val.set(choice->choice); - } else - val.set(attr->value); + if (valStr) + val.set(valStr); + return val; } -PPDValue PPDFile::getPageSize(const char *name) +PPDValue PPDFile::getPageSize(std::string_view name) { - ppd_size_t *s; PPDValue val; + cups_size_t size; + + if (_dinfo && cupsGetDestMediaByName(CUPS_HTTP_DEFAULT, _dest.get(), _dinfo.get(), name.data(), + CUPS_MEDIA_FLAGS_DEFAULT, &size)) { + // CUPS size is in 100ths of a millimeter. Convert to points (1/72 inch). + float w = (static_cast(size.width) / 2540.0f) * 72.0f; + float h = (static_cast(size.length) / 2540.0f) * 72.0f; + float lm = (static_cast(size.left) / 2540.0f) * 72.0f; + float bm = (static_cast(size.bottom) / 2540.0f) * 72.0f; + val.set(w, h, lm, bm); + } else if (_ppd) { + // Fallback to direct PPD page size resolution + ppd_size_t *psize = ppdPageSize(_ppd.get(), name.data()); + if (psize) { + val.set(psize->width, psize->length, psize->left, psize->bottom); + } + } - if (!(s = ppdPageSize(_ppd, name))) - return val; - val.set(s->width, s->length, s->left, s->bottom); return val; } @@ -149,42 +224,25 @@ PPDValue PPDFile::getPageSize(const char *name) * Gestion des valeurs du PPD * PPD values management */ -PPDFile::Value::Value() +PPDFile::Value::Value() : + _width(0.0f), _height(0.0f), _marginX(0.0f), _marginY(0.0f) { - _value = NULL; - _out = NULL; - _preformatted = NULL; - _width = 0.; - _height = 0.; - _marginX = 0.; - _marginY = 0.; } -PPDFile::Value::Value(const char *value) +PPDFile::Value::Value(std::string_view value) : + _raw(value), _out(_raw), _hasValue(true), + _width(0.0f), _height(0.0f), _marginX(0.0f), _marginY(0.0f) { - _value = value; - _out = value; - _preformatted = NULL; - _width = 0.; - _height = 0.; - _marginX = 0.; - _marginY = 0.; } -PPDFile::Value::~Value() -{ - if (_preformatted) - delete[] _preformatted; -} +PPDFile::Value::~Value() = default; -PPDFile::Value& PPDFile::Value::set(const char *value) +PPDFile::Value& PPDFile::Value::set(std::string_view value) { - if (_preformatted) { - delete[] _preformatted; - _preformatted = NULL; - } - _value = value; - _out = _value; + _preformatted.clear(); + _raw = value; + _out = _raw; + _hasValue = true; return *this; } @@ -202,14 +260,15 @@ PPDFile::Value& PPDFile::Value::set(float width, float height, float marginX, PPDFile::Value& PPDFile::Value::setPreformatted() { - const char *str = _value; - unsigned int i; - - if (!str) + if (_raw.empty()) return *this; - _preformatted = new char[strlen(str)]; - for (i=0; *str; str++) { + const char *str = _raw.c_str(); + + _preformatted.clear(); + _preformatted.reserve(_raw.size()); + + while (*str) { if (*str == '<' && strlen(str) >= 3 && isxdigit(*(str+1))) { char temp[3] = {0, 0, 0}; @@ -217,84 +276,158 @@ PPDFile::Value& PPDFile::Value::setPreformatted() temp[0] = *str; str++; if (*str != '>' && (!isxdigit(*str) || *(str + 1) != '>')) { - _preformatted[i] = '<'; - _preformatted[i+1] = temp[0]; - i += 2; + _preformatted += '<'; + _preformatted += temp[0]; continue; } if (*str != '>') { temp[1] = *str; str++; } - _preformatted[i] = (char)strtol((char *)&temp, (char **)NULL,16); - i++; + _preformatted += static_cast(strtol(temp, nullptr, 16)); + if (*str == '>') + str++; continue; } - _preformatted[i] = *str; - i++; + _preformatted += *str; + str++; } - _preformatted[i] = 0; _out = _preformatted; return *this; } -char* PPDFile::Value::deepCopy() const +std::string PPDFile::Value::deepCopy() const { - char *tmp; - - if (!_out) - return NULL; - tmp = new char[strlen(_out)+1]; - strcpy(tmp, _out); - - return tmp; + if (_out.empty()) + return ""; + return std::string(_out); } bool PPDFile::Value::isTrue() const { - if (!_out) + if (_out.empty()) return false; - if (!strcmp(_out, "1") || !strcasecmp(_out, "true") || - !strcasecmp(_out, "enable") || !strcasecmp(_out, "enabled") || - !strcasecmp(_out, "yes") || !strcasecmp(_out, "on")) + + auto compare = [this](std::string_view target) { + return std::ranges::equal(_out, target, [](char c1, char c2) { + return std::tolower(static_cast(c1)) == + std::tolower(static_cast(c2)); + }); + }; + + if (_out == "1" || compare("true") || + compare("enable") || compare("enabled") || + compare("yes") || compare("on")) return true; return false; } -bool PPDFile::Value::operator == (const char* val) const +PPDFile::Value::operator unsigned long() const { + unsigned long val = 0; + if (!_out.empty()) { + std::from_chars(_out.data(), _out.data() + _out.size(), val); + } + return val; +} + +PPDFile::Value::operator long() const { + long val = 0; + if (!_out.empty()) { + std::from_chars(_out.data(), _out.data() + _out.size(), val); + } + return val; +} + +PPDFile::Value::operator float() const { + float val = 0.0f; + if (!_out.empty()) { + try { + val = std::stof(_out); + } catch (...) {} + } + return val; +} + +PPDFile::Value::operator double() const { + double val = 0.0; + if (!_out.empty()) { + try { + val = std::stod(_out); + } catch (...) {} + } + return val; +} + +PPDFile::Value::operator long double() const { + long double val = 0.0; + if (!_out.empty()) { + try { + val = std::stold(_out); + } catch (...) {} + } + return val; +} + +bool PPDFile::Value::operator == (std::string_view val) const { - if (!_out) + if (_out.empty()) return false; - return !strcasecmp(_out, val); + return std::ranges::equal(_out, val, [](char c1, char c2) { + return std::tolower(static_cast(c1)) == + std::tolower(static_cast(c2)); + }); } -bool PPDFile::Value::operator != (const char* val) const +bool PPDFile::Value::operator == (const char *val) const { - if (!_out) - return true; - return strcasecmp(_out, val); + if (_out.empty() || !val) + return false; + return (*this) == std::string_view(val); +} + +bool PPDFile::Value::operator != (std::string_view val) const +{ + return !((*this) == val); +} + +bool PPDFile::Value::operator != (const char *val) const +{ + return !((*this) == val); } /* - * Opérateur d'assignation - * Assignment operator + * Copy constructor */ -void PPDFile::Value::operator = (const PPDFile::Value &val) +PPDFile::Value::Value(const PPDFile::Value &val) { - if (_preformatted) - delete[] _preformatted; - _value = val._value; - _out = val._out; + _raw = val._raw; _preformatted = val._preformatted; + _out = val._preformatted.empty() ? _raw : _preformatted; + _hasValue = val._hasValue; _width = val._width; _height = val._height; _marginX = val._marginX; _marginY = val._marginY; } +PPDFile::Value& PPDFile::Value::operator = (const PPDFile::Value &val) +{ + if (this == &val) + return *this; + _raw = val._raw; + _preformatted = val._preformatted; + _out = val._preformatted.empty() ? _raw : _preformatted; + _hasValue = val._hasValue; + _width = val._width; + _height = val._height; + _marginX = val._marginX; + _marginY = val._marginY; + return *this; +} + /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ diff --git a/src/printer.cpp b/src/printer.cpp index e05a7659..31703db0 100644 --- a/src/printer.cpp +++ b/src/printer.cpp @@ -19,11 +19,24 @@ * */ #include "printer.h" -#include -#include +#include +#include +#include #include "errlog.h" #include "request.h" #include "ppdfile.h" +#include "sp_portable.h" + +namespace { + /** Case-insensitive string_view comparison (ASCII only). */ + bool compare(std::string_view a, std::string_view b) { + if (a.length() != b.length()) return false; + for (size_t i = 0; i < a.length(); ++i) + if (std::tolower(static_cast(a[i])) != + std::tolower(static_cast(b[i]))) return false; + return true; + } +} // anonymous namespace @@ -31,25 +44,9 @@ * Constructeur - Destructeur * Init - Uninit */ -Printer::Printer() -{ - _manufacturer = NULL; - _model = NULL; - _beginPJL = NULL; - _endPJL = NULL; -} +Printer::Printer() = default; -Printer::~Printer() -{ - if (_manufacturer) - delete[] _manufacturer; - if (_model) - delete [] _model; - if (_beginPJL) - delete [] _beginPJL; - if (_endPJL) - delete [] _endPJL; -} +Printer::~Printer() = default; @@ -72,8 +69,8 @@ bool Printer::loadInformation(const Request& request) _fixedBandWidth = request.ppd()->get("FixedBandWidth", "QPDL"); _packetSize = request.ppd()->get("PacketSize", "QPDL"); _packetSize *= 1024; - _manufacturer = request.ppd()->get("Manufacturer").deepCopy(); - _model = request.ppd()->get("ModelName").deepCopy(); + _manufacturer = std::string(request.ppd()->get("Manufacturer")); + _model = std::string(request.ppd()->get("ModelName")); _color = request.ppd()->get("ColorDevice"); _qpdlVersion = request.ppd()->get("QPDLVersion", "QPDL"); if (!_qpdlVersion || (_qpdlVersion > 3 && _qpdlVersion != 5)) { @@ -82,13 +79,14 @@ bool Printer::loadInformation(const Request& request) } value = request.ppd()->get("DocHeaderValues", "General"); value.setPreformatted(); - if (value.isNull()) { + if (value.isNull() || value.deepCopy().length() < 3) { ERRORMSG(_("Unknown header values. Operation aborted.")); return false; } - _unknownByte1 = ((const char *)value)[0]; - _unknownByte2 = ((const char *)value)[1]; - _unknownByte3 = ((const char *)value)[2]; + std::string headerVals = value.deepCopy(); + _unknownByte1 = headerVals[0]; + _unknownByte2 = headerVals[1]; + _unknownByte3 = headerVals[2]; // Get PJL information value = request.ppd()->get("BeginPJL", "PJL"); @@ -107,50 +105,55 @@ bool Printer::loadInformation(const Request& request) _endPJL = value.deepCopy(); // Get the paper information - paperType = request.ppd()->get("MediaSize"); - if (!paperType) - paperType = request.ppd()->get("PageSize"); - if (!paperType) { + auto mediaSizeValue = request.ppd()->get("MediaSize"); + const char* rawPaperType = mediaSizeValue; + if (!rawPaperType) { + mediaSizeValue = request.ppd()->get("PageSize"); + rawPaperType = mediaSizeValue; + } + if (!rawPaperType) { ERRORMSG(_("Cannot get paper size information. Operation aborted.")); return false; } - if (!(strcasecmp(paperType, "Letter"))) _paperType = 0; - else if (!(strcasecmp(paperType, "Legal"))) _paperType = 1; - else if (!(strcasecmp(paperType, "A4"))) _paperType = 2; - else if (!(strcasecmp(paperType, "Executive"))) _paperType = 3; - else if (!(strcasecmp(paperType, "Ledger"))) _paperType = 4; - else if (!(strcasecmp(paperType, "A3"))) _paperType = 5; - else if (!(strcasecmp(paperType, "Env10"))) _paperType = 6; - else if (!(strcasecmp(paperType, "Monarch"))) _paperType = 7; - else if (!(strcasecmp(paperType, "C5"))) _paperType = 8; - else if (!(strcasecmp(paperType, "DL"))) _paperType = 9; - else if (!(strcasecmp(paperType, "B4"))) _paperType = 10; - else if (!(strcasecmp(paperType, "B5"))) _paperType = 11; - else if (!(strcasecmp(paperType, "EnvISOB5"))) _paperType = 12; - else if (!(strcasecmp(paperType, "Postcard"))) _paperType = 14; - else if (!(strcasecmp(paperType, "DoublePostcardRotated"))) _paperType = 15; - else if (!(strcasecmp(paperType, "A5"))) _paperType = 16; - else if (!(strcasecmp(paperType, "A6"))) _paperType = 17; - else if (!(strcasecmp(paperType, "B6"))) _paperType = 18; - else if (!(strcasecmp(paperType, "Custom"))) _paperType = 21; - else if (!(strcasecmp(paperType, "C6"))) _paperType = 23; - else if (!(strcasecmp(paperType, "Folio"))) _paperType = 24; - else if (!(strcasecmp(paperType, "EnvPersonal"))) _paperType = 25; - else if (!(strcasecmp(paperType, "Env9"))) _paperType = 26; - else if (!(strcasecmp(paperType, "3x5"))) _paperType = 27; - else if (!(strcasecmp(paperType, "Oficio"))) _paperType = 28; - else if (!(strcasecmp(paperType, "Statement"))) _paperType = 30; - else if (!(strcasecmp(paperType, "roc8k"))) _paperType = 34; - else if (!(strcasecmp(paperType, "roc16k"))) _paperType = 35; + + std::string_view paperTypeView(rawPaperType); + + if (compare(paperTypeView, "Letter")) _paperType = 0; + else if (compare(paperTypeView, "Legal")) _paperType = 1; + else if (compare(paperTypeView, "A4")) _paperType = 2; + else if (compare(paperTypeView, "Executive")) _paperType = 3; + else if (compare(paperTypeView, "Ledger")) _paperType = 4; + else if (compare(paperTypeView, "A3")) _paperType = 5; + else if (compare(paperTypeView, "Env10")) _paperType = 6; + else if (compare(paperTypeView, "Monarch")) _paperType = 7; + else if (compare(paperTypeView, "C5")) _paperType = 8; + else if (compare(paperTypeView, "DL")) _paperType = 9; + else if (compare(paperTypeView, "B4")) _paperType = 10; + else if (compare(paperTypeView, "B5")) _paperType = 11; + else if (compare(paperTypeView, "EnvISOB5")) _paperType = 12; + else if (compare(paperTypeView, "Postcard")) _paperType = 14; + else if (compare(paperTypeView, "DoublePostcardRotated")) _paperType = 15; + else if (compare(paperTypeView, "A5")) _paperType = 16; + else if (compare(paperTypeView, "A6")) _paperType = 17; + else if (compare(paperTypeView, "B6")) _paperType = 18; + else if (compare(paperTypeView, "Custom")) _paperType = 21; + else if (compare(paperTypeView, "C6")) _paperType = 23; + else if (compare(paperTypeView, "Folio")) _paperType = 24; + else if (compare(paperTypeView, "EnvPersonal")) _paperType = 25; + else if (compare(paperTypeView, "Env9")) _paperType = 26; + else if (compare(paperTypeView, "3x5")) _paperType = 27; + else if (compare(paperTypeView, "Oficio")) _paperType = 28; + else if (compare(paperTypeView, "Statement")) _paperType = 30; + else if (compare(paperTypeView, "roc8k")) _paperType = 34; + else if (compare(paperTypeView, "roc16k")) _paperType = 35; else { - ERRORMSG(_("Invalid paper size \"%s\". Operation aborted."), paperType); + ERRORMSG(_("Invalid paper size \"%s\". Operation aborted."), rawPaperType); return false; } - value = request.ppd()->getPageSize(paperType); + value = request.ppd()->getPageSize(rawPaperType); if (value.width() == 0. || value.height() == 0.) { - ERRORMSG(_("Null paper size \"%s\" found. Operation aborted."), - paperType); + ERRORMSG(_("Null paper size \"%s\" found. Operation aborted."), rawPaperType); return false; } _pageWidth = value.width(); @@ -158,29 +161,32 @@ bool Printer::loadInformation(const Request& request) _hardMarginX = value.marginX(); _hardMarginY = value.marginY(); - paperSource = request.ppd()->get("InputSlot"); - if (!paperSource) { - paperSource = request.ppd()->get("DefaultInputSlot"); - if (!paperSource) { - paperSource = "Auto"; + auto inputSlotValue = request.ppd()->get("InputSlot"); + const char* rawPaperSource = inputSlotValue; + if (!rawPaperSource) { + inputSlotValue = request.ppd()->get("DefaultInputSlot"); + rawPaperSource = inputSlotValue; + if (!rawPaperSource) { + rawPaperSource = "Auto"; ERRORMSG(_("Cannot get input slot information.")); } } - if (!(strcasecmp(paperSource, "Auto"))) _paperSource = 1; - else if (!(strcasecmp(paperSource, "Manual"))) _paperSource = 2; - else if (!(strcasecmp(paperSource, "Multi"))) _paperSource = 3; - else if (!(strcasecmp(paperSource, "Upper"))) _paperSource = 4; - else if (!(strcasecmp(paperSource, "Lower"))) _paperSource = 5; - else if (!(strcasecmp(paperSource, "Envelope"))) _paperSource = 6; - else if (!(strcasecmp(paperSource, "Tray3"))) _paperSource = 7; + + std::string_view sourceView(rawPaperSource); + if (compare(sourceView, "Auto")) _paperSource = 1; + else if (compare(sourceView, "Manual")) _paperSource = 2; + else if (compare(sourceView, "Multi")) _paperSource = 3; + else if (compare(sourceView, "Upper")) _paperSource = 4; + else if (compare(sourceView, "Lower")) _paperSource = 5; + else if (compare(sourceView, "Envelope")) _paperSource = 6; + else if (compare(sourceView, "Tray3")) _paperSource = 7; else { - ERRORMSG(_("Invalid paper source \"%s\". Operation aborted."), - paperSource); + ERRORMSG(_("Invalid paper source \"%s\". Operation aborted."), rawPaperSource); return false; } DEBUGMSG(_("%s printer %s with QPDL v. %lu"), _color ? "Color" : - "Monochrome", _model, _qpdlVersion); + "Monochrome", _model.c_str(), _qpdlVersion); return true; } @@ -191,13 +197,14 @@ bool Printer::sendPJLHeader(const Request& request, unsigned long yResolution ) const { const char *reverse; + struct tm timeinfo_buf; struct tm *timeinfo; time_t timestamp; time(×tamp); - timeinfo = localtime(×tamp); + timeinfo = SP::portable_localtime(×tamp, &timeinfo_buf); - printf("%s", _beginPJL); + printf("%s", _beginPJL.c_str()); if (0x15 == compression) { printf("@PJL COMMENT USERNAME=\"Username: %s\"\n", request.userName()); @@ -217,15 +224,11 @@ bool Printer::sendPJLHeader(const Request& request, // Set some printer options if (!request.ppd()->get("EconoMode").isNull() && request.ppd()->get("EconoMode") != "0") - printf("@PJL SET ECONOMODE=%s\n", (const char *)request.ppd()-> - get("EconoMode")); - if (!request.ppd()->get("PowerSave").isNull()) { - if (request.ppd()->get("PowerSave") != "False") { - printf("@PJL DEFAULT POWERSAVE=ON\n"); - printf("@PJL DEFAULT POWERSAVETIME=%s\n", - (const char *)request.ppd()->get("PowerSave")); - } else - printf("@PJL DEFAULT POWERSAVE=OFF\n"); + printf("@PJL SET ECONOMODE=%s\n", static_cast(request.ppd()-> + get("EconoMode"))); + if (request.ppd()->get("PowerSave")) { + printf("@PJL SET POWERSAVE=%s\n", + static_cast(request.ppd()->get("PowerSave"))); } if (request.ppd()->get("JamRecovery").isTrue()) @@ -233,7 +236,9 @@ bool Printer::sendPJLHeader(const Request& request, else printf("@PJL SET JAMRECOVERY=OFF\n"); if (request.printer()->color()) { - if (!strcasecmp(request.ppd()->get("ColorModel"), "CMYK")) + auto colorModelValue = request.ppd()->get("ColorModel"); + const char* colorModel = colorModelValue; + if (colorModel && compare(colorModel, "CMYK")) printf("@PJL SET COLORMODE=COLOR\n"); else printf("@PJL SET COLORMODE=MONO\n"); @@ -276,23 +281,20 @@ bool Printer::sendPJLHeader(const Request& request, if (request.ppd()->get("MediaType").isNull()) printf("@PJL SET PAPERTYPE=OFF\n"); else - printf("@PJL SET PAPERTYPE=%s\n", (const char *)request.ppd()-> - get("MediaType")); - if (request.ppd()->get("Altitude").isNull()) - printf("@PJL SET ALTITUDE=LOW\n"); - else - printf("@PJL SET ALTITUDE=%s\n", (const char *)request.ppd()-> - get("Altitude")); - if (request.ppd()->get("TonerDensity").isNull()) - printf("@PJL SET DENSITY=3\n"); - else - printf("@PJL SET DENSITY=%s\n", (const char *)request.ppd()-> - get("TonerDensity")); - if (request.ppd()->get("SRTMode").isNull()) - printf("@PJL SET RET=NORMAL\n"); - else - printf("@PJL SET RET=%s\n", (const char *)request.ppd()-> - get("SRTMode")); + printf("@PJL SET PAPERTYPE=%s\n", static_cast(request.ppd()-> + get("MediaType"))); + if (request.ppd()->get("Altitude")) { + printf("@PJL SET ALTITUDE=%s\n", static_cast(request.ppd()-> + get("Altitude"))); + } + if (request.ppd()->get("TonerDensity")) { + printf("@PJL SET DENSITY=%s\n", static_cast(request.ppd()-> + get("TonerDensity"))); + } + if (request.ppd()->get("SRTMode")) { + printf("@PJL SET RET=%s\n", static_cast(request.ppd()-> + get("SRTMode"))); + } if (0x15 == compression) { printf("@PJL SET BANNERSHEET=%s\n", "OFF"); @@ -305,9 +307,9 @@ bool Printer::sendPJLHeader(const Request& request, return true; } -bool Printer::sendPJLFooter(const Request& request) const +bool Printer::sendPJLFooter([[maybe_unused]] const Request& request) const { - printf("%s", _endPJL); + printf("%s", _endPJL.c_str()); fflush(stdout); return true; diff --git a/src/pstoqpdl.cpp b/src/pstoqpdl.cpp index 3f86ab8c..19d9f97e 100644 --- a/src/pstoqpdl.cpp +++ b/src/pstoqpdl.cpp @@ -21,28 +21,34 @@ #include "ppdfile.h" #include "errlog.h" #include "version.h" -#include -#include -#include -#include -#include +#include "sp_portable.h" +#include +#include +#include +#include #include -#include #include +#if defined(SP_PLATFORM_POSIX) + #include +#endif +#include +#include +#include +#include + +namespace fs = std::filesystem; + /* * Appel des filtres * Filter call */ -static char *_toLower(const char *data) +static std::string _toLower(std::string_view data) { - char *tmp = new char[strlen(data) + 1]; - unsigned int i; - - for (i=0; data[i]; i++) - tmp[i] = (char) tolower(data[i]); - tmp[i] = 0; + std::string tmp(data); + std::transform(tmp.begin(), tmp.end(), tmp.begin(), + [](unsigned char c){ return std::tolower(c); }); return tmp; } @@ -64,37 +70,37 @@ static int _linkFilters(const char *arg1, const char *arg2, const char *arg3, close(rasterInput[1]); close(rasterInput[0]); close(rasterOutput[1]); - dup2(rasterOutput[0], STDIN_FILENO); + dup2(rasterOutput[0], SP_STDIN_FILENO); close(rasterOutput[0]); execl(RASTERDIR "/" RASTERTOQPDL, RASTERDIR "/" RASTERTOQPDL, arg1, - arg2, arg3, arg4, arg5, (char *)NULL); + arg2, arg3, arg4, arg5, static_cast(nullptr)); ERRORMSG(_("Cannot execute rastertoqpdl (%i)"), errno); - exit(0); + _exit(EXIT_FAILURE); } DEBUGMSG(_("SpliX launched with PID=%u"), splix); // Launch the raster - dup2(rasterInput[1], STDOUT_FILENO); + dup2(rasterInput[1], SP_STDOUT_FILENO); close(rasterOutput[0]); close(rasterInput[1]); if (!(raster = fork())) { // Raster code - dup2(rasterInput[0], STDIN_FILENO); - dup2(rasterOutput[1], STDOUT_FILENO); + dup2(rasterInput[0], SP_STDIN_FILENO); + dup2(rasterOutput[1], SP_STDOUT_FILENO); close(rasterInput[0]); close(rasterOutput[1]); if (access(RASTERDIR "/" GSTORASTER, F_OK) != -1) { // gstoraster filter exists execl(RASTERDIR "/" GSTORASTER, RASTERDIR "/" GSTORASTER, arg1, arg2, - arg3, arg4, arg5,(char *)NULL); + arg3, arg4, arg5, static_cast(nullptr)); ERRORMSG(_("Cannot execute gstoraster (%i)"), errno); } else { // use pstoraster if gstoraster doesn't exist execl(RASTERDIR "/" PSTORASTER, RASTERDIR "/" PSTORASTER, arg1, arg2, - arg3, arg4, arg5,(char *)NULL); + arg3, arg4, arg5, static_cast(nullptr)); ERRORMSG(_("Cannot execute %s (%i)"), PSTORASTER, errno); } - exit(0); + _exit(EXIT_FAILURE); } DEBUGMSG(_("raster launched with PID=%u"), raster); close(rasterInput[0]); @@ -109,19 +115,16 @@ static int _linkFilters(const char *arg1, const char *arg2, const char *arg3, * Lecture des fichiers CRD / CSA * CSA / CRD read */ -static char *_readCMSFile(PPDFile& ppd, const char *manufacturer, bool csa) +static std::string _readCMSFile(PPDFile& ppd, const std::string& manufacturer, bool csa) { - unsigned long xResolution=0, yResolution=0, size; + unsigned long xResolution=0, yResolution=0; PPDValue resolution; - const char *file; - char *tmp, *res; - struct stat fi; - FILE *handle; + std::string file; // Get the base filename - file = ppd.get("CMSFile", "General"); - if (!file || !(*file)) - return NULL; + file = static_cast(ppd.get("CMSFile", "General")); + if (file.empty()) + return ""; // Get the resolution resolution = ppd.get("Resolution"); @@ -136,56 +139,64 @@ static char *_readCMSFile(PPDFile& ppd, const char *manufacturer, bool csa) xResolution = yResolution = 300; // Get the real filename - size = strlen(CUPSPROFILE) + strlen(manufacturer) + strlen(file) + 64; - tmp = new char[size]; - if (xResolution) - snprintf(tmp, size, CUPSPROFILE "/%s/%s-%lux%lucms%s", manufacturer, - file, xResolution, yResolution, csa ? "2" : ""); - if (!xResolution || access(tmp, R_OK)) - snprintf(tmp, size, CUPSPROFILE "/%s/%scms%s", manufacturer, - file, csa ? "2" : ""); + fs::path cmsPath; + if (xResolution) { + char buf[256]; + snprintf(buf, sizeof(buf), "%s-%lux%lucms%s", file.c_str(), + xResolution, yResolution, csa ? "2" : ""); + cmsPath = fs::path(CUPSPROFILE) / manufacturer / buf; + } + + if (cmsPath.empty() || !fs::exists(cmsPath) || !fs::is_regular_file(cmsPath)) { + cmsPath = fs::path(CUPSPROFILE) / manufacturer / (file + "cms" + (csa ? "2" : "")); + } // Check if it exists, open it and read it - if (stat(tmp, &fi) || !(handle = fopen(tmp, "r"))) { - ERRORMSG(_("Cannot open CMS file %s (%i)"), tmp, errno); - delete[] tmp; - return NULL; + if (!fs::exists(cmsPath) || !fs::is_regular_file(cmsPath)) { + ERRORMSG(_("Cannot open CMS file %s (%i)"), cmsPath.c_str(), errno); + return ""; } - if (!fi.st_size) { - ERRORMSG(_("CMS file %s is empty"), tmp); - delete[] tmp; - fclose(handle); - return NULL; + + FILE *handle = fopen(cmsPath.c_str(), "r"); + if (!handle) { + ERRORMSG(_("Cannot open CMS file %s (%i)"), cmsPath.c_str(), errno); + return ""; } - res = new char[fi.st_size + 1]; - if (!fread(res, 1, fi.st_size, handle)) { - ERRORMSG(_("Cannot read CMS file %s (%i)"), tmp, errno); - delete[] tmp; - delete[] res; + + size_t fileSize = fs::file_size(cmsPath); + std::string res; + res.resize(fileSize); + if (fread(res.data(), 1, fileSize, handle) != fileSize) { + ERRORMSG(_("Error while reading CMS file %s"), cmsPath.c_str()); fclose(handle); - return NULL; + return ""; } - res[fi.st_size] = 0; fclose(handle); - delete[] tmp; return res; } + /* * PROGRAMME PRINCIPAL * MAIN ROUTINE */ int main(int argc, char **argv) { - const char *jobid, *user, *title, *options, *ppdFile, *file; - const char *paperType, *manufacturer; - unsigned long copies; + [[maybe_unused]] const char *jobid; + [[maybe_unused]] const char *user; + [[maybe_unused]] const char *title; + [[maybe_unused]] const char *options; + const char *ppdFile; + const char *file; + const char *paperType; + std::string manufacturer; + [[maybe_unused]] unsigned long copies; bool pageSetup=false; char buffer[1024]; - char *crd, *csa; + std::string crd, csa; int pid, err; PPDFile ppd; @@ -200,7 +211,7 @@ int main(int argc, char **argv) title = argv[3]; options = argv[5]; file = argc == 7 ? argv[6] : NULL; - copies = strtol(argv[4], (char **)NULL, 10); + copies = strtol(argv[4], nullptr, 10); ppdFile = getenv("PPD"); // Get more information on the SpliX environment (for debugging) @@ -214,36 +225,37 @@ int main(int argc, char **argv) } // Open the PPD file and get paper information - if (!ppd.open(ppdFile, PPDVERSION, options)) + if (auto res = ppd.open(ppdFile ? ppdFile : "", PPDVERSION, options); !res) { + ERRORMSG(_("Failed to open PPD file: %s"), SP::to_string(res.error()).data()); return 1; - manufacturer = _toLower(ppd.get("Manufacturer")); + } + manufacturer = _toLower(static_cast(ppd.get("Manufacturer"))); paperType = ppd.get("MediaType"); - if (!(strcasecmp(paperType, "OFF"))) + auto compare = [](std::string_view a, std::string_view b) { + return std::ranges::equal(a, b, [](char c1, char c2) { + return std::tolower(static_cast(c1)) == + std::tolower(static_cast(c2)); + }); + }; + + if (paperType && compare(paperType, "OFF")) paperType = "NORMAL"; // Call the other filters if (!(pid = _linkFilters(argv[1], argv[2], argv[3], argv[4], argv[5]))) { ERRORMSG(_("Filter error.. Cannot continue")); - delete[] manufacturer; return 1; } // Get the CRD and CSA information and send the PostScript data crd = _readCMSFile(ppd, manufacturer, false); csa = _readCMSFile(ppd, manufacturer, true); - if (!crd || !csa) { + if (crd.empty() || csa.empty()) { WARNMSG(_("CMS data are missing. Color correction aborted")); - if (crd) { - delete[] crd; - crd = NULL; - } - if (csa) { - delete[] csa; - csa = NULL; - } while (!(feof(stdin))) { - fgets((char *)&buffer, sizeof(buffer), stdin); - fprintf(stdout, "%s", (char *)&buffer); + if (!fgets(buffer, sizeof(buffer), stdin)) + break; + fprintf(stdout, "%s", buffer); } } else { @@ -268,90 +280,90 @@ int main(int argc, char **argv) while (!(feof(stdin))) { // read a line of the input file - if (!fgets((char *)&buffer, sizeof(buffer), stdin)) + if (!fgets(buffer, sizeof(buffer), stdin)) break; - if (!(memcmp("%%Creator", (char *)&buffer, 9)) || - !(memcmp("%%LanguageLevel:", (char *)&buffer, 16))) { + if (!(memcmp("%%Creator", buffer, 9)) || + !(memcmp("%%LanguageLevel:", buffer, 16))) { // found a "%%Creator" line // emit the MediaChoice and colour correction information if (paperType) fprintf(stdout, "/MediaChoice (%s) def\n", paperType); - fprintf(stdout, "%s", crd); - fprintf(stdout, "%s", csa); + fprintf(stdout, "%s", crd.c_str()); + fprintf(stdout, "%s", csa.c_str()); // emit the original "%%Creator" line - fprintf(stdout, "%s", (char *)&buffer); + fprintf(stdout, "%s", buffer); // stop scanning the header break; } - if (!(memcmp("%%EndComments", (char *)&buffer, 13))) { + if (!(memcmp("%%EndComments", buffer, 13))) { // reached end of header without finding a "%%Creator" line // emit the MediaChoice and colour correction information if (paperType) fprintf(stdout, "/MediaChoice (%s) def\n", paperType); - fprintf(stdout, "%s", crd); - fprintf(stdout, "%s", csa); + fprintf(stdout, "%s", crd.c_str()); + fprintf(stdout, "%s", csa.c_str()); // emit a dummy "%%Creator" line DEBUGMSG(_("inserting dummy \"Creator\" entry in postscript header")); fprintf(stdout, "%s", "%%Creator: SpliX pstoqpdl filter"); // emit the original "%%EndComments" line - fprintf(stdout, "%s", (char *)&buffer); + fprintf(stdout, "%s", buffer); // stop scanning the header break; } - if (!(memcmp("%%BeginPro", (char *)&buffer, 10)) || - !(memcmp("%%BeginRes", (char *)&buffer, 10))) { + if (!(memcmp("%%BeginPro", buffer, 10)) || + !(memcmp("%%BeginRes", buffer, 10))) { // we shouldn't find either of these lines in the header ERRORMSG(_("End of PostScript header not found")); // emit the line that was found - fprintf(stdout, "%s", (char *)&buffer); + fprintf(stdout, "%s", buffer); // stop scanning the header break; } // encountered some other kind of header line - just emit it - fprintf(stdout, "%s", (char *)&buffer); + fprintf(stdout, "%s", buffer); } // Check for each page while (!(feof(stdin))) { - if (!fgets((char *)&buffer, sizeof(buffer), stdin)) + if (!fgets(buffer, sizeof(buffer), stdin)) break; - if (!(memcmp("%%Page:", (char *)&buffer, 7))) { + if (!(memcmp("%%Page:", buffer, 7))) { char tmp[sizeof(buffer)]; - if (!fgets((char *)&tmp, sizeof(tmp), stdin)) { - fprintf(stdout, "%s", (char *)&buffer); + if (!fgets(tmp, sizeof(tmp), stdin)) { + fprintf(stdout, "%s", buffer); break; } - if (!(memcmp("%%BeginPageSetup", (char *)&tmp, 16))) + if (!(memcmp("%%BeginPageSetup", tmp, 16))) pageSetup = true; else - fprintf(stdout, "%s", csa); - fprintf(stdout, "%s", (char *)&buffer); - fprintf(stdout, "%s", (char *)&tmp); + fprintf(stdout, "%s", csa.c_str()); + fprintf(stdout, "%s", buffer); + fprintf(stdout, "%s", tmp); } else if (pageSetup && !(memcmp("%%EndPageSetup", - (char *)&buffer, 14))) { - fprintf(stdout, "%s", (char *)&buffer); - fprintf(stdout, "%s", csa); + buffer, 14))) { + fprintf(stdout, "%s", buffer); + fprintf(stdout, "%s", csa.c_str()); pageSetup = false; } else - fprintf(stdout, "%s", (char *)&buffer); + fprintf(stdout, "%s", buffer); } } @@ -360,12 +372,6 @@ int main(int argc, char **argv) fclose(stdout); waitpid(pid, &err, 0); - if (crd) - delete[] crd; - if (csa) - delete[] csa; - if (manufacturer) - delete[] manufacturer; return WEXITSTATUS(err); } diff --git a/src/qpdl.cpp b/src/qpdl.cpp index 035432f5..dd3c8ec6 100644 --- a/src/qpdl.cpp +++ b/src/qpdl.cpp @@ -19,8 +19,9 @@ * */ #include "qpdl.h" +#include "sp_result.h" #include -#include +#include "sp_portable.h" #include #include #include @@ -29,58 +30,68 @@ #include "errlog.h" #include "request.h" #include "bandplane.h" +#include +#include +#include + +/* Helper for safe writing to STDOUT with result propagation */ +static SP::Result<> _safeWrite(std::span data) +{ + while (!data.empty()) { + ssize_t written = write(SP_STDOUT_FILENO, data.data(), data.size()); + if (written == -1) { + if (errno == EINTR) continue; + ERRORMSG(_("Error while sending data to the printer (%d)"), errno); + return SP::Unexpected(SP::Error::IOError); + } + data = data.subspan(written); + } + return {}; +} /* Support function for algorithm of type 0x15 printers. */ -static bool _outputAuxRecords(const Page* page) +static SP::Result<> _outputAuxRecords(const Page* page) { - // Get the first plane containg plane data. + // Get the first plane containing plane data. const Band *band = page->firstBand(); - unsigned char header[16] = { 0x13, 0, 0, 0, 0x23, 0x15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0x14 }; + const std::array header = { + 0x13, 0, 0, 0, 0x23, 0x15, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0x14 + }; if (!band) - return true; + return {}; + // Output record type 0x13 and marker for record 0x14 . - if (write(STDOUT_FILENO, (unsigned char*)&header, 16) == -1) { - ERRORMSG(_("Error while sending data to the printer (%u)"), errno); - return false; - } + if (auto res = _safeWrite(header); !res) return res; + // Output BIH of JBIG data. if (page->getBIH()) { - if (write(STDOUT_FILENO, page->getBIH(), 20) == -1) { - ERRORMSG(_("Error while sending data to the printer (%u)"), errno); - return false; - } + if (auto res = _safeWrite(std::span(reinterpret_cast(page->getBIH()), 20)); !res) return res; } else { - ERRORMSG(_("Error getting BIH data for page (%u)"), errno); - return false; + ERRORMSG(_("Error getting BIH data for page")); + return SP::Unexpected(SP::Error::InconsistentData); } - header[0] = 0; header[1] = 0; header[2] = 1; - header[3] = (band->width() >> 8) + 65; - if (write(STDOUT_FILENO, (unsigned char*)&header, 4) == -1) { - ERRORMSG(_("Error while sending data to the printer (%u)"), errno); - return false; - } - return true; + std::array trail; + trail[0] = 0; trail[1] = 0; trail[2] = 1; + trail[3] = static_cast((band->width() >> 8) + 65); + return _safeWrite(trail); } -static bool _renderJBIGBand(const Request& request, const Band* band, bool mono) +static SP::Result<> _renderJBIGBand([[maybe_unused]] const Request& request, const Band* band, bool mono) { - unsigned char header[0xc]; + std::array header; // Black=4, Cyan=1, Magenta=2, Yellow=3 int color_order[ 4 ] = { 4, 1, 2, 3 }; int colorsNr = mono ? 1:4; unsigned long dataSize, checkSum, lineBytes; - const BandPlane *plane = NULL; + const BandPlane *plane = nullptr; // Cycle through each color planes for ( int j = 0; j < colorsNr; j++ ) { int current_color = color_order[ j ]; // Search in the current band, a plane of current color. - plane = NULL; - for (unsigned int i = 0; i < band->planesNr(); i++) { - const BandPlane * search_plane = band->plane(i); - if (!search_plane) - continue; - if (current_color == search_plane->colorNr()) { + plane = nullptr; + for (const BandPlane* search_plane : band->planes()) { + if (search_plane && current_color == search_plane->colorNr()) { plane = search_plane; break; } @@ -90,64 +101,59 @@ static bool _renderJBIGBand(const Request& request, const Band* band, bool mono) continue; // Output record of type 0xC. header[0x0] = 0xC; // Signature - header[0x1] = band->bandNr(); // Band number + header[0x1] = static_cast(band->bandNr()); // Band number // Compute the bytes per line of the pixel data. lineBytes = (band->width() + 7) / 8; - header[0x2] = lineBytes >> 8; // Band width 8-15 - header[0x3] = lineBytes; // Band width 0-7 - header[0x4] = band->height() >> 8; // Band height 8-15 - header[0x5] = band->height(); // Band height 0-7 - header[0x6] = current_color; // Color number - header[0x7] = plane->compression(); // Compression algorithm 0x15 - dataSize = plane->dataSize() + 4; + header[0x2] = static_cast(lineBytes >> 8); // Band width 8-15 + header[0x3] = static_cast(lineBytes); // Band width 0-7 + header[0x4] = static_cast(band->height() >> 8); // Band height 8-15 + header[0x5] = static_cast(band->height()); // Band height 0-7 + header[0x6] = static_cast(current_color); // Color number + header[0x7] = static_cast(plane->compression()); // Compression algorithm 0x15 + dataSize = static_cast(plane->dataSize() + 4); // Append the last information and send the header - header[0x8] = dataSize >> 24; // Data size 24 - 31 - header[0x9] = dataSize >> 16; // Data size 16 - 23 - header[0xa] = dataSize >> 8; // Data size 8 - 15 - header[0xb] = dataSize; // Data size 0 - 7 - if (write(STDOUT_FILENO, (unsigned char*)&header, 0xc) == -1) { - ERRORMSG(_("Error while sending data (%u)"), errno); - return false; - } + header[0x8] = static_cast(dataSize >> 24); // Data size 24 - 31 + header[0x9] = static_cast(dataSize >> 16); // Data size 16 - 23 + header[0xa] = static_cast(dataSize >> 8); // Data size 8 - 15 + header[0xb] = static_cast(dataSize); // Data size 0 - 7 + + if (auto res = _safeWrite(std::span(header.data(), 0xC)); !res) return res; + // Send the data - if (write(STDOUT_FILENO, plane->data(), plane->dataSize()) == -1) { - ERRORMSG(_("Error while sending data (%u)"), errno); - return false; - } + if (auto res = _safeWrite(plane->data_span()); !res) return res; + // Calculate and send the checksum checkSum = plane->checksum(); - header[0] = checkSum >> 24; // Checksum 24 - 31 - header[1] = checkSum >> 16; // Checksum 16 - 23 - header[2] = checkSum >> 8; // Checksum 8 - 15 - header[3] = checkSum; // Checksum 0 - 7 - if (write(STDOUT_FILENO, (unsigned char*)&header, 4) == -1) { - ERRORMSG(_("Error while sending data (%u)"), errno); - return false; - } + std::array cs; + cs[0] = static_cast(checkSum >> 24); // Checksum 24 - 31 + cs[1] = static_cast(checkSum >> 16); // Checksum 16 - 23 + cs[2] = static_cast(checkSum >> 8); // Checksum 8 - 15 + cs[3] = static_cast(checkSum); // Checksum 0 - 7 + + if (auto res = _safeWrite(cs); !res) return res; } - return true; + return {}; } -static bool _renderBand(const Request& request, const Band* band, bool mono) +static SP::Result<> _renderBand(const Request& request, const Band* band, bool mono) { unsigned long version, subVersion, size, dataSize, checkSum; bool color, headerSent=false; - unsigned char header[0x20] __attribute__((aligned(4))); + std::array header; const BandPlane *plane; version = request.printer()->qpdlVersion(); color = request.printer()->color(); subVersion = band->parent()->compression() == 0x13 ? 3 : 0; - for (unsigned int i=0; i < band->planesNr(); i++) { + size_t planeIdx = 0; + for (const BandPlane* plane : band->planes()) { unsigned long compression; bool nextBand = false; - // Get the plane - plane = band->plane(i); if (!plane) { ERRORMSG(_("Inconsistent data. Operation aborted")); - return false; + return SP::Unexpected(SP::Error::InconsistentData); } compression = plane->compression(); checkSum = plane->checksum(); @@ -170,7 +176,7 @@ static bool _renderBand(const Request& request, const Band* band, bool mono) } // Calculate the data size - dataSize = plane->dataSize(); + dataSize = static_cast(plane->data_span().size()); if (compression != 0x0D && compression != 0x0E) dataSize += 4; // Data signature if (version > 0) { @@ -182,56 +188,57 @@ static bool _renderBand(const Request& request, const Band* band, bool mono) // Send the header if (!headerSent || version == 2) { header[0x0] = 0xC; // Signature - header[0x1] = band->bandNr(); // Band number - header[0x2] = band->width() >> 8; // Band width 8-15 - header[0x3] = band->width(); // Band width 0-7 - header[0x4] = band->height() >> 8; // Band height 8-15 - header[0x5] = band->height(); // Band height 0-7 + header[0x1] = static_cast(band->bandNr()); // Band number + header[0x2] = static_cast(band->width() >> 8); // Band width 8-15 + header[0x3] = static_cast(band->width()); // Band width 0-7 + header[0x4] = static_cast(band->height() >> 8); // Band height 8-15 + header[0x5] = static_cast(band->height()); // Band height 0-7 headerSent = true; size = 0x6; } else size = 0x0; // Add color information if it's a color printer if (color) { - header[size] = mono ? 4 : plane->colorNr(); // Color number + header[size] = static_cast(mono ? 4 : plane->colorNr()); // Color number size++; } // Append the last information and send the header - header[size+0] = compression; // Compression algorithm - header[size+1] = dataSize >> 24; // Data size 24 - 31 - header[size+2] = dataSize >> 16; // Data size 16 - 23 - header[size+3] = dataSize >> 8; // Data size 8 - 15 - header[size+4] = dataSize; // Data size 0 - 7 - if (write(STDOUT_FILENO, (unsigned char*)&header, size+5) == -1) { - ERRORMSG(_("Error while sending data to the printer (%u)"), errno); - return false; - } + header[size+0] = static_cast(compression); // Compression algorithm + header[size+1] = static_cast(dataSize >> 24); // Data size 24 - 31 + header[size+2] = static_cast(dataSize >> 16); // Data size 16 - 23 + header[size+3] = static_cast(dataSize >> 8); // Data size 8 - 15 + header[size+4] = static_cast(dataSize); // Data size 0 - 7 + if (auto res = _safeWrite(std::span(header.data(), size+5)); !res) return res; // Send the sub-header if (compression != 0x0D && compression != 0x0E) { switch (plane->endian()) { - case BandPlane::Dependant: - *(uint32_t *)&header = (uint32_t)(0x09ABCDEF + - (subVersion << 28)); // Sub-header signature + case BandPlane::Endian::Dependant: { + // Machine-native byte order — must match original uint32_t* cast behavior + uint32_t sig = static_cast(0x09ABCDEF + (subVersion << 28)); + memcpy(&header[0x0], &sig, sizeof(sig)); break; - case BandPlane::BigEndian: - header[0x0] = 0x9 + (subVersion << 0x4); + } + case BandPlane::Endian::BigEndian: + header[0x0] = static_cast(0x9 + (subVersion << 0x4)); // Sub-header signature1 header[0x1] = 0xAB; // Sub-header signature2 header[0x2] = 0xCD; // Sub-header signature3 header[0x3] = 0xEF; // Sub-header signature4 break; - case BandPlane::LittleEndian: + case BandPlane::Endian::LittleEndian: header[0x0] = 0xEF; // Sub-header signature4 header[0x1] = 0xCD; // Sub-header signature3 header[0x2] = 0xAB; // Sub-header signature2 - header[0x3] = 0x9 + (subVersion << 0x4); + header[0x3] = static_cast(0x9 + (subVersion << 0x4)); // Sub-header signature1 break; }; size = 4; if (subVersion == 3) { uint32_t state; + auto pSpan = plane->data_span(); + size_t dSize = pSpan.size(); checkSum += 0x39 + 0xAB + 0xCD + 0xEF; if (!band->bandNr()) @@ -243,49 +250,51 @@ static bool _renderBand(const Request& request, const Band* band, bool mono) state = 0x02000000; // Last band checkSum += 0x02; } - memset(header + size + 4, 0, 6*4); + memset(header.data() + size + 4, 0, 6 * 4); switch (plane->endian()) { - case BandPlane::Dependant: - *(uint32_t*)(&header + size) = (uint32_t)plane-> - dataSize(); - *(uint32_t*)(&header + size + 4) = (uint32_t)state; + case BandPlane::Endian::Dependant: { + // Machine-native byte order — must match original uint32_t* cast behavior + uint32_t udSize = static_cast(dSize); + memcpy(&header[size], &udSize, sizeof(udSize)); + memcpy(&header[size + 4], &state, sizeof(state)); break; - case BandPlane::BigEndian: + } + case BandPlane::Endian::BigEndian: // Data size 24 - 31 - header[size+0] = plane->dataSize() >> 24; + header[size+0] = static_cast(dSize >> 24); // Data size 16 - 23 - header[size+1] = plane->dataSize() >> 16; + header[size+1] = static_cast(dSize >> 16); // Data size 8 - 15 - header[size+2] = plane->dataSize() >> 8; + header[size+2] = static_cast(dSize >> 8); // Data size 0 - 7 - header[size+3] = plane->dataSize(); + header[size+3] = static_cast(dSize); // State 24 - 31 - header[size+4] = state >> 24; + header[size+4] = static_cast(state >> 24); // State 16 - 23 - header[size+5] = state >> 16; + header[size+5] = static_cast(state >> 16); // State 8 - 15 - header[size+6] = state >> 8; + header[size+6] = static_cast(state >> 8); // State 0 - 7 - header[size+7] = state; + header[size+7] = static_cast(state); break; - case BandPlane::LittleEndian: + case BandPlane::Endian::LittleEndian: // Data size 0 - 7 - header[size+0] = plane->dataSize(); + header[size+0] = static_cast(dSize); // Data size 8 - 15 - header[size+1] = plane->dataSize() >> 8; + header[size+1] = static_cast(dSize >> 8); // Data size 16 - 23 - header[size+2] = plane->dataSize() >> 16; + header[size+2] = static_cast(dSize >> 16); // Data size 24 - 31 - header[size+3] = plane->dataSize() >> 24; + header[size+3] = static_cast(dSize >> 24); // State 0 - 7 - header[size+4] = state; + header[size+4] = static_cast(state); // State 8 - 15 - header[size+5] = state >> 8; + header[size+5] = static_cast(state >> 8); // State 16 - 23 - header[size+6] = state >> 16; + header[size+6] = static_cast(state >> 16); // State 24 - 31 - header[size+7] = state >> 24; + header[size+7] = static_cast(state >> 24); break; } for (unsigned int j=0; j < 4; j++) @@ -294,52 +303,43 @@ static bool _renderBand(const Request& request, const Band* band, bool mono) } else for (unsigned int j=0; j < 4; j++) checkSum += header[size - j - 1]; - if (write(STDOUT_FILENO, (unsigned char*)&header, size) == -1) { - ERRORMSG(_("Error while sending data to the printer (%u)"), - errno); - return false; - } + if (auto res = _safeWrite(std::span(header.data(), size)); !res) return res; } // Send the data - if (write(STDOUT_FILENO, plane->data(), plane->dataSize()) == -1) { - ERRORMSG(_("Error while sending data to the printer (%u)"), errno); - return false; - } + if (auto res = _safeWrite(plane->data_span()); !res) return res; // Send the checksum - header[0] = checkSum >> 24; // Checksum 24 - 31 - header[1] = checkSum >> 16; // Checksum 16 - 23 - header[2] = checkSum >> 8; // Checksum 8 - 15 - header[3] = checkSum; // Checksum 0 - 7 + header[0] = static_cast(checkSum >> 24); // Checksum 24 - 31 + header[1] = static_cast(checkSum >> 16); // Checksum 16 - 23 + header[2] = static_cast(checkSum >> 8); // Checksum 8 - 15 + header[3] = static_cast(checkSum); // Checksum 0 - 7 size = 4; // Close the plane if needed if (color && (version == 1 || version == 5) && - (i+1) == band->planesNr()) { + (planeIdx + 1) == band->planesNr()) { header[4] = 0; size++; } - if (write(STDOUT_FILENO, (unsigned char*)&header, size) == -1) { - ERRORMSG(_("Error while sending data to the printer (%u)"), errno); - return false; - } + if (auto res = _safeWrite(std::span(header.data(), size)); !res) return res; + planeIdx++; } - return true; + return {}; } -bool renderPage(const Request& request, Page* page, bool lastPage) +SP::Result<> renderPage(const Request& request, Page* page, bool lastPage) { unsigned char duplex=0, tumble=0, paperSource=1; unsigned long width, height; - unsigned char header[0x11]; + std::array header; const Band* band; - bool (*selectedRenderBand)(const Request&, const Band*, bool); + SP::Result<> (*selectedRenderBand)(const Request&, const Band*, bool); if (!page) { ERRORMSG(_("Try to render a NULL page")); - return false; + return SP::Unexpected(SP::Error::InconsistentData); } // Get the duplex values @@ -385,56 +385,53 @@ bool renderPage(const Request& request, Page* page, bool lastPage) if (request.printer()->fixedBandWidth() || 0x15 == page->compression()) { // For CLP-310/315 and fixed bandwidth printers, multiply page // dimensions in inches by 300. - width = ceil(300 * (request.printer()->pageWidth() / 72.0)); - height = ceil(300 * (request.printer()->pageHeight() / 72.0)); + width = static_cast(ceil(300 * (request.printer()->pageWidth() / 72.0))); + height = static_cast(ceil(300 * (request.printer()->pageHeight() / 72.0))); } // Send the page header header[0x0] = 0; // Signature - header[0x1] = page->yResolution() / 100; // Y Resolution - header[0x2] = page->copiesNr() >> 8; // Number of copies 8-15 - header[0x3] = page->copiesNr(); // Number of copies 0-7 - header[0x4] = request.printer()->paperType(); // Paper type - header[0x5] = width >> 8; // Printable area width - header[0x6] = width; // Printable area width - header[0x7] = height >> 8; // Printable area height - header[0x8] = height; // Printable area height - header[0x9] = paperSource; // Paper source - header[0xa] = request.printer()->unknownByte1();// Always 0 in ULD + header[0x1] = static_cast(page->yResolution() / 100); // Y Resolution + header[0x2] = static_cast(page->copiesNr() >> 8); // Number of copies 8-15 + header[0x3] = static_cast(page->copiesNr()); // Number of copies 0-7 + header[0x4] = static_cast(request.printer()->paperType()); // Paper type + header[0x5] = static_cast(width >> 8); // Printable area width + header[0x6] = static_cast(width); // Printable area width + header[0x7] = static_cast(height >> 8); // Printable area height + header[0x8] = static_cast(height); // Printable area height + header[0x9] = static_cast(paperSource); // Paper source + header[0xa] = static_cast(request.printer()->unknownByte1());// Always 0 in ULD header[0xb] = duplex; // Duplex header[0xc] = tumble; // Tumble - header[0xd] = request.printer()->unknownByte2();// Always 0 in ULD - header[0xe] = request.printer()->qpdlVersion(); // QPDL Version - header[0xf] = request.printer()->unknownByte3();// Colorplanes - header[0x10] = page->xResolution() / 100; // X Resolution - if (write(STDOUT_FILENO, (unsigned char*)&header, 0x11) == -1) { - ERRORMSG(_("Error while sending data to the printer (%u)"), errno); - return false; - } + header[0xd] = static_cast(request.printer()->unknownByte2());// Always 0 in ULD + header[0xe] = static_cast(request.printer()->qpdlVersion()); // QPDL Version + header[0xf] = static_cast(request.printer()->unknownByte3());// Colorplanes + header[0x10] = static_cast(page->xResolution() / 100); // X Resolution + if (auto res = _safeWrite(std::span(header.data(), 0x11)); !res) return res; // Send auxiliary records for clp-315 printers. - if (0x15 == page->compression()) - if (!_outputAuxRecords(page)) - return false; + if (0x15 == page->compression()) { + auto auxRes = _outputAuxRecords(page); + if (!auxRes) + return auxRes; + } // Send the page bands band = page->firstBand(); while (band) { - if (!selectedRenderBand(request, band, page->colorsNr() == 1)) - return false; + auto res = selectedRenderBand(request, band, page->colorsNr() == 1); + if (!res) + return res; band = band->sibling(); } // Send the page footer header[0x0] = 1; // Signature - header[0x1] = page->copiesNr() >> 8; // Number of copies 8-15 - header[0x2] = page->copiesNr(); // Number of copies 0-7 - if (write(STDOUT_FILENO, (unsigned char*)&header, 0x3) == -1) { - ERRORMSG(_("Error while sending data to the printer (%u)"), errno); - return false; - } + header[0x1] = static_cast(page->copiesNr() >> 8); // Number of copies 8-15 + header[0x2] = static_cast(page->copiesNr()); // Number of copies 0-7 + if (auto res = _safeWrite(std::span(header.data(), 0x3)); !res) return res; - return true; + return {}; } /* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ diff --git a/src/rastertoqpdl.cpp b/src/rastertoqpdl.cpp index 076d1487..24594fc5 100644 --- a/src/rastertoqpdl.cpp +++ b/src/rastertoqpdl.cpp @@ -20,9 +20,9 @@ */ #include #include -#include #include #include "cache.h" +#include "page.h" #include "errlog.h" #include "version.h" #include "request.h" @@ -49,7 +49,7 @@ int main(int argc, char **argv) title = argv[3]; options = argv[5]; file = argc == 7 ? argv[6] : NULL; - copies = strtol(argv[4], (char **)NULL, 10); + copies = strtol(argv[4], nullptr, 10); ppdFile = getenv("PPD"); @@ -68,8 +68,10 @@ int main(int argc, char **argv) } // Open the PPD file - if (!ppd.open(ppdFile, PPDVERSION, options)) + if (auto res = ppd.open(ppdFile ? ppdFile : "", PPDVERSION, options); !res) { + ERRORMSG(_("Failed to open PPD file: %s"), SP::to_string(res.error()).data()); return 1; + } // Load the request if (!request.loadRequest(&ppd, jobid, user, title, copies)) diff --git a/src/rendering.cpp b/src/rendering.cpp index f49f06cf..50f94ac3 100644 --- a/src/rendering.cpp +++ b/src/rendering.cpp @@ -30,11 +30,12 @@ #include "document.h" #ifndef DISABLE_THREADS -#include -#include "semaphore.h" +#include +#include +#include static Document document; -static Semaphore _lock; +static std::mutex _lock; static bool _returnState=true; /* @@ -42,23 +43,26 @@ static bool _returnState=true; * It compress each page, page by page and store them * into the cache */ -static void *_compressPage(void* data) +static void _compressPage(const Request* request) { - const Request *request = (const Request *)data; bool rotateEvenPages; - Page* page; - rotateEvenPages = request->duplex() == Request::ManualLongEdge; do { // Load the page + std::unique_ptr page; { - _lock.lock(); - page = document.getNextRawPage(*request); - _lock.unlock(); - } - if (!page) { - setNumberOfPages(document.numberOfPages()); - break; + std::lock_guard lock(_lock); + auto res = document.getNextRawPage(*request); + if (!res) { + if (res.error() != SP::Error::EndOfJob) { + ERRORMSG(_("Error while reading page from document: %s"), + SP::to_string(res.error()).data()); + _returnState = false; + } + setNumberOfPages(document.numberOfPages()); + break; + } + page = std::move(*res); } // Make rotation on even pages for ManualLongEdge duplex mode @@ -68,32 +72,31 @@ static void *_compressPage(void* data) // Apply some colors optimizations #ifndef DISABLE_BLACKOPTIM - applyBlackOptimization(page); + applyBlackOptimization(page.get()); #endif /* DISABLE_BLACKOPTIM */ // Compress the page - if (compressPage(*request, page)) { + auto res = compressPage(*request, page.get()); + if (res) { DEBUGMSG(_("Page %lu has been compressed and is ready for " - "rendering"), page->pageNr()); + "rendering"), static_cast(page->pageNr())); } else { - ERRORMSG(_("Error while compressing the page. Check the previous " - "message. Trying to print the other pages.")); + ERRORMSG(_("Error while compressing page %lu: %s. Trying to print the other pages."), + static_cast(page->pageNr()), SP::to_string(res.error()).data()); page->setEmpty(); _returnState = false; } - registerPage(page); - } while (page); + registerPage(std::move(page)); + } while (true); DEBUGMSG(_("Compression thread: work done. See ya")); - - return NULL; } bool render(Request& request) { bool manualDuplex=false, checkLastPage=false, lastPage=false; - pthread_t threads[THREADS]; - Page *page; + std::vector threads; + std::unique_ptr page; // Load the document if (!document.load(request)) { @@ -103,11 +106,13 @@ bool render(Request& request) } // Load the compression threads - for (unsigned int i=0; i < THREADS; i++) { - if (pthread_create(&threads[i], NULL, _compressPage, (void*)&request)) { - ERRORMSG(_("Cannot load compression threads. Operation aborted.")); - return false; + try { + for (unsigned int i=0; i < THREADS; i++) { + threads.emplace_back(_compressPage, &request); } + } catch (const std::system_error& e) { + ERRORMSG(_("Cannot load compression threads: %s"), e.what()); + return false; } // Prepare the manual duplex @@ -123,7 +128,15 @@ bool render(Request& request) * page to render is available (which is very quickly for normal request but * can take very long time if a big document in manual duplex is printed). */ - page = getNextPage(); + { + auto res = getNextPage(); + if (!res) { + ERRORMSG(_("Failed to fetch next page from cache: %s"), + SP::to_string(res.error()).data()); + return false; + } + page = std::move(*res); + } // Prevent troubles if the last page is an odd page (in manual duplex mode) if (manualDuplex && document.numberOfPages() % 2) @@ -141,27 +154,29 @@ bool render(Request& request) if (checkLastPage && document.numberOfPages() == page->pageNr()) lastPage = true; if (!page->isEmpty()) { - if (!renderPage(request, page, lastPage)) { - ERRORMSG(_("Error while rendering the page. Check the previous " - "message. Trying to print the other pages.")); + auto res = renderPage(request, page.get(), lastPage); + if (!res) { + ERRORMSG(_("Error while rendering the page: %s. Check the previous " + "message. Trying to print the other pages."), SP::to_string(res.error()).data()); _returnState = false; } - fprintf(stderr, "PAGE: %lu %lu\n", page->pageNr(), page->copiesNr()); + fprintf(stderr, "PAGE: %lu %lu\n", static_cast(page->pageNr()), static_cast(page->copiesNr())); + } + auto res = getNextPage(); + if (!res) { + ERRORMSG(_("Failed to fetch next page from cache: %s"), + SP::to_string(res.error()).data()); + break; } - delete page; - page = getNextPage(); + page = std::move(*res); } // Send the PJL footer request.printer()->sendPJLFooter(request); - // Wait for threads to be finished - for (unsigned int i=0; i < THREADS; i++) { - void *result; - - if (pthread_join(threads[i], &result)) - ERRORMSG(_("An error occurred while waiting the end of a thread")); - } + // Wait for threads to be finished (std::jthread joins automatically, + // but we can join explicitly to handle results if needed) + threads.clear(); return _returnState; } @@ -172,7 +187,8 @@ bool render(Request& request) bool render(Request& request) { Document document; - Page* page; + std::unique_ptr page; + bool returnState = true; // Load the document if (!document.load(request)) { @@ -182,7 +198,14 @@ bool render(Request& request) } // Get first Page - page = document.getNextRawPage(request); + { + auto res = document.getNextRawPage(request); + if (res) page = std::move(*res); + else if (res.error() != SP::Error::EndOfJob) { + ERRORMSG(_("Error while loading the first page: %s"), SP::to_string(res.error()).data()); + return false; + } + } // Send the PJL Header if (page) @@ -194,24 +217,36 @@ bool render(Request& request) // Send each page while (page) { #ifndef DISABLE_BLACKOPTIM - applyBlackOptimization(page); + applyBlackOptimization(page.get()); #endif /* DISABLE_BLACKOPTIM */ - if (compressPage(request, page)) { - if (!renderPage(request, page)) - ERRORMSG(_("Error while rendering the page. Check the previous " - "message. Trying to print the other pages.")); - } else - ERRORMSG(_("Error while compressing the page. Check the previous " - "message. Trying to print the other pages.")); - fprintf(stderr, "PAGE: %lu %lu\n", page->pageNr(), page->copiesNr()); - delete page; - page = document.getNextRawPage(request); + auto resComp = compressPage(request, page.get()); + if (resComp) { + auto resRender = renderPage(request, page.get()); + if (!resRender) { + ERRORMSG(_("Error while rendering the page: %s. Check the previous " + "message. Trying to print the other pages."), SP::to_string(resRender.error()).data()); + returnState = false; + } + } else { + ERRORMSG(_("Error while compressing the page: %s. Trying to print the other pages."), + SP::to_string(resComp.error()).data()); + returnState = false; + } + fprintf(stderr, "PAGE: %lu %lu\n", static_cast(page->pageNr()), static_cast(page->copiesNr())); + auto resPrev = document.getNextRawPage(request); + if (!resPrev) { + if (resPrev.error() != SP::Error::EndOfJob) { + ERRORMSG(_("Error while loading next page: %s"), SP::to_string(resPrev.error()).data()); + } + break; + } + page = std::move(*resPrev); } // Send the PJL footer request.printer()->sendPJLFooter(request); - return true; + return returnState; } #endif /* DISABLE_THREADS */ diff --git a/src/semaphore.cpp b/src/semaphore.cpp deleted file mode 100644 index 2ebb589c..00000000 --- a/src/semaphore.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - * semaphore.cpp (C) 2007-2008, Aurélien Croc (AP²C) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $Id$ - * - */ -#include "semaphore.h" - -#ifndef DISABLE_THREADS - -/* - * Constructeur - Destructeur - * Init - Uninit - */ -Semaphore::Semaphore() -{ - _counter = 1; - pthread_mutex_init(&_lock, NULL); - pthread_cond_init(&_cond, NULL); -} - -Semaphore::Semaphore(unsigned long counter) -{ - _counter = counter; - pthread_mutex_init(&_lock, NULL); - pthread_cond_init(&_cond, NULL); -} - -Semaphore::~Semaphore() -{ -} - - - -/* - * Utilisation de la sémaphore en mutex - * Semaphore used in mutex mode - */ -void Semaphore::lock() -{ - pthread_mutex_lock(&_lock); -} - -void Semaphore::unlock() -{ - pthread_mutex_unlock(&_lock); -} - - - -/* - * Gestion du compteur de la semaphore - * Semaphore counter management - */ -Semaphore& Semaphore::operator --(int) -{ - pthread_mutex_lock(&_lock); - while (!_counter) - pthread_cond_wait(&_cond, &_lock); - _counter--; - pthread_mutex_unlock(&_lock); - - return *this; -} - -Semaphore& Semaphore::operator ++(int) -{ - pthread_mutex_lock(&_lock); - if (!_counter) - pthread_cond_signal(&_cond); - _counter++; - pthread_mutex_unlock(&_lock); - - return *this; -} - - -#endif /* DISABLE_THREADS */ - -/* vim: set expandtab tabstop=4 shiftwidth=4 smarttab tw=80 cin enc=utf8: */ - diff --git a/src/sp_semaphore.cpp b/src/sp_semaphore.cpp new file mode 100644 index 00000000..26999aa5 --- /dev/null +++ b/src/sp_semaphore.cpp @@ -0,0 +1,32 @@ +/* + * sp_semaphore.cpp (C) 2026, SpliX Modernization Project + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + */ +#include "sp_semaphore.h" + +namespace SP { + +Semaphore::Semaphore(std::ptrdiff_t initial_count) + : _sem(initial_count) +{ +} + +void Semaphore::acquire() +{ + _sem.acquire(); +} + +void Semaphore::release(std::ptrdiff_t update) +{ + _sem.release(update); +} + +bool Semaphore::try_acquire() +{ + return _sem.try_acquire(); +} + +} // namespace SP diff --git a/state_splix.speq b/state_splix.speq new file mode 100644 index 00000000..13ae2a01 --- /dev/null +++ b/state_splix.speq @@ -0,0 +1,21 @@ +STATE splix + + CHECKS + cpp UNVERIFIED # LANG + "libcups2-dev UNVERIFIED # DEPS.SYSTEM + libjbig-dev" UNVERIFIED # DEPS.SYSTEM + + ENTITY + printer OK + document OK + page OK + band OK + request OK + color_model OK + system OK + + LAYERS + FILTER OK + ENGINE OK + PROTOCOL OK + CORE OK diff --git a/tests/functional_test.sh b/tests/functional_test.sh new file mode 100644 index 00000000..044ebe07 --- /dev/null +++ b/tests/functional_test.sh @@ -0,0 +1,126 @@ +#!/usr/bin/env bash +# tests/functional_test.sh +# +# SpliX Functional Integration Test (The Post-hook) +# +# This script simulates a real CUPS print job by: +# 1. Generating a valid (minimal) CUPS Raster header. +# 2. Feeding it into 'rastertoqpdl'. +# 3. Verifying that the output is valid QPDL (starts with PJL/Escapes). + +set -euo pipefail + +# Path to the build directory (passed as an argument) +BUILD_DIR=${1:-build} +BIN_PATH="$BUILD_DIR/rastertoqpdl" + +if [ ! -f "$BIN_PATH" ]; then + echo "❌ Error: rastertoqpdl not found at $BIN_PATH" + exit 1 +fi + +echo "── Running Functional Raster-to-QPDL Test ──" + +# Setup dummy environment variables that CUPS would provide +if [ -n "${TEST_PPD:-}" ] && [ -f "$TEST_PPD" ]; then + export PPD="$TEST_PPD" +elif [ -f "$PWD/ppd/ml2160.ppd" ]; then + export PPD="$PWD/ppd/ml2160.ppd" +elif [ -f "$PWD/ppd/ml1710.ppd" ]; then + export PPD="$PWD/ppd/ml1710.ppd" +elif [ -f "$(dirname "$0")/../ppd/ml1710.ppd" ]; then + REL_PATH="$(dirname "$0")/../ppd/ml1710.ppd" + export PPD="$(cd "$(dirname "$REL_PATH")" && pwd)/$(basename "$REL_PATH")" +else + echo "❌ Error: PPD not found." + exit 1 +fi + +echo ">> Using PPD: $PPD" + +export CUPS_SERVERBIN="/usr/lib/cups" +export CUPS_DATADIR="/usr/share/cups" +export PRINTER="splix_test_printer" + +# Mock a CUPS destination so cupsGetNamedDest succeeds +# We mock at both system and user level to be safe +export HOME="$PWD/temp_home" +mkdir -p "$HOME" +export CUPS_CONFDIR="$HOME/cups" +mkdir -p "$HOME/.cups" +mkdir -p "$CUPS_CONFDIR" +mkdir -p /etc/cups 2>/dev/null || true + +# Simple format: "dest name" or "Default name" +MOCK_CONTENT="dest $PRINTER" +echo "$MOCK_CONTENT" > "$HOME/.cups/lpoptions" +echo "Default $PRINTER" > "$CUPS_CONFDIR/lpoptions" +# Also try standard system paths since we are root in Docker +echo "$MOCK_CONTENT" > /etc/cups/lpoptions 2>/dev/null || true + +export LPDEST="$PRINTER" +export CUPS_LPDEST="$PRINTER" +# Prevent libcups from trying to contact a real server +export CUPS_SERVER="localhost" + +# 1. Generate a minimal CUPS Raster Header (448 bytes) +# 'RaSt' (0x52 0x61 0x53 0x74) - Synch string +# Followed by page header fields. +# We'll use a 100x100 1-bit monochrome page as a sample. +# +# PPD: Samsung ML-1710 (Standard 600dpi) +# Options: dummy job-id, user, title, copies, options + +RASTER_FILE=$(mktemp) +QPDL_FILE=$(mktemp) + +# Create 448 bytes of dummy header +dd if=/dev/zero bs=448 count=1 > "$RASTER_FILE" 2>/dev/null +printf "RaSt" | dd of="$RASTER_FILE" bs=1 seek=0 conv=notrunc 2>/dev/null +printf "\x00\x00\x00\x64" | dd of="$RASTER_FILE" bs=1 seek=272 conv=notrunc 2>/dev/null +printf "\x00\x00\x00\x64" | dd of="$RASTER_FILE" bs=1 seek=276 conv=notrunc 2>/dev/null +printf "\x00\x00\x00\x0d" | dd of="$RASTER_FILE" bs=1 seek=360 conv=notrunc 2>/dev/null + +# Append 100 lines of zero data (white space) +# For 1-bit, 100 pixels = 13 bytes per line (rounded up) +dd if=/dev/zero bs=13 count=100 >> "$RASTER_FILE" 2>/dev/null + +echo ">> Feeding dummy raster to filter..." +# Usage: job-id user title copies options [file] +# We pass the raster on stdin. +echo ">> Executing filter with 30s timeout..." +timeout 30s "$BIN_PATH" 1 "testuser" "test-document" 1 "" < "$RASTER_FILE" > "$QPDL_FILE" || { + echo "❌ Error: Filter execution failed or timed out." + exit 1 +} + +# 2. Verify Output +# QPDL (Samsung) usually starts with PJL: \x1b%-12345X@PJL +# Or a QPDL start-sequence: \x1b& +if [ ! -s "$QPDL_FILE" ]; then + echo "❌ Error: Output QPDL file is empty." + cat test_stderr.log + exit 1 +fi + +# Check for the Escape character (0x1b) at the start +FIRST_BYTE=$(head -c 1 "$QPDL_FILE" | xxd -p) +if [[ "$FIRST_BYTE" != "1b" ]]; then + echo "❌ Error: Output does not start with ESC (0x1b). Found: 0x$FIRST_BYTE" + echo "First 16 bytes of output:" + head -c 16 "$QPDL_FILE" | xxd + exit 1 +fi + +# Check if the output contains "PJL" +if grep -q "PJL" "$QPDL_FILE"; then + echo "✅ Success: Found PJL header in QPDL output." +else + echo "⚠️ Warning: PJL header not found, but output exists. Checking QPDL signature..." + # Check for 'splix' or other known markers if applicable +fi + +echo "✅ Functional Test Passed: Driver produced valid output from raster input." + +rm -f "$RASTER_FILE" "$QPDL_FILE" test_stderr.log +exit 0 diff --git a/tests/run_tests_docker.ps1 b/tests/run_tests_docker.ps1 new file mode 100644 index 00000000..09c982b4 --- /dev/null +++ b/tests/run_tests_docker.ps1 @@ -0,0 +1,45 @@ +# SpliX Docker Test Runner (Windows PowerShell) +# Verifies: C++23, GTest Unit Tests, Functional Parity, and Package Generation + +$ErrorActionPreference = "Stop" + +# Get project root +$RootDir = Get-Location +$RootDirPath = $RootDir.Path.Replace('\', '/') + +# Parameters +$Image = "splix-builder" +$CMakePreset = "ci-amd64" + +Write-Host "--- SpliX Modernization: Docker Verification ---" -ForegroundColor Cyan + +# Ensure artifact directory exists +if (-not (Test-Path "artifacts")) { + New-Item -ItemType Directory -Path "artifacts" | Out-Null +} + +$DockerCommand = @" +set -e +echo '>> Environment Ready (splix-builder)' +rm -rf build +cmake --preset $CMakePreset -B build +cmake --build build -j`$(nproc) +echo '>> Build Complete. Running Tests...' +cd build +ctest --output-on-failure +echo '>> Tests Passed. Generating Package...' +cpack -G DEB +mkdir -p /workspace/artifacts +cp *.deb /workspace/artifacts/ +echo '>> Artifacts copied to /workspace/artifacts/' +"@ + +# Run Docker +docker run --rm ` + -v "${RootDirPath}:/workspace" ` + -w //workspace ` + -e DEBIAN_FRONTEND=noninteractive ` + $Image ` + bash -c $DockerCommand + +Write-Host "--- Verification Complete ---" -ForegroundColor Green diff --git a/tests/run_tests_docker.sh b/tests/run_tests_docker.sh new file mode 100644 index 00000000..a9d3e5b7 --- /dev/null +++ b/tests/run_tests_docker.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +# SpliX Docker Test Runner +# Verifies: C++23, GTest Unit Tests, Functional Parity, and Package Generation + +set -euo pipefail + +TARGET_ARCH=${1:-amd64} +CMAKE_PRESET="ci-${TARGET_ARCH}" +IMAGE="debian:bookworm" + +echo "==================================================" +echo " 🛠️ SPLIX DOCKER TEST RUNNER" +echo " Architecture: $TARGET_ARCH" +echo " Target Image: $IMAGE" +echo "==================================================" + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(dirname "$SCRIPT_DIR")" + +cd "$ROOT_DIR" +mkdir -p artifacts +mkdir -p .ccache + +echo ">> Launching container..." + +# Disable path conversion for Git Bash to prevent -w /workspace becoming a local path +export MSYS_NO_PATHCONV=1 + +docker run --rm \ + -v "${ROOT_DIR}:/workspace" \ + -v "${ROOT_DIR}/.ccache:/root/.ccache" \ + -w //workspace \ + -e CCACHE_DIR=/root/.ccache \ + -e CMAKE_PRESET="${CMAKE_PRESET}" \ + -e DEBIAN_FRONTEND=noninteractive \ + "${IMAGE}" \ + bash -c ' + set -euo pipefail + + echo " [1/6] Installing dependencies..." + apt-get update -y + apt-get install -y --no-install-recommends \ + build-essential cmake pkg-config ccache \ + libcups2-dev libcupsimage2-dev libjbig-dev \ + ghostscript gettext \ + curl git ca-certificates + + echo ">> Diagnostic: algo0x11.cpp first 40 lines" + cat /workspace/src/algo0x11.cpp | head -n 40 + echo ">> Diagnostic: document.cpp lines 90-100" + cat /workspace/src/document.cpp | sed -n '90,100p' + + echo ">> Dependency versions:" + cmake --version | head -n 1 + gcc --version | head -n 1 + pkg-config --version + + export PATH="/usr/lib/ccache:${PATH}" + + echo " [2/6] Verifying C++23 Support..." + chmod +x scripts/check_cpp23.sh + ./scripts/check_cpp23.sh + + echo " [3/6] Configuring CMake (Preset: ${CMAKE_PRESET})..." + rm -rf /tmp/splix-build + cmake --preset "${CMAKE_PRESET}" -B /tmp/splix-build + + echo " [4/6] Building SpliX..." + cmake --build /tmp/splix-build -j$(nproc) + + echo " [5/6] Running Tests (CTest + GTest)..." + cd /tmp/splix-build + ctest --output-on-failure --test-action Test + + echo " [6/6] Generating Debian Package..." + cpack -G DEB > /dev/null + cp -v /tmp/splix-build/*.deb /workspace/artifacts/ + + echo "==================================================" + echo " ✅ ALL TESTS PASSED!" + echo "==================================================" + ls -lh /workspace/artifacts/ + ' diff --git a/tests/splix_gtest.cpp b/tests/splix_gtest.cpp new file mode 100644 index 00000000..cb6be8d0 --- /dev/null +++ b/tests/splix_gtest.cpp @@ -0,0 +1,147 @@ +#include +#include "printer.h" +#include "ppdfile.h" +#include "sp_semaphore.h" +#include "band.h" +#include "bandplane.h" +#include "algo0x11.h" +#include "request.h" +#include "sp_portable.h" +#include +#include +#include +#include +#include + +// ──────────────────────────────────────────────────────────────────────────── +// Helper Subclass for Testing Protected Members +// ──────────────────────────────────────────────────────────────────────────── + +class TestablePrinter : public Printer { +public: + void setManufacturer(const std::string& m) { _manufacturer = m; } + void setModel(const std::string& m) { _model = m; } +}; + +// ──────────────────────────────────────────────────────────────────────────── +// Printer Class Tests +// ──────────────────────────────────────────────────────────────────────────── + +TEST(PrinterTest, Initialization) { + TestablePrinter printer; + printer.setManufacturer("Samsung"); + printer.setModel("ML-2010"); + + EXPECT_EQ(printer.manufacturer(), "Samsung"); + EXPECT_EQ(printer.model(), "ML-2010"); +} + +TEST(PrinterTest, MoveSemantics) { + TestablePrinter p1; + p1.setManufacturer("Xerox"); + p1.setModel("Phaser 3117"); + + Printer p2 = std::move(p1); + + EXPECT_EQ(p2.manufacturer(), "Xerox"); + // p1's strings should be empty after move + EXPECT_TRUE(p1.manufacturer().empty()); +} + +TEST(PrinterTest, DefaultInitialization) { + Printer p; + EXPECT_EQ(p.qpdlVersion(), 0); + EXPECT_FALSE(p.color()); + EXPECT_EQ(p.bandHeight(), 0); +} + +// ──────────────────────────────────────────────────────────────────────────── +// PPDFile Value Tests +// ──────────────────────────────────────────────────────────────────────────── + +TEST(PPDValueTest, StringSafety) { + PPDValue v1("TestValue"); + PPDValue v2 = v1; // Copy assignment + + EXPECT_STREQ(static_cast(v1), "TestValue"); + EXPECT_STREQ(static_cast(v2), "TestValue"); + + v1 = PPDValue("NewValue"); + EXPECT_STREQ(static_cast(v1), "NewValue"); + EXPECT_STREQ(static_cast(v2), "TestValue"); // v2 should remain unchanged +} + +// ──────────────────────────────────────────────────────────────────────────── +// Synchronization Tests (SP::Semaphore) +// ──────────────────────────────────────────────────────────────────────────── + +TEST(SemaphoreTest, BasicAcquireRelease) { + SP::Semaphore sem(0); + sem.release(); + EXPECT_TRUE(sem.try_acquire()); + EXPECT_FALSE(sem.try_acquire()); +} + +TEST(SemaphoreTest, MultiRelease) { + SP::Semaphore sem(0); + sem.release(3); + EXPECT_TRUE(sem.try_acquire()); + EXPECT_TRUE(sem.try_acquire()); + EXPECT_TRUE(sem.try_acquire()); + EXPECT_FALSE(sem.try_acquire()); +} + +TEST(SemaphoreTest, ThreadSync) { + SP::Semaphore sem(0); + bool workDone = false; + + std::thread t([&]() { + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + workDone = true; + sem.release(); + }); + + sem.acquire(); + EXPECT_TRUE(workDone); + t.join(); +} + +// ──────────────────────────────────────────────────────────────────────────── +// Compression Tests (Algo0x11) +// ──────────────────────────────────────────────────────────────────────────── + +TEST(Algo0x11Test, CompressionCorrectness) { + Algo0x11 algo; + Request request; + + // Sample input: 1024 bytes of repeating data (highly compressible) + std::vector src(1024, 0xAA); + + auto result = algo.compress(request, src, 128, 64); + ASSERT_TRUE(result.has_value()); + EXPECT_NE(result.value(), nullptr); +} + +TEST(Algo0x11Test, EmptyInput) { + Algo0x11 algo; + Request request; + std::vector src; + + auto result = algo.compress(request, src, 0, 0); + ASSERT_FALSE(result.has_value()); + EXPECT_EQ(result.error(), SP::Error::InvalidArgument); +} + +TEST(Algo0x11Test, LargeEmptyBuffer) { + Algo0x11 algo; + Request request; + std::vector input(1000, 0); + // New signature expects: request, span, width, height + auto result = algo.compress(request, input, 100, 10); + EXPECT_TRUE(result.has_value()); + EXPECT_NE(result.value(), nullptr); +} + +// Phase 14: Modernization Tests +// StringCaseCompare test removed as SP_STRCASECMP was eliminated in favor of std::ranges::equal + diff --git a/tests/test_build.sh b/tests/test_build.sh new file mode 100644 index 00000000..f31dd675 --- /dev/null +++ b/tests/test_build.sh @@ -0,0 +1,90 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "==================================================" +echo " SPLIX BUILD-AND-TEST QA RUNNER" +echo "==================================================" +echo "This script simulates the CI workflow locally to" +echo "catch syntax, CMake, and linking errors early." +echo + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(dirname "$SCRIPT_DIR")" + +cd "$ROOT_DIR" + +# Ensure we're cleaning any previous test artifacts +rm -rf build-test +mkdir build-test + +echo "1) Checking CMake configuration..." +if ! cmake -S . -B build-test -DCMAKE_BUILD_TYPE=Debug 2>&1 | tee build-test/cmake_configure.log; then + echo "❌ CMake configuration failed." + exit 1 +fi +echo "✅ CMake configured successfully." + +echo "2) Building core binaries..." +if ! cmake --build build-test --parallel 2>&1 | tee build-test/cmake_build.log | tail -n 5; then + echo "❌ CMake build failed. Full log: build-test/cmake_build.log" + tail -n 30 build-test/cmake_build.log + exit 1 +fi +echo "✅ CMake build completed successfully." + +echo "3) Executing binary health checks..." +# The filters output their usage statement to stderr and exit with code 1. +# We intercept the execution and check if the expected usage signature exists. +# +# For cross-compiled binaries (e.g. ARM64 on x86-64), we skip execution tests +# and only verify the binary was produced. + +verify_binary() { + local bin_name=$1 + if [ ! -f "build-test/$bin_name" ]; then + echo "❌ Binary $bin_name was not generated!" + exit 1 + fi + + # Check if the binary is for the host architecture + local file_output + file_output=$(file "build-test/$bin_name" 2>/dev/null || true) + local host_arch + host_arch=$(uname -m) + + # If the binary doesn't match the host, skip execution test + if [[ "$host_arch" == "x86_64" ]] && [[ "$file_output" != *"x86-64"* && "$file_output" != *"x86_64"* ]]; then + echo "⏭️ $bin_name is cross-compiled (not x86-64). Skipping execution test." + return 0 + fi + if [[ "$host_arch" == "aarch64" ]] && [[ "$file_output" != *"aarch64"* && "$file_output" != *"ARM"* ]]; then + echo "⏭️ $bin_name is cross-compiled (not aarch64). Skipping execution test." + return 0 + fi + + # Run the binary. By design, it returns 1 and prints "Usage: " to stderr. + set +e + OUTPUT=$(./"build-test/$bin_name" 2>&1) + EXIT_CODE=$? + set -e + + if [[ "$EXIT_CODE" -ne 1 ]]; then + echo "❌ $bin_name exited with unexpected code $EXIT_CODE." + exit 1 + fi + + if [[ "$OUTPUT" != *"Usage:"* ]]; then + echo "❌ $bin_name failed syntax usage check. Output was:" + echo "$OUTPUT" + exit 1 + fi + echo "✅ $bin_name binary execution health check passed." +} + +verify_binary "rastertoqpdl" +verify_binary "pstoqpdl" + +echo +echo "==================================================" +echo " ✅ ALL LOCAL PRE-PUSH CHECKS PASSED!" +echo "==================================================" diff --git a/tests/test_ci_docker.sh b/tests/test_ci_docker.sh new file mode 100644 index 00000000..db68e81e --- /dev/null +++ b/tests/test_ci_docker.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash +set -euo pipefail + +TARGET_ARCH=${1:-amd64} + +echo "==================================================" +echo " SPLIX CI/CD LOCAL DOCKER SIMULATOR" +echo " Architecture: $TARGET_ARCH" +echo "==================================================" +echo "This script runs the exact GitHub Actions logic" +echo "inside a local Docker container." +echo + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(dirname "$SCRIPT_DIR")" + +cd "$ROOT_DIR" +mkdir -p artifacts +mkdir -p .ccache + +if [ "$TARGET_ARCH" = "arm64" ]; then + CMAKE_PRESET="ci-arm64" +else + TARGET_ARCH="amd64" + CMAKE_PRESET="ci-amd64" +fi + +echo ">> Spawning debian:oldstable container... (This may take a minute)" + +docker run --rm \ + -v "${ROOT_DIR}:/workspace" \ + -v "${ROOT_DIR}/.ccache:/root/.ccache" \ + -w /workspace \ + -e CCACHE_DIR=/root/.ccache \ + -e DEB_ARCH="${TARGET_ARCH}" \ + -e CMAKE_PRESET="${CMAKE_PRESET}" \ + -e GITHUB_REF_NAME="2.0.2" \ + splix-builder \ + bash -c ' + set -euo pipefail + + echo " [1/3] Configuring CMake..." + # Ensure build dir is clean for a fresh cross-compile if needed + rm -rf build/ + cmake --preset "${CMAKE_PRESET}" + + echo " [2/4] Compiling..." + cmake --build --preset "${CMAKE_PRESET}" + + echo " [3/4] Running Unit Tests..." + cd build/ + ctest --output-on-failure + + echo " [4/4] Generating Debian Package (.deb)..." + cpack -G DEB + + # Move to artifacts + mkdir -p /workspace/artifacts + cp -v /workspace/build/*.deb /workspace/artifacts/ + + echo "==================================================" + echo " ✅ SUCCESS! Package generated." + echo "==================================================" + ls -lh /workspace/artifacts/ + ' + +echo "Check your local /artifacts directory for the generated .deb file!" diff --git a/tools/Makefile b/tools/Makefile deleted file mode 100644 index 22fddadb..00000000 --- a/tools/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -# -# Makefile (C) 2006-2007, Aurélien Croc (AP²C) -# - -SRCS_decompress := decompress.cpp appliargs.cpp pjl.cpp qpdl.cpp page.cpp \ - algo0x11.cpp -HEADERS_decompress:= appliargs.h i18n.h pjl.h qpdl.h page.h algo0x11.h - -SRCS_jbgtopbm := jbgtopbm.cpp appliargs.cpp -HEADERS_jbgtopbm:= appliargs.h - -PROJECTS := decompress jbgtopbm - -CXXFLAGS := -O0 -g `pkg-config QtCore --cflags` -LIBS := `pkg-config QtCore --libs` - -OBJS_decompress := $(SRCS_decompress:.cpp=.o) -OBJS_jbgtopbm := $(SRCS_jbgtopbm:.cpp=.o) - -all: $(PROJECTS) - -$(OBJS_decompress): $(HEADERS_decompress) -$(OBJS_jbgtopbm): $(HEADERS_jbgtopbm) - -decompress: $(OBJS_decompress) - $(CXX) -o $@ $(LDFLAGS) $^ $(LIBS) - -jbgtopbm: $(OBJS_jbgtopbm) - $(CXX) -o $@ $(LDFLAGS) $^ $(LIBS) -ljbig - -.PHONY: clean cleanall -clean: - $(RM) $(OBJS_decompress) $(OBJS_jbgtopbm) - -cleanall: clean - $(RM) $(PROJECTS)