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: m_streamline.m
    path of file: ./repos/tracacode/1911-COAWST/script/mfiles/m_map
    
    the code of the file until where you have to start completion: function h=m_streamline(long,lat,u,v,varargin)
% M_STREAMLINE Makes a quiverplot on a map (QUIVER-style)
%    M_STREAMLINE(LONG,LAT,U,V) draws well-spaced streamlines (with direction 
%    arrows) with components (U,V) at the points (LONG,LAT) on the currently 
%    defined map.The arrays LONG and LAT, which define the coordinates for U and 
%    V, must be monotonic, but do not need to be uniformly spaced. The 
%    matrices LONG,LAT,U,V must all be the same size. U and V contain the 
%    eastward and northward components of velocity (in m/s or equivalent, NOT
%    degrees lat/long  per sec or equivalent). Arrow scaling is automatic.
% 
%   Note - this is basically a call to STREAMSLICE, which has some limitations and
%   cannot be used for ALL projections. In particular, STREAMSLICE requires that
%
%            [X,Y]=m_ll2xy(LONG,LAT,'clip','point')
%
%   returns X/Y matrices that themselves must be monotonic and plaid (as if produced
%   by MESHGRID). This means that a) none of the points are from outside the map
%   boundaries (since the M_LL2XY call will turn them into NaN), and b) you are
%   probably limited to cylindrical projections (miller, mercator, equidistant 
%   cylindrical). 
%
%   M_STREAMLINE(...,density) modifies the automatic spacing of the streamlines. 
%   Density must be greater than 0. The default value is 1; higher values 
%   produce  more streamlines on each plane. For example, 2 produces 
%   approximately twice as many streamlines, while 0.5 produces approximately 
%   half as many.
% 
%   M_STREAMLINE(...,'arrowsmode') determines if direction arrows are present 
%   or not. arrowmode can be:
% 
%   arrows   - Draw direction arrows on the streamlines (default).
%   noarrows - Do not draw direction arrows.
% 
%   M_STREAMLINE(...,'method') specifies the interpolation method to use. 
%   method can be
% 
%   linear   - Linear interpolation (default)
%   cubic    - Cubic interpolation
%   nearest  - Nearest-neighbor interpolation
%   See interp3 for more information on interpolation methods.
% 
%   M_STREAMLINE(axes_handle,...) plots into the axes object with the handle 
%   axes_handle instead of into the current axes object (gca).
% 
%   h = M_STREAMLINE(...) returns a vector of handles to the line objects 

    
function h=m_streamline(long,lat,u,v,varargin)
% M_STREAMLINE Makes a quiverplot on a map (QUIVER-style)
%    M_STREAMLINE(LONG,LAT,U,V) draws well-spaced streamlines (with direction 
%    arrows) with components (U,V) at the points (LONG,LAT) on the currently 
%    defined map.The arrays LONG and LAT, which define the coordinates for U and 
%    V, must be monotonic, but do not need to be uniformly spaced. The 
%    matrices LONG,LAT,U,V must all be the same size. U and V contain the 
%    eastward and northward components of velocity (in m/s or equivalent, NOT
%    degrees lat/long  per sec or equivalent). Arrow scaling is automatic.
% 
%   Note - this is basically a call to STREAMSLICE, which has some limitations and
%   cannot be used for ALL projections. In particular, STREAMSLICE requires that
%
%            [X,Y]=m_ll2xy(LONG,LAT,'clip','point')
%
%   returns X/Y matrices that themselves must be monotonic and plaid (as if produced
%   by MESHGRID). This means that a) none of the points are from outside the map
%   boundaries (since the M_LL2XY call will turn them into NaN), and b) you are
%   probably limited to cylindrical projections (miller, mercator, equidistant 
%   cylindrical). 
%
%   M_STREAMLINE(...,density) modifies the automatic spacing of the streamlines. 
%   Density must be greater than 0. The default value is 1; higher values 
%   produce  more streamlines on each plane. For example, 2 produces 
%   approximately twice as many streamlines, while 0.5 produces approximately 
%   half as many.
% 
%   M_STREAMLINE(...,'arrowsmode') determines if direction arrows are present 
%   or not. arrowmode can be:
% 
%   arrows   - Draw direction arrows on the streamlines (default).
%   noarrows - Do not draw direction arrows.
% 
%   M_STREAMLINE(...,'method') specifies the interpolation method to use. 
%   method can be
% 
%   linear   - Linear interpolation (default)
%   cubic    - Cubic interpolation
%   nearest  - Nearest-neighbor interpolation
%   See interp3 for more information on interpolation methods.
% 
%   M_STREAMLINE(axes_handle,...) plots into the axes object with the handle 
%   axes_handle instead of into the current axes object (gca).
% 
%   h = M_STREAMLINE(...) returns a vector of handles to the line objects 
%   created.
%
%   [vertices arrowvertices] = M_STREAMLINE(...) returns two cell arrays of 
%   vertices  for drawing the streamlines and the arrows. You can pass these 
%   values to any of the streamline drawing functions (streamline, streamribbon, 
%   streamtube).
% 

% Shi Weiheng (tfoterye@gmail.com) 29/Jun/17
%
% Based on m_quiver written by Prof Rich Pawlowicz.
% This software is provided "as is" without warranty of any kind. But
% it's mine, so you can't sell it.
%
%  Nov/2017 - cleaned up comments.

global MAP_PROJECTION MAP_VAR_LIST

% Have to have initialized a map first

if isempty(MAP_PROJECTION)
  disp('No Map Projection initialized - call M_PROJ first!');
  return;
end