Changeset 36591 for platform

Show
Ignore:
Timestamp:
02/02/10 14:00:19 (5 years ago)
Author:
dayflower
Message:

リコーのソースコードをもとにエスケープシーケンスを一部変更

Location:
platform/cups/rpdl/trunk
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • platform/cups/rpdl/trunk/TODO.ja

    r36567 r36591  
    22* Autotool化 
    33* ページごとにサイズなどのセッティングが異なる場合の対応(必要?) 
    4 * マージン? 
     4* 印刷エリアの設定(標準/最大) 
    55* PJLシーケンスの追加 
    66* より具体的な機種名をもりこんだPPDの作成 
  • platform/cups/rpdl/trunk/rastertorpdl.c

    r36567 r36591  
    1515 */ 
    1616/*  
    17    ESC sequences in RPDL are copied from Ricoh RPDL driver for Ghostscript. 
    18    That implementation was released under GPL, and covered with 
    19    copyright (C) 1999, 2000 Norihito Ohmori. 
     17   ESC sequences in RPDL are derived from Ricoh RPDL driver for Ghostscript 
     18   and  
     19   Those implementations were released under GPL, and covered with 
     20   copyright (C) 1999, 2000 Norihito Ohmori, 
     21   copyright (C) 2002       Ricoh Co.,Ltd. 
    2022 */ 
    2123#include <cups/cups.h> 
     
    4143{ 
    4244    fputs( 
    43         "\033\022!@R00\033 "        /* enter RPDL mode */ 
     45        "\033\022!1@R00\033 "       /* enter RPDL mode */ 
    4446        "\0334"                     /* leave graphic mode */ 
    4547        "\033\032I"                 /* printer reset */ 
    46         "\033\022YP,2 "             /* select RPDL mode */ 
     48        "\033\022YP,1 "             /* select RPDL mode */ 
    4749        , out); 
    48 } 
    49  
    50 static int 
    51 rpdl_set_custom_paper_size(FILE *out, int width, int height /* in pt */) 
    52 { 
    53     int w, h; 
    54  
    55     if (width < height) { 
    56         w = width; 
    57         h = height; 
    58     } 
    59     else { 
    60         w = height; 
    61         h = width; 
    62     } 
    63  
    64     fprintf(out, "\033\022?5%d,%d\033 ", 
    65             (int) (w * 25.4 / 72.0), 
    66             (int) (h * 25.4 / 72.0)); 
    67  
    68     return 1; 
    6950} 
    7051 
    7152struct paper_name_map_t { 
    7253    const char *name; 
    73     const char *code[2]; 
     54    const char *code; 
    7455}; 
    7556 
    76 static int 
    77 rpdl_set_paper_size_by_name(FILE *out, const char *name) 
     57static const char * 
     58rpdl_paper_size_by_name(const char *name) 
    7859{ 
    7960    struct paper_name_map_t *pmap; 
    8061    static struct paper_name_map_t paper_name_map[] = { 
    81         { "A1", { "A1R", "A1" } }, 
    82         { "A2", { "A2R", "A2" } }, 
    83         { "A3", { "A3R", "A3" } }, 
    84         { "A4", { "A4R", "A4" } }, 
    85         { "A5", { "A5R", "A5" } }, 
    86         { "A6", { "A6R", "A6" } }, 
    87  
    88         { "B4", { "B4R", "B4" } }, 
    89         { "B5", { "B5R", "B5" } }, 
    90         { "B6", { "B6R", "B6" } }, 
    91  
    92         { "Letter",    { "LTR", "LT" } },    /* Letter */ 
    93         { "Legal",     { "LGR", "LG" } },    /* Legal */ 
    94         { "Statement", { "HLR", "HLT" } },   /* Half Letter / Statement */ 
    95         { "Ledger",    { "DLR", "DLT" } },   /* Ledger / Double Letter */ 
    96  
    97         { NULL, { NULL, NULL } }, 
     62        { "A1", "A1X.Plain" }, 
     63        { "A2", "A2X.Plain" }, 
     64        { "A3", "A3X.Plain" }, 
     65        { "A4", "A4X.Plain" }, 
     66        { "A5", "A5X.Plain" }, 
     67        { "A6", "A6X.Plain" }, 
     68 
     69        { "B4", "B4X.Plain" }, 
     70        { "B5", "B5X.Plain" }, 
     71        { "B6", "B6X.Plain" }, 
     72 
     73        { "Postcard",  "PCX.Plain" },   /* Postcard */ 
     74        { "Letter",    "LT"        },   /* Letter */ 
     75        { "Legal",     "LG"        },   /* Legal */ 
     76        { "Statement", "HLT"       },   /* Half Letter / Statement */ 
     77        { "Ledger",    "DLT"       },   /* Ledger / Double Letter */ 
     78 
     79        { NULL, NULL }, 
    9880    }; 
    9981 
    10082    for (pmap = paper_name_map; pmap->name; pmap ++) { 
    101         if (! strcasecmp(pmap->name, name)) { 
    102             int i; 
    103  
    104             for (i = 0; i < 2; i ++) { 
    105                 if (pmap->code[i]) 
    106                     fprintf(out, "\033\02251@%s\033 ", pmap->code[i]); 
    107             } 
    108  
    109             return 1; 
    110         } 
    111     } 
    112  
    113     return 0; 
     83        if (! strcasecmp(pmap->name, name)) 
     84            return pmap->code; 
     85    } 
     86 
     87    return NULL; 
    11488} 
    11589 
     
    12094}; 
    12195 
    122 static int 
    123 rpdl_set_paper_size_by_size(FILE *out, int width, int height /* in pt */) 
    124 { 
    125     int w, h; 
     96static const char * 
     97rpdl_paper_size_by_size(int w, int h /* in pt */) 
     98{ 
    12699    struct paper_size_map_t *pmap; 
    127100    static struct paper_size_map_t paper_size_map[] = { 
     
    137110        {  363,  516, "B6" }, 
    138111 
     112        {  284,  419, "Postcard"  }, 
    139113        {  612,  792, "Letter"    }, 
    140114        {  612, 1008, "Legal"     }, 
     
    145119    }; 
    146120 
    147     if (width < height) { 
    148         w = width; 
    149         h = height; 
    150     } 
    151     else { 
    152         w = height; 
    153         h = width; 
    154     } 
    155  
    156121    for (pmap = paper_size_map; pmap->width > 0; pmap ++) { 
    157122        if (w == pmap->width && h == pmap->height) { 
    158             return rpdl_set_paper_size_by_name(out, pmap->name); 
    159         } 
    160     } 
    161  
    162     return 0; 
    163 } 
    164  
    165 static int 
    166 rpdl_set_paper_size(FILE *out, ppd_file_t *ppd, cups_page_header2_t *header) 
    167 { 
    168     int r; 
    169  
    170     r = 0; 
     123            return rpdl_paper_size_by_name(pmap->name); 
     124        } 
     125    } 
     126 
     127    return NULL; 
     128} 
     129 
     130static void 
     131rpdl_set_custom_paper_size(FILE *out, int w, int h /* in pt */) 
     132{ 
     133    fprintf(out, "\033\022?5%d,%d\033 ", 
     134            (int) (w * 25.4 / 72.0), 
     135            (int) (h * 25.4 / 72.0)); 
     136} 
     137 
     138static void 
     139rpdl_set_paper_size(FILE *out, ppd_file_t *ppd, cups_page_header2_t *header, 
     140                    const char *mode) 
     141{ 
     142    const char *code; 
     143    int width, height; 
     144 
     145    if (header->PageSize[0] < header->PageSize[1]) { 
     146        width  = header->PageSize[0]; 
     147        height = header->PageSize[1]; 
     148    } 
     149    else { 
     150        width  = header->PageSize[1]; 
     151        height = header->PageSize[0]; 
     152    } 
     153 
     154    code = NULL; 
     155 
    171156    if (*(header->cupsPageSizeName)) { 
    172         r = rpdl_set_paper_size_by_name(out, header->cupsPageSizeName); 
    173         if (r) 
    174             return r; 
    175     } 
    176  
    177     r = rpdl_set_paper_size_by_size(out, header->PageSize[0], 
    178                                           header->PageSize[1]); 
    179     if (r) 
    180         return r; 
    181  
    182     return rpdl_set_custom_paper_size(out, header->PageSize[0], 
    183                                            header->PageSize[1]); 
     157        code = rpdl_paper_size_by_name(header->cupsPageSizeName); 
     158    } 
     159 
     160    if (! code) { 
     161        code = rpdl_paper_size_by_size(width, height); 
     162    } 
     163 
     164    if (code) { 
     165        if (! mode) 
     166            mode = "53"; 
     167 
     168        fprintf(out, "\033\022%s@%s\033 ", mode, code); 
     169    } 
     170    else { 
     171        rpdl_set_custom_paper_size(out, width, height); 
     172    } 
    184173} 
    185174 
     
    190179} 
    191180 
    192 static int 
    193 rpdl_set_tray(FILE *out, ppd_file_t *ppd, cups_page_header2_t *header) 
    194 { 
    195     switch (header->MediaPosition) { 
    196     case 0:     /* auto */ 
    197         fputs("\033\022Z2 ", out); 
    198         break; 
    199     case 1:     /* manual tray */ 
    200         fputs("\033\022Z1 " 
    201               "\033\031M", out); 
    202         break; 
    203     default:    /* tray N */ 
    204         fputs("\033\022Z1 ", out); 
    205         fprintf(out, "\033\031%d", header->MediaPosition); 
    206     } 
    207  
    208     return 0; 
    209 } 
    210  
    211 static int 
     181static void 
    212182rpdl_set_paper_tray(FILE *out, ppd_file_t *ppd, cups_page_header2_t *header) 
    213183{ 
    214     int r; 
    215  
    216184    switch (header->MediaPosition) { 
    217185    case 0:     /* auto */ 
    218186        /* paper type can not be specified */ 
     187        fputs("\033\022Z2 ", out);          /* tray - auto */ 
     188        rpdl_set_paper_size(out, ppd, header, "53"); 
    219189        break; 
    220190    case 1:     /* manual tray */ 
    221191        rpdl_set_paper_type(out, 0); 
     192        fputs("\033\022Z1 ", out);          /* tray - select */ 
     193        rpdl_set_paper_size(out, ppd, header, "52"); 
     194        fputs("\033\031M",   out); 
    222195        break; 
    223196    default:    /* tray N */ 
    224         /* always 15 */ 
    225         rpdl_set_paper_type(out, 15); 
    226     } 
    227  
    228     r = rpdl_set_tray(out, ppd, header); 
    229  
    230     if (header->MediaPosition == 0 /* auto */) { 
    231         r = rpdl_set_paper_size(out, ppd, header); 
    232     } 
    233  
    234     return 0; 
     197        rpdl_set_paper_type(out, 15);       /* paper type = always 15 */ 
     198        fputs("\033\022Z1 ", out);          /* tray - select */ 
     199        /* paper size can not be specified */ 
     200        fprintf(out, "\033\031%d", header->MediaPosition); 
     201            /* tray 1 => 2, tray 2 => 3, ... */ 
     202    } 
    235203} 
    236204 
     
    310278 
    311279    fputs( 
     280        "\033\022YJ,1 "                     /* ? */ 
    312281        "\033\022YQ,2 "                     /* page length - maximum */ 
    313         "\033\022YB,2 "                     /* printable area - maximum */ 
    314         "\033\022YK,1 "                     /* left margin - 0 mm */ 
    315         "\033\022YL,1 "                     /* top margin  - 0 mm */ 
     282 
    316283        "\033\022YM,1 "                     /* zoom - 100% */ 
     284        "\033\022?M100,0\033 "              /* zoom ? */ 
    317285        , out);         
     286 
     287    switch (1 /* printable area */) { 
     288    case 1: 
     289        fputs("\033\022YB,2 ", out);        /* printable area - normal */ 
     290        break; 
     291    case 0: 
     292    default: 
     293        fputs("\033\022YB,1 ", out);        /* printable area - maximum */ 
     294    } 
     295 
     296    if (header->Margins[0] > 0 || header->Margins[1] > 0) { 
     297        fprintf(out, "\033\022?Y0:0,L:%d,K:%d\033 ", 
     298                (int) (header->Margins[0] * 25.4 / 72.0), 
     299                (int) (header->Margins[1] * 25.4 / 72.0)); 
     300    } 
     301    else { 
     302        fputs( 
     303            "\033\022YK,1 "                 /* left margin - 0 mm */ 
     304            "\033\022YL,1 "                 /* top margin  - 0 mm */ 
     305            , out);         
     306    } 
    318307 
    319308    rpdl_set_paper_tray(out, ppd, header); 
     
    325314        fputs("\033\022D1 ", out);          /* portrait */ 
    326315    } 
     316 
     317    fputs("\033\016", out);                 /* ? */ 
    327318 
    328319    /* number of copies */ 
     
    344335 
    345336    if (header->MediaPosition != 0 /* auto */) { 
    346         fputs("\033\022Z2 ", out);          /* tray auto */ 
    347         rpdl_set_paper_size_by_name(out, "A4"); 
    348     } 
     337        fprintf(out, "\033\022Z2 "          /* tray auto */ 
     338                     "\033\02253@%s\033 "   /* paper size */ 
     339                , rpdl_paper_size_by_name("A4")); 
     340    } 
     341 
     342#if 0 
     343    fputs( 
     344        "\033\022!-1,1,1@RCS\033 "          /* enter RPCS mode */ 
     345        , out); 
     346#endif 
    349347 
    350348    return 0; 
     
    463461    return 1; 
    464462} 
    465  
    466 #if 0   /* example */ 
    467 static int 
    468 rpdl_render_image(FILE *out, const unsigned char *ptr, int width, int height, 
    469                   int ox, int oy, int use_compression, int use_trim) 
    470 { 
    471     int cb_line, cb_cbuf; 
    472     unsigned char *comp_buf; 
    473     int y; 
    474  
    475     cb_line = (width + 7) / 8; 
    476  
    477     cb_cbuf = (cb_line * 3 + 1) / 2; 
    478     comp_buf = malloc(cb_cbuf); 
    479     if (! comp_buf) 
    480         return -1; 
    481  
    482     for (y = 0; y < height; y ++) { 
    483         int r; 
    484  
    485         r = rpdl_render_line(out, ptr, cb_line, ox, oy + y, use_compression, 
    486                              use_trim, comp_buf, cb_cbuf); 
    487  
    488         if (r < 0) { 
    489             fputs("ERROR: buffer is small.\n", stderr); 
    490             return -1; 
    491         } 
    492  
    493         ptr += cb_line; 
    494     } 
    495  
    496     free(comp_buf); 
    497  
    498     return 0; 
    499 } 
    500 #endif 
    501463 
    502464int 
  • platform/cups/rpdl/trunk/rpdl.drv

    r36567 r36591  
    66 
    77Manufacturer "Ricoh" 
    8 Version 1.0 
    9 ModelName "RPDL Generic" 
     8Version 1.1 
     9ModelName "RPDL IV Generic" 
    1010 
    1111Font * 
     12 
     13/* HWMargins 0.2in 0.2in 0.2in 0.2in */ 
    1214 
    1315MediaSize A1 
     
    2022MediaSize B5 
    2123MediaSize B6 
     24MediaSize Postcard 
    2225MediaSize Letter 
    2326MediaSize Legal 
  • platform/cups/rpdl/trunk/rpdl.ppd

    r36567 r36591  
    11*PPD-Adobe: "4.3" 
    2 *%%%% PPD file for RPDL Generic with CUPS. 
     2*%%%% PPD file for RPDL IV Generic with CUPS. 
    33*%%%% Created by the CUPS PPD Compiler CUPS v1.4.1. 
    44*FormatVersion: "4.3" 
    5 *FileVersion: "1.0" 
     5*FileVersion: "1.1" 
    66*LanguageVersion: English 
    77*LanguageEncoding: ISOLatin1 
    88*PCFileName: "rpdl.ppd" 
    9 *Product: "(RPDL Generic)" 
     9*Product: "(RPDL IV Generic)" 
    1010*Manufacturer: "Ricoh" 
    11 *ModelName: "Ricoh RPDL Generic" 
    12 *ShortNickName: "Ricoh RPDL Generic" 
    13 *NickName: "Ricoh RPDL Generic, 1.0" 
     11*ModelName: "Ricoh RPDL IV Generic" 
     12*ShortNickName: "Ricoh RPDL IV Generic" 
     13*NickName: "Ricoh RPDL IV Generic, 1.1" 
    1414*PSVersion: "(3010.000) 0" 
    1515*LanguageLevel: "3" 
     
    4343*PageSize B5/B5: "<</PageSize[516 729]/ImagingBBox null>>setpagedevice" 
    4444*PageSize B6/B6: "<</PageSize[363 516]/ImagingBBox null>>setpagedevice" 
     45*PageSize Postcard/Postcard: "<</PageSize[284 419]/ImagingBBox null>>setpagedevice" 
    4546*PageSize Letter/US Letter: "<</PageSize[612 792]/ImagingBBox null>>setpagedevice" 
    4647*PageSize Legal/US Legal: "<</PageSize[612 1008]/ImagingBBox null>>setpagedevice" 
     
    6061*PageRegion B5/B5: "<</PageSize[516 729]/ImagingBBox null>>setpagedevice" 
    6162*PageRegion B6/B6: "<</PageSize[363 516]/ImagingBBox null>>setpagedevice" 
     63*PageRegion Postcard/Postcard: "<</PageSize[284 419]/ImagingBBox null>>setpagedevice" 
    6264*PageRegion Letter/US Letter: "<</PageSize[612 792]/ImagingBBox null>>setpagedevice" 
    6365*PageRegion Legal/US Legal: "<</PageSize[612 1008]/ImagingBBox null>>setpagedevice" 
     
    7577*ImageableArea B5/B5: "0 0 516 729" 
    7678*ImageableArea B6/B6: "0 0 363 516" 
     79*ImageableArea Postcard/Postcard: "0 0 284 419" 
    7780*ImageableArea Letter/US Letter: "0 0 612 792" 
    7881*ImageableArea Legal/US Legal: "0 0 612 1008" 
     
    8992*PaperDimension B5/B5: "516 729" 
    9093*PaperDimension B6/B6: "363 516" 
     94*PaperDimension Postcard/Postcard: "284 419" 
    9195*PaperDimension Letter/US Letter: "612 792" 
    9296*PaperDimension Legal/US Legal: "612 1008" 
     
    189193*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM 
    190194*Font ZapfDingbats: Special "(001.005)" Special ROM 
    191 *% End of rpdl.ppd, 09180 bytes. 
     195*% End of rpdl.ppd, 09458 bytes.