Hello Shii-san,

How are you doing?  I am sorry that I did not have time to integrate
your changes yet. Here are some issues that I have come across:

   1) Please remove all #ifdef RICOH from the code.  This code is for the
      base omni driver and is active for all the countries.
   2) I do not think that we need ulExtJobData and pbExtJobData in the
      pdb/pdi structures.
   3) ReturnDriverData does not handle compatibility issues.  Read the
      following.

Current layout:
    Ŀ
     cb             .Ŀ// This is the size of the entire block of memory
    Ĵ  
     lVersion         
    Ĵ  
     szDeviceName     
    Ĵ  
     OMNI driver's    
     job properties   
     that can be      
     growable |       
              |       
              v       
                      
 >Ĵ  
             ^       
             |       
    growable |       
    that can be      
    job properties   
    Device specific  
   Ĵ  
   ulong device ID   // This is located at cb - 3 * sizeof (ULONG)
   Ĵ  
   ulong SIGNATURE   // This is located at cb - 2 * sizeof (ULONG)
   Ĵ  
 . cb2              // This is located at cb - sizeof (ULONG)
    <


Step 1)

   ReturnDriverData is called with the following input.  Note that in this
   example, the input is from an older driver.

   Input drivdata:
   Ŀ
    cb             
   Ĵ
    lVersion       
   Ĵ
    szDeviceName   
   Ĵ
    OMNI driver's  
    job properties 
    (ODJP)         
                   
                   
                   
                   
   Ĵ
                   
                   
                   
                   
    (DSJP)         
    job properties 
    Device specific
   Ĵ
   ulong device ID 
   Ĵ
   ulong SIGNATURE 
   Ĵ
    cb2            
   

Step 2)

   Create output drivdata.  Note that in this example, both the OMNI
   driver's job properties and the device's job properties grew.

   Ŀ
    cb             
   Ĵ
    lVersion       
   Ĵ
    szDeviceName   
   Ĵ
    OMNI driver's  
    job properties 
    (ODJP)         
                   
                   
                   
                   
   Ĵ
    New ODJP #1    
   Ĵ
    New ODJP #2    
   Ĵ
    New ODJP #3    
   Ĵ
    New DSJP #2    
   Ĵ
    New DSJP #1    
   Ĵ
                   
                   
                   
                   
    (DSJP)         
    job properties 
    Device specific
   Ĵ
   ulong device ID 
   Ĵ
   ulong SIGNATURE 
   Ĵ
    cb2            
   

Step 3)
   Split input drivdata into two sections, OMNI and device.

   Ŀ
    cb             
   Ĵ
    lVersion       
   Ĵ
    szDeviceName   
   Ĵ
    OMNI driver's  
    job properties 
    (ODJP)         
                   
                   
                   
                   
   

   Ŀ
                   
                   
                   
                   
    (DSJP)         
    job properties 
    Device specific
   Ĵ
   ulong device ID 
   Ĵ
   ulong SIGNATURE 
   Ĵ
    cb2            
   

Step 4)

   Copy input drivdata over output drivdata.
   Do not copy the DSJP if it is not the same device.  That is,
   compare of SIGNATURE and compare of device ID fails

   Ŀ          Ŀ
    cb                        cb             
   Ĵ          Ĵ
    lVersion                  lVersion       
   Ĵ          Ĵ
    szDeviceName              szDeviceName   
   Ĵ -------> Ĵ
    OMNI driver's             OMNI driver's  
    job properties            job properties 
    (ODJP)                    (ODJP)         
                                             
                                             
                                             
                                             
             Ĵ
                                New ODJP #1    
                               Ĵ
                                New ODJP #2    
                               Ĵ
                                New ODJP #3    
                               Ĵ
                                New DSJP #2    
                               Ĵ
                                New DSJP #1    
   Ŀ          Ĵ
                                             
                                             
                                             
                     ------>                 
    (DSJP)                    (DSJP)         
    job properties            job properties 
    Device specific           Device specific
   Ĵ          Ĵ
   ulong device ID           ulong device ID 
   Ĵ          Ĵ
   ulong SIGNATURE           ulong SIGNATURE 
   Ĵ          Ĵ
    cb2                       cb2            
             

Step 5)
   Update cb, lVersion, and cb2

Also, you need to consider the case of how an older omni driver
handles newer omni driver job properties as input. That is, you cannot
copy as much data from input to output.




For the DEVICE_QUERY_EXTJOBDATA subfunction of pfnDeviceQuery,
it needs to have 3 modes:
   1) Return current size
   2) Return TRUE/FALSE if data is valid.
      NOTE: This should handle old data.  You should use the size (cb2)
            to determine if you should test to see if the variables
            have valid data.
   3) Fill in (overwrite) default data.

   So, the function parameters should be:
      (pddc, DEVICE_QUERY_EXTJOBDATA, ulMode, pulSize, pbData)
         where ulMode is:
            DEVICE_QUERY_EXTJOBDATA_CURRENT_SIZE
               *pulSize is updated
            DEVICE_QUERY_EXTJOBDATA_DATA_VALID
               returns BOOL TRUE if valid, FALSE if not
            DEVICE_QUERY_EXTJOBDATA_SET_DEFAULT
               fills in default data

I also recieved your changes to fonts.c  We need to think about how your
.fmf files, my .fmf files, and the FONTINFO2 structure with regards to
the Face Name, Family Name, and Glyph List Name.

Thanks,

Mark
