You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: mp_omerc.m
    path of file: ./repos/matlab_owc/lib/m_map1.4/private
    
    the code of the file until where you have to start completion: function  [X,Y,vals,labI]=mp_omerc(optn,varargin)
% MP_TMERC   Oblique Mercator projection
%           This function should not be used directly; instead it is
%           is accessed by various high-level functions named M_*.


% Rich Pawlowicz (rich@ocgy.ubc.ca) 2/Apr/1997
%
% This software is provided "as is" without warranty of any kind. But
% it's mine, so you can't sell it.
%

    
function  [X,Y,vals,labI]=mp_omerc(optn,varargin)
% MP_TMERC   Oblique Mercator projection
%           This function should not be used directly; instead it is
%           is accessed by various high-level functions named M_*.


% Rich Pawlowicz (rich@ocgy.ubc.ca) 2/Apr/1997
%
% This software is provided "as is" without warranty of any kind. But
% it's mine, so you can't sell it.
%
% Mathematical formulas for the projections and thie inverses are taken from
%
%      Snyder, John P., Map Projections used by the US Geological Survey, 
%      Geol. Surv. Bull. 1532, 2nd Edition, USGPO, Washington D.C., 1983.
%
% The oblique mercator is a cylindrical projection around an arbitrary
% great-circle route. This is a handy projection for coastlines and so
% forth.
% Oblique Mercator - cylindrical conformal


global MAP_PROJECTION MAP_VAR_LIST

name={'Oblique Mercator'};

pi180=pi/180;

switch optn,

  case 'name',

     X=name;

  case {'usage','set'}

     X=char({['     ''' varargin{1} ''''],...
              '     <,''lon<gitude>'',[value1 value2]>',...
              '     <,''lat<itude>'',[value1 value2]>',...
              '     <,''asp<ect>'',value>',...
              '     <,''dir<ection>'',( ''horizontal'' | ''vertical'' )'});

  case 'get',

     X=char([' Projection: ' MAP_PROJECTION.name '  (function: ' MAP_PROJECTION.routine ')'],...
            [' longitudes: ' num2str(MAP_VAR_LIST.ulongs)],...
            [' latitudes: ' num2str(MAP_VAR_LIST.ulats) ],...
            [' Aspect ratio: ' num2str(MAP_VAR_LIST.aspect)],...
            [' Baseline direction ' MAP_VAR_LIST.direc]); 

  case 'initialize',

    MAP_VAR_LIST=[];
    MAP_PROJECTION.name=varargin{1};
    MAP_VAR_LIST.ulongs=[-132 -125];
    MAP_VAR_LIST.ulats=[56 40];
    MAP_VAR_LIST.aspect=0.5;
    MAP_VAR_LIST.direc='ver';
    MAP_VAR_LIST.rectbox='on';  % THis is always the case for this projection; it's just
                                % too difficult to comtemplate the other possibility
    k=2;
    while k<length(varargin),   
      switch varargin{k}(1:3),
         case 'lon',
           MAP_VAR_LIST.ulongs=varargin{k+1};
         case 'asp',
           MAP_VAR_LIST.aspect=varargin{k+1};
         case 'lat',
           MAP_VAR_LIST.ulats=varargin{k+1};
         case 'dir',
           MAP_VAR_LIST.direc=varargin{k+1};
         otherwise
           disp(['Unknown option: ' varargin{k}]);
         end