Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

f_swaplw.c

Go to the documentation of this file.
00001 //-------------------------------------------------------------
00002 //        Go4 Release Package v3.04-01 (build 30401)
00003 //                      28-November-2008
00004 //---------------------------------------------------------------
00005 //   The GSI Online Offline Object Oriented (Go4) Project
00006 //   Experiment Data Processing at EE department, GSI
00007 //---------------------------------------------------------------
00008 //
00009 //Copyright (C) 2000- Gesellschaft f. Schwerionenforschung, GSI
00010 //                    Planckstr. 1, 64291 Darmstadt, Germany
00011 //Contact:            http://go4.gsi.de
00012 //----------------------------------------------------------------
00013 //This software can be used under the license agreements as stated
00014 //in Go4License.txt file which is part of the distribution.
00015 //----------------------------------------------------------------
00016 #include "typedefs.h"
00017 #define DEBUG 0
00018 /*2+F_SWAPLW****+******************************************************/
00019 /*                                                                    */
00020 /*+ Module      : F_SWAPLW                                            */
00021 /*                                                                    */
00022 /*                                                                    */
00023 /*--------------------------------------------------------------------*/
00024 /*+ CALLING     : sts = f_swaplw(pp_source,                           */
00025 /*                               l_len,                               */
00026 /*                               pp_dest)                             */
00027 /*                                                                    */
00028 /*--------------------------------------------------------------------*/
00029 /*                                                                    */
00030 /*+ PURPOSE     : Long word byte swap.                                */
00031 /*                                                                    */
00032 /*+ ARGUMENTS   :                                                     */
00033 /*+    pp_source   : Pointer to source.                               */
00034 /*+    l_dest      : length (in long words)                           */
00035 /*+    pp_dest     : Pointer to destination or 0 if                   */
00036 /*                   destination = source.                            */
00037 /*                                                                    */
00038 /*+ FUNCTION    : Long word byte swap. Works on the source field if   */
00039 /*                pp_dest points to value 0 or swaps from the source  */
00040 /*                to the destination field.                           */
00041 /*                (Should be replaced by a fast assembler routine)    */
00042 /*                                                                    */
00043 /*+ Return type : int (see s_errnum_def.h)                            */
00044 /*+ Status codes: bit 0: success                                      */
00045 /*                                                                    */
00046 /*+ Initialize  : -                                                   */
00047 /*+ Include name: -                                                   */
00048 /*                                                                    */
00049 /*3+Implementation************+****************************************/
00050 /*                                                                    */
00051 /*+ File name   : PC_PROC.C                                           */
00052 /*+ Version     : 1.01                                                */
00053 /*+ Author      : R.S. Mayer                                          */
00054 /*+ Last Update : 27-Apr-1994                                         */
00055 /*+ Object libr.: ?                                                   */
00056 /*3+Updates*******+***********+****************************************/
00057 /*                                                                    */
00058 /*+ Updates     : Date          Purpose                               */
00059 /*                                                                    */
00060 /*3+Description***+***********+****************************************/
00061 /*1- C Procedure ***********+******************************************/
00062 #include <stdio.h>
00063 #include <stdlib.h>
00064 #include <string.h>
00065 #include <errno.h>
00066 
00067 /* function prototypes */
00068 
00069 /* defines */
00070 
00071 int f_swaplw(int *pp_source, int l_len, int *pp_dest)
00072 
00073 {
00074    unsigned char     *p_source, *p_dest, *p_s, *p_d;
00075    unsigned int      lu_save;
00076 
00077    /* +++ action +++ */
00078    p_source = (unsigned char *) pp_source;
00079    p_dest   = (unsigned char *) pp_dest;
00080 
00081    if (p_dest == NULL)
00082    {
00083         /* source == destination          */
00084          for (p_d = (unsigned char *) p_source,
00085               p_s = (unsigned char *) &lu_save;
00086               p_d < p_source + (l_len * 4);
00087               )
00088          {
00089              lu_save = *( (int *) p_d);
00090              p_s    += 4;                 /* increment source               */
00091              *(p_d++) = *(--p_s);
00092              *(p_d++) = *(--p_s);
00093              *(p_d++) = *(--p_s);
00094              *(p_d++) = *(--p_s);
00095          }
00096    }
00097    else
00098    {
00099          for (p_s = (unsigned char *) p_source,
00100               p_d = (unsigned char *) p_dest;
00101               p_s < p_source + (l_len * 4);
00102               p_s += 4)
00103          {
00104              p_s     += 4;                /* increment source               */
00105              *(p_d++) = *(--p_s);
00106              *(p_d++) = *(--p_s);
00107              *(p_d++) = *(--p_s);
00108              *(p_d++) = *(--p_s);
00109          }
00110 
00111    }  /* dest == 0 */
00112 
00113    return(0);
00114 }
00115 
00116 
00117 //----------------------------END OF GO4 SOURCE FILE ---------------------

Generated on Fri Nov 28 12:59:33 2008 for Go4-v3.04-1 by  doxygen 1.4.2