midrange.com code scratchpad
Name:
convertCharToType
Scriptlanguage:
Plain Text
Tabwidth:
4
Date:
03/04/2011 03:41:23 pm
IP:
Logged
Description:
Convert a character value to the appropriate type
Code:
  1.      /*                                                                       */                    
  2.      /* Out:  2/20/07 10:06 Ver:  3.  0 Level40 CHRISTEN, DUANE J. - IT&S     */                    
  3.      /* Ref: ANIN020701 ANI Inventory/Complex Product Attachment to Orders    */                    
  4.      /* DJC: Add conversion for Date and Time values with no editing Chars    */                    
  5.      /*                                                                        */                   
  6.      /*  Out: 10/31/05 11:28 Ver:  2.  0 Level40 CHRISTEN, DUANE J. - IT&S     */                   
  7.      /*  Ref: ANIN110502 ANI Inventory/CAS/Care Query Port to Provisioning Sys */                   
  8.      /*  DJC: Converted to Free Fromat and added VARCHAR as a valid type       */                   
  9.      /*        for the convertCharToType procedure                             */                   
  10.      /*                                                                        */                   
  11.      /*  Out: 11/17/04  9:37 Ver:  1.  0 Level40 CHRISTEN, DUANE J. - IT&S     */                   
  12.      /*  Ref: ANIN120403 ANI Inventory/Multiple Vendor E911 (Code)             */                   
  13.      /*  DJC: The Scale value range for CHAR data types can be larger than 31  */                   
  14.      /*                                                                        */                   
  15.      /*  Out: 11/24/03  9:42 Ver:  0.  0 Level40 Duane J. Christen             */                   
  16.      /*  Ref: ANIN010401 ANI Inventory/Migrate 911 to Provisioning System.     */                   
  17.      /*  DJC: Initial program creation                                         */                   
  18.                                                                                                     
  19.      /*   Copyright McLeod, Inc., as an unpublished work created in                                 
  20.      /*   2003.  This program is CONFIDENTIAL, unpublished work of                                  
  21.      /*   authorship.  IT IS A TRADE SECRET which is the property of                                
  22.      /*   McLeod, Inc.  All use, disclosure, and/or reproduction not                                
  23.      /*   specifically authorized by McLeod, Inc., is prohibited.                                   
  24.      /*   This program may also be protected under the copyright                                    
  25.      /*   and/or trade secret laws of non-U.S. countries.  All rights                               
  26.      /*   reserved.                                                                                 
  27.                                                                                                     
  28.      /*=============================================================================================
  29.      /*   Notes                                                                                     
  30.      /*=============================================================================================
  31.                                                                                                     
  32.      /* Compile with ACTGRP(PVS9996)                                                                
  33.                                                                                                     
  34.      /*=============================================================================================
  35.      /*   Control Specifications                                                                    
  36.      /*=============================================================================================
  37.                                                                                                     
  38.      H NoMain                                                                                       
  39.                                                                                                     
  40.      /*=============================================================================================
  41.      /*   File Specifications                                                                       
  42.      /*=============================================================================================
  43.                                                                                                     
  44.                                                                                                     
  45.      /*=============================================================================================
  46.      /*   Prototype Specifications                                                                  
  47.      /*=============================================================================================
  48.                                                                                                     
  49.       /Include QRpgCbSrc,XXCvt.H                                                                    
  50.       /Include QRpgCbSrc,String.H                                                                   
  51.       /Include QRpgCbSrc,StdLib.H                                                                   
  52.       /Include QRpgCbSrc,MI_CpyByte                                                                 
  53.       /Include QRpgCbSrc,PVS9996                                                                    
  54.                                                                                                     
  55.      /*=============================================================================================
  56.      /*   Data Specifications                                                                       
  57.      /*=============================================================================================
  58.                                                                                                     
  59.       /Include QRPGCBSRC,DQUSEC                                                                     
  60.       /Include QRPGCBSRC,DQMHSNDPM                                                                  
  61.       /Include QRpgCBSrc,DUserCH                                                                    
  62.                                                                                                     
  63.      /*---------------------------------------------------------------------------------------------
  64.      /*   Data Structure Specifications                                                             
  65.      /*---------------------------------------------------------------------------------------------
  66.                                                                                                     
  67.                                                                                                     
  68.      /*---------------------------------------------------------------------------------------------
  69.      /*   Array Specifications                                                                      
  70.      /*---------------------------------------------------------------------------------------------
  71.                                                                                                     
  72.                                                                                                     
  73.      /*---------------------------------------------------------------------------------------------
  74.      /*   Indicator Specifications                                                                  
  75.      /*---------------------------------------------------------------------------------------------
  76.                                                                                                     
  77.      D globalInit      S               N                                                            
  78.                                                                                                     
  79.      /*---------------------------------------------------------------------------------------------
  80.      /*   Standalone Data Specifications                                                            
  81.      /*---------------------------------------------------------------------------------------------
  82.                                                                                                     
  83.                                                                                                     
  84.      /*---------------------------------------------------------------------------------------------
  85.      /*   Constant Specifications                                                                   
  86.      /*---------------------------------------------------------------------------------------------
  87.                                                                                                     
  88.                                                                                                     
  89.      /*#############################################################################################
  90.      /*   Procedure Deleclaration - Convert Character Value to Type                                 
  91.      /*#############################################################################################
  92.                                                                                                     
  93.      P convertCharToType...                                                                         
  94.      P                 B                   Export                                                   
  95.                                                                                                     
  96.      /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  97.      /*   Procedure Interface                                                                       
  98.      /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  99.                                                                                                     
  100.      D convertCharToType...                                                                         
  101.      D                 PI                                                                           
  102.      D  value                          *   Value                                Value to convert    
  103.      D  scale                        10I 0 Value                                Scale of value      
  104.      D  precision                    10I 0 Value                                Precision of value  
  105.      D  type                         10A   Value                                Convert to Type     
  106.      D  returnValue                    *   Value                                Converted Value     
  107.      D  returnValueSize...                                                      Converted Value     
  108.      D                               10I 0 Value                                 Storage Size       
  109.      D  errorStructure...                                                       Error Structure     
  110.      D                                 *   Value Options(*NOPASS)                                   
  111.                                                                                                     
  112.      /*=============================================================================================
  113.      /*   Procedure Data Specifications                                                             
  114.      /*=============================================================================================
  115.                                                                                                     
  116.      /*---------------------------------------------------------------------------------------------
  117.      /*   Procedure Data Structure Specifications                                                   
  118.      /*---------------------------------------------------------------------------------------------
  119.                                                                                                     
  120.      D                 DS                                                                           
  121.      D stringLength                   4B 0                                                          
  122.      D  binLength                     2A   OverLay(stringLength)                                    
  123.                                                                                                     
  124.      /*---------------------------------------------------------------------------------------------
  125.      /*   Procedure Array Specifications                                                            
  126.      /*---------------------------------------------------------------------------------------------
  127.                                                                                                     
  128.                                                                                                     
  129.      /*---------------------------------------------------------------------------------------------
  130.      /*   Procedure Indicator Specifications                                                        
  131.      /*---------------------------------------------------------------------------------------------
  132.                                                                                                     
  133.                                                                                                     
  134.      /*---------------------------------------------------------------------------------------------
  135.      /*   Procedure Standalone Data Specifications                                                  
  136.      /*---------------------------------------------------------------------------------------------
  137.                                                                                                     
  138.      D parmsPassed     S              3P 0                                                          
  139.                                                                                                     
  140.      D precisionValues...                                                                           
  141.      D                 S             15A                                                            
  142.                                                                                                     
  143.      D stopString      S               *                                                            
  144.      D stopStringAdr   S               *   Inz(%Addr(stopString))                                   
  145.                                                                                                     
  146.      D double          S              8F                                                            
  147.      D int             S             10I 0                                                          
  148.                                                                                                     
  149.      D phone#          S             10P 0                                                          
  150.      D zipCode         S              9P 0                                                          
  151.                                                                                                     
  152.      D charBase        S               *                                                            
  153.      D char            S              1A   Based(charBase)                                          
  154.      D dateIso         S             10A   Based(charBase)                                          
  155.      D dateUsa         S             10A   Based(charBase)                                          
  156.                                                                                                     
  157.      /*---------------------------------------------------------------------------------------------
  158.      /*   Procedure Constant Specifications                                                         
  159.      /*---------------------------------------------------------------------------------------------
  160.                                                                                                     
  161.      /*   Parameter count values                                                                    
  162.      D requiredParms   C                   Const(6)                                                 
  163.      D requiredErrorParms...                                                                        
  164.      D                 C                   Const(7)                                                 
  165.                                                                                                     
  166.      D scaleValues     C                   Const('1 to 31')                                         
  167.                                                                                                     
  168.      D typeValues      C                   Const('CHAR, VARCHAR, DEC, +                             
  169.      D                                            TIMESTAMP, DATE, DATEISO0, +                      
  170.      D                                            DATEUSA, +                                        
  171.      D                                            TIME, INT, BIN, NUMERIC, +                        
  172.      D                                            FLOAT, DOUBLE, TELEPHONE#, +                      
  173.      D                                            ZIPCODE9')                                        
  174.                                                                                                     
  175.      /*---------------------------------------------------------------------------------------------
  176.      /*   Procedure Key Lists                                                                       
  177.      /*---------------------------------------------------------------------------------------------
  178.                                                                                                     
  179.                                                                                                     
  180.      /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  181.      /*   Procedure Code                                                                            
  182.      /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  183.                                                                                                     
  184.       /Free                                                                                         
  185.        Exsr initialize;                                                                             
  186.        Exsr validateParms;                                                                          
  187.                                                                                                     
  188.        Select;                                                                                      
  189.                                                                                                     
  190.        When type = 'CHAR';                                                                          
  191.           cpyBytes(returnValue : value :  returnValueSize);                                         
  192.                                                                                                     
  193.        When type = 'DEC';                                                                           
  194.           ExSr decimalConversion;                                                                   
  195.        When type = 'TIMESTAMP';                                                                     
  196.           cpyBytes(returnValue : value : returnValueSize);                                          
  197.                                                                                                     
  198.        When type = 'DATE';                                                                          
  199.           cpyBytes(returnValue : value : returnValueSize);                                          
  200.                                                                                                     
  201.        When type = 'DATEISO0';                                                                      
  202.           If returnValueSize >= 10;                                                                 
  203.              charBase = value;                                                                      
  204.                                                                                                     
  205.              If %Len(%Trim(dateIso)) = 8;                                                           
  206.                 Monitor;                                                                            
  207.                    dateIso = %Char(%Date(%Trim(dateISO) : *ISO0) : *ISO);                           
  208.                                                                                                     
  209.                 On-Error;                                                                           
  210.                    dateIso = '0001-01-01';                                                          
  211.                 EndMon;                                                                             
  212.              EndIf;                                                                                 
  213.           EndIf;                                                                                    
  214.                                                                                                     
  215.           cpyBytes(returnValue : value : returnValueSize);                                          
  216.                                                                                                     
  217.        When type = 'DATEUSA';                                                                       
  218.           If returnValueSize >= 10;                                                                 
  219.              charBase = value;                                                                      
  220.                                                                                                     
  221.              If %Len(%Trim(dateUsa)) = 10;                                                          
  222.                 Monitor;                                                                            
  223.                    dateUsa = %Char(%Date(%Trim(dateUsa) : *USA) : *ISO);                            
  224.                                                                                                     
  225.                 On-Error;                                                                           
  226.                    dateUsa = '0001-01-01';                                                          
  227.                 EndMon;                                                                             
  228.              EndIf;                                                                                 
  229.           EndIf;                                                                                    
  230.                                                                                                     
  231.           cpyBytes(returnValue : value : returnValueSize);                                          
  232.                                                                                                     
  233.        When type = 'TIME';                                                                          
  234.           cpyBytes(returnValue : value :  returnValueSize);                                         
  235.                                                                                                     
  236.        When type = 'INT' or                                                                         
  237.          type = 'BIN';                                                                              
  238.           int = QxxZToI(value : scale :  precision);                                                
  239.                                                                                                     
  240.           cpyBytes(returnValue : %Addr(int) : returnValueSize);                                     
  241.                                                                                                     
  242.        When type = 'NUMERIC';                                                                       
  243.           cpyBytes(returnValue : value : returnValueSize);                                          
  244.                                                                                                     
  245.        When type = 'VARCHAR';                                                                       
  246.           For stringLength = scale downTo 1;                                                        
  247.              charBase = value + stringLength;                                                       
  248.                                                                                                     
  249.              If char <> *BLANK or                                                                   
  250.               char <> x'00';                                                                        
  251.                Leave;                                                                               
  252.              EndIf;                                                                                 
  253.           EndFor;                                                                                   
  254.                                                                                                     
  255.           cpyBytes(returnValue : %Addr(binLength) : 2);                                             
  256.                                                                                                     
  257.           If stringLength > 0;                                                                      
  258.              cpyBytes(returnValue + 2 : value :  stringLength);                                     
  259.           EndIf;                                                                                    
  260.                                                                                                     
  261.        When type = 'FLOAT' or                                                                       
  262.          type = 'DOUBLE';                                                                           
  263.           double = QxxZToD(value : scale : precision);                                              
  264.                                                                                                     
  265.           cpyBytes(returnValue : %Addr(double) : returnValueSize);                                  
  266.                                                                                                     
  267.        When type = 'TELEPHONE#';                                                                    
  268.           phone# = convertEditedPhonePacked(value : usec_Base);                                     
  269.           cpyBytes(returnValue : %Addr(phone#) : returnValueSize);                                  
  270.                                                                                                     
  271.        When type = 'ZIPCODE9';                                                                      
  272.           zipCode = convertZipCodeToPacked9(value : usec_Base);                                     
  273.           cpyBytes(returnValue : %Addr(zipCode) : returnValueSize);                                 
  274.        EndSl;                                                                                       
  275.                                                                                                     
  276.        ExSr exitProcedure;                                                                          
  277.        Return;                                                                                      
  278.                                                                                                     
  279.        //===========================================================================================
  280.        //   Convert Charicter to Decimal                                                            
  281.        //===========================================================================================
  282.                                                                                                     
  283.        BegSr decimalConversion;                                                                     
  284.                                                                                                     
  285.           If precision = 0;                                                                         
  286.              QxxDtoP(returnValue : scale : precision :                                              
  287.                      QxxZtoD(value : scale : precision));                                           
  288.                                                                                                     
  289.           Else;                                                                                     
  290.              QxxDtoP(returnValue : scale : precision :                                              
  291.                      strToD(value : stopStringAdr));                                                
  292.                                                                                                     
  293.           EndIf;                                                                                    
  294.                                                                                                     
  295.        EndSr;                                                                                       
  296.                                                                                                     
  297.        //===========================================================================================
  298.        // Initialize Procedure                                                                      
  299.        //===========================================================================================
  300.                                                                                                     
  301.        BegSr initialize;                                                                            
  302.                                                                                                     
  303.           If Not globalInit;                                                                        
  304.              globalInit = *ON;                                                                      
  305.              sndPM_Max_Data_Length = 500;                                                           
  306.                                                                                                     
  307.              /Include QRpgCBSrc,ZQmhSndPm                                                           
  308.           EndIf;                                                                                    
  309.                                                                                                     
  310.           /Include QRpgCBSrc,ZUserCH                                                                
  311.                                                                                                     
  312.           If setJmp(jumpPoint) = 1;                                                                 
  313.              ExSr exitProcedure;                                                                    
  314.           EndIf;                                                                                    
  315.                                                                                                     
  316.           sndPM_Msg_Type = '*ESCAPE';                                                               
  317.           userCHConditionHandler = %PAddr('PROVISIONERUSERCH003');                                  
  318.                                                                                                     
  319.           registerConditionHandler(userCHConditionHandler :                                         
  320.                                    userCHBase :                                                     
  321.                                    *OMIT);                                                          
  322.           parmsPassed = %Parms;                                                                     
  323.                                                                                                     
  324.           Select;                                                                                   
  325.                                                                                                     
  326.           When parmsPassed = requiredParms;                                                         
  327.              userCH.errorBase = *NULL;                                                              
  328.              usec_Base = *NULL;                                                                     
  329.                                                                                                     
  330.           When parmsPassed = requiredErrorParms;                                                    
  331.              userCH.errorBase = errorStructure;                                                     
  332.              usec_Base = errorStructure;                                                            
  333.                                                                                                     
  334.           Other;                                                                                    
  335.              sndPM_MsgF_File = 'QCPFMSG';                                                           
  336.              sndPM_Msg_Id = 'CPF24B4';                                                              
  337.              sndPm_Data_Length = 0;                                                                 
  338.              /Include QRPGCBSRC,CQMHSNDPM                                                           
  339.                                                                                                     
  340.           EndSl;                                                                                    
  341.                                                                                                     
  342.           If usec_Base <> *NULL;                                                                    
  343.              If usec_Provided >= usec_Avail_Static;                                                 
  344.                 usec_Msg_Id = *BLANKS;                                                              
  345.                 usec_Data_Length = usec_Provided - usec_Avail_Static;                               
  346.                                                                                                     
  347.                 If usec_Data_Length > 0;                                                            
  348.                    usec_Data_Base = usec_Base +  usec_Avail_Static;                                 
  349.                    %Subst(usec_Data : 1 : usec_Data_Length) = *BLANKS;                              
  350.                 EndIf;                                                                              
  351.              EndIf;                                                                                 
  352.           EndIf;                                                                                    
  353.                                                                                                     
  354.        EndSr;                                                                                       
  355.                                                                                                     
  356.        //===========================================================================================
  357.        // Validate Parameters                                                                       
  358.        //===========================================================================================
  359.                                                                                                     
  360.        BegSr validateParms;                                                                         
  361.                                                                                                     
  362.        //-------------------------------------------------------------------------------------------
  363.        // Value                                                                                     
  364.           If value = *NULL;                                                                         
  365.              SndPm_Msg_Id = 'PVM1001';                                                              
  366.              %SubSt(SndPM_Data : 1 : 20) = 'Value';                                                 
  367.              sndPm_Data_Length = 20;                                                                
  368.              /Include QRPGCBSRC,CQMHSNDPM                                                           
  369.           EndIf;                                                                                    
  370.                                                                                                     
  371.        //-------------------------------------------------------------------------------------------
  372.        // Scale                                                                                     
  373.           If type <> 'CHAR' and                                                                     
  374.             type <> 'VARCHAR';                                                                      
  375.              If scale < 1 or                                                                        
  376.                scale > 31;                                                                          
  377.                 sndPM_Msg_Id = 'PVM1003';                                                           
  378.                 %SubSt(SndPM_Data : 1 : 35) = %Trim(%EditC(scale : 'Z'));                           
  379.                 %SubSt(SndPM_Data : 36 : 35) = 'Scale';                                             
  380.                 stringLength = %Len(scaleValues);                                                   
  381.                 %SubSt(SndPM_Data : 71 : 2) = binLength;                                            
  382.                 %SubSt(SndPM_Data : 73 : stringLength) = scaleValues;                               
  383.                 sndPm_Data_Length = 72 + stringLength;                                              
  384.                 /Include QRPGCBSRC,CQMHSNDPM                                                        
  385.              EndIf;                                                                                 
  386.                                                                                                     
  387.           ElseIf scale < 1;                                                                         
  388.              sndPM_Msg_Id = 'PVM1003';                                                              
  389.              %SubSt(SndPM_Data : 1 : 35) = %Trim(%EditC(scale : 'Z'));                              
  390.              %SubSt(SndPM_Data : 36 : 35) = 'Scale';                                                
  391.              stringLength = 3;                                                                      
  392.              %SubSt(SndPM_Data : 71 : 2) = binLength;                                               
  393.              %SubSt(SndPM_Data : 73 : stringLength) = '> 0';                                        
  394.              sndPm_Data_Length = 72 + stringLength;                                                 
  395.              /Include QRPGCBSRC,CQMHSNDPM                                                           
  396.           EndIf;                                                                                    
  397.                                                                                                     
  398.        //-------------------------------------------------------------------------------------------
  399.        // Precision                                                                                 
  400.           If precision < 0 or                                                                       
  401.             precision > scale;                                                                      
  402.              sndPM_Msg_Id = 'PVM1003';                                                              
  403.              %SubSt(SndPM_Data : 1 : 35) = %Trim(%EditC(precision : 'Z'));                          
  404.              %SubSt(SndPM_Data : 36 : 35) = 'Precision';                                            
  405.              precisionValues = '0 to ' + %Trim(%EditC(precision : 'Z'));                            
  406.              stringLength = %Len(%Trim(precisionValues));                                           
  407.              %SubSt(SndPM_Data : 71 : 2) = binLength;                                               
  408.              %SubSt(SndPM_Data : 73 : stringLength) = %Trim(scaleValues);                           
  409.              sndPm_Data_Length = 72 + stringLength;                                                 
  410.              /Include QRPGCBSRC,CQMHSNDPM                                                           
  411.           EndIf;                                                                                    
  412.                                                                                                     
  413.        //-------------------------------------------------------------------------------------------
  414.        //Type                                                                                       
  415.           If type <> 'CHAR' and                                                                     
  416.             type <> 'VARCHAR' and                                                                   
  417.             type <> 'DEC' and                                                                       
  418.             type <> 'TIMESTAMP' and                                                                 
  419.             type <> 'DATE' and                                                                      
  420.             type <> 'DATEISO0' and                                                                  
  421.             type <> 'DATEUSA' and                                                                   
  422.             type <> 'TIME' and                                                                      
  423.             type <> 'INT' and                                                                       
  424.             type <> 'BIN' and                                                                       
  425.             type <> 'NUMERIC' and                                                                   
  426.             type <> 'FLOAT' and                                                                     
  427.             type <> 'DOUBLE' and                                                                    
  428.             type <> 'TELEPHONE#' and                                                                
  429.             type <> 'ZIPCODE9';                                                                     
  430.              sndPM_Msg_Id = 'PVM1003';                                                              
  431.              %SubSt(SndPM_Data : 1 : 35) = type;                                                    
  432.              %SubSt(SndPM_Data : 36 : 35) = 'Type';                                                 
  433.              stringLength = %Len(typeValues);                                                       
  434.              %SubSt(SndPM_Data : 71 : 2) = binLength;                                               
  435.              %SubSt(SndPM_Data : 73 : stringLength) = typeValues;                                   
  436.              sndPm_Data_Length = 72 + stringLength;                                                 
  437.              /Include QRPGCBSRC,CQMHSNDPM                                                           
  438.           EndIf;                                                                                    
  439.                                                                                                     
  440.        //-------------------------------------------------------------------------------------------
  441.        // Return Value                                                                              
  442.           If returnValue = *NULL;                                                                   
  443.              SndPm_Msg_Id = 'PVM1001';                                                              
  444.              %SubSt(SndPM_Data : 1 : 20) = 'Return Value';                                          
  445.              sndPm_Data_Length = 20;                                                                
  446.              /Include QRPGCBSRC,CQMHSNDPM                                                           
  447.              ExSr exitProcedure;                                                                    
  448.           EndIf;                                                                                    
  449.                                                                                                     
  450.        //-------------------------------------------------------------------------------------------
  451.        // Return Value Size                                                                         
  452.           If returnValueSize < 1;                                                                   
  453.              sndPM_Msg_Id = 'PVM1002';                                                              
  454.              %SubSt(SndPM_Data : 1 : 20) = 'Return Value Size';                                     
  455.              %SubSt(SndPM_Data : 21 : 10) = %EditC(returnValueSize : 'Z');                          
  456.              sndPm_Data_Length = 30;                                                                
  457.              /Include QRPGCBSRC,CQMHSNDPM                                                           
  458.              ExSr exitProcedure;                                                                    
  459.           EndIf;                                                                                    
  460.                                                                                                     
  461.           memSet(returnValue : 0 : returnValueSize);                                                
  462.                                                                                                     
  463.        EndSr;                                                                                       
  464.                                                                                                     
  465.        //===========================================================================================
  466.        // Exit Program                                                                              
  467.        //===========================================================================================
  468.                                                                                                     
  469.        BegSr exitProcedure;                                                                         
  470.                                                                                                     
  471.           unRegisterConditionHandler(userCHConditionHandler : *OMIT);                               
  472.                                                                                                     
  473.           Return;                                                                                   
  474.                                                                                                     
  475.        EndSr;                                                                                       
  476.                                                                                                     
  477.       /End-Free                                                                                     
  478.                                                                                                     
  479.      P convertCharToType...                                                                         
  480.      P                 E                                                                            
  481.                                                                                                     
  482.      /*=============================================================================================
© 2004-2019 by midrange.com generated in 0.014s valid xhtml & css