fxgwrite.pro 2.86 KB
;+
; NAME:
;   FXGWRITE
;
; AUTHOR:
;   Craig B. Markwardt, NASA/GSFC Code 662, Greenbelt, MD 20770
;   craigm@lheamail.gsfc.nasa.gov
;   UPDATED VERSIONs can be found on my WEB PAGE: 
;      http://cow.physics.wisc.edu/~craigm/idl/idl.html
;
; PURPOSE:
;   Perform an unformatted write to a generic resource.
;
; MAJOR TOPICS:
;   File I/O, Pipes, URLs, FITS
;
; CALLING SEQUENCE:
;   FXWRITE, UNIT, BUFFER, TRANSFER_COUNT=TC
;
; DESCRIPTION:
;
;   FXGWRITE performs an unformatted write to the unit UNIT.  The UNIT
;   must have previously been opened by FXGOPEN with write access.
;
;   Currently only unformatted reads are permitted because the precise
;   number of bytes to written must be known ahead of time.
;
;   In other respects, this procedure is similar to the WRITEU
;   built-in IDL procedure.
;
;   You must use the specialized 'FXG' style functions to read, write
;   and seek on file units opened with FXGOPEN:
;
;     FXGOPEN  - open resource
;     FXGCLOSE - close resource
;     FXGREAD  - read from resource
;     FXGWRITE - write to resource
;     FXGSEEK  - seek on resource (i.e., perform POINT_LUN)
;
;     FXGFILTERED - determine if resource is a normal file.
;
; INPUTS:
;
;   UNIT - the unit number to operate on.  The unit must have been
;          previously opened by FXGOPEN.
;
;   BUFFER - the array to be written. Only basic types are permitted.
;            The actual number of bytes transferred can be determined
;            by examining the TRANSFER_COUNT.
;
;
; KEYWORD PARAMETERS:
;
;   TRANSFER_COUNT - upon output, contains the number of elements
;                    transferred from BUFFER.
;
; MODIFICATION HISTORY:
;   Written, 1999, CM
;   Documented, 02 Oct 1999, CM
;   Changed copyright notice, 21 Sep 2000, CM
;
;  $Id: fxgwrite.pro,v 1.3 2007/09/01 23:03:23 craigm Exp $
;
;-
; Copyright (C) 1999-2000, Craig Markwardt
; This software is provided as is without any warranty whatsoever.
; Permission to use, copy, modify, and distribute modified or
; unmodified copies is granted, provided this copyright and disclaimer
; are included unchanged.
;-
PRO FXGWRITE, UNIT, BUFFER, TRANSFER_COUNT=TC

  on_error, 2

  if n_params() NE 2 then begin
      message, 'USAGE: FXGWRITE, UNIT, BUFFER [, TRANSFER_COUNT=TC ]', /info
      return
  endif
  if n_elements(unit) EQ 0 then $
    message, 'ERROR: UNIT is not defined'
  if n_elements(buffer) EQ 0 then $
    message, 'ERROR: BUFFER is not defined'

@fxfilter
  if unit LT 0 OR unit GE FXFILTER_MAX_LUN then $
    message, 'ERROR: UNIT is not a valid file unit'

  writeu = 'WRITEU'
  if filterflag(unit) AND 1  then $
    if write_cmd(unit) NE '' then writeu = write_cmd(unit)
  if writeu EQ '-' then begin
      errmsg = string(unit, $
               format='("ERROR: Resource unit ",I0," does not support writing.")')
      message, errmsg
  endif
  
  call_procedure, writeu, unit, buffer, transfer_count=tc

  return
end