00001
00002 #include <stdio.h>
00003 #include <string.h>
00004
00005 #ifdef __STDC__
00006 #include <stdlib.h>
00007 #endif
00008 #include "machine.h"
00009 #include "mputi.h"
00010
00011 #include "../../../fileio/src/c/misc.h"
00012 #include "sciprint.h"
00013
00014 struct soundstream ftf;
00015 extern FILE *GetFile();
00016 extern int GetSwap();
00017
00018 extern int SWAP(char type[],integer *fd);
00019
00020 #define MPUTI(Type,Fswap) {\
00021 Type *RES;\
00022 Type val; \
00023 RES= (Type *)res;\
00024 for ( i=0; i< *n; i++) { \
00025 val=(Type) *RES++; \
00026 if ( swap) val = Fswap(val); \
00027 fwrite(&val,sizeof(Type),1,fa); }\
00028 }
00029
00030
00031 void C2F(mputi) (integer *fd,integer *res,integer *n,char type[],integer *ierr)
00032 {
00033 char c1,c2;
00034 int i,nc,swap;
00035 FILE *fa;
00036 ft_t ft;
00037 char *RES_c;
00038 unsigned char *RES_uc;
00039 unsigned long *RES_ul;
00040 unsigned short *RES_us;
00041
00042 RES_c=(char *)res;
00043 RES_uc=(unsigned char *)res;
00044 RES_ul=(unsigned long *)res;
00045 RES_us=(unsigned short *)res;
00046
00047 fa = GetFile(fd);
00048 swap = GetSwap(fd);
00049 ft = &ftf;
00050 ft->fp = fa;
00051 nc=strlen(type);
00052 if ( nc == 0)
00053 {
00054 sciprint("mputi : format is of 0 length \r\n",type);
00055 *ierr=1;
00056 return;
00057 }
00058 if (fa)
00059 {
00060 switch ( type[0] )
00061 {
00062 case 'l' :
00063 swap=SWAP(type,fd);
00064 if(swap<0) {*ierr=1;return;}
00065 MPUTI(long,swapl);
00066 break;
00067 case 's' :
00068 swap=SWAP(type,fd);
00069 if(swap<0) {*ierr=1;return;}
00070 MPUTI(short,swapw);
00071 break;
00072 case 'c' :
00073 for ( i=0; i< *n; i++)
00074 {
00075 char val;
00076 val =(char) *RES_c++;
00077 fwrite(&val,sizeof(char),1,fa);
00078 }
00079 break;
00080 case 'u' :
00081 if ( strlen(type) > 1) c1=type[1] ;
00082 else c1=' ';
00083
00084 switch ( c1 )
00085 {
00086 case 'b' :
00087 if ( strlen(type) > 2) c2=type[2];
00088 else c2=' ';
00089 switch (c2 )
00090 {
00091 case 'l' :
00092
00093
00094 for ( i=0; i< *n; i++)
00095 {
00096 unsigned long val;
00097 val =(unsigned long) *RES_ul++;
00098 wblong(ft, val);
00099 }
00100 break;
00101 case 's' :
00102
00103
00104 for ( i=0; i< *n; i++)
00105 {
00106 unsigned short val;
00107 val =(unsigned short) *RES_uc++;
00108 wbshort(ft,val);
00109 }
00110 break;
00111
00112 }
00113 break;
00114 case 'l' :
00115 if ( strlen(type) > 2) c2=type[2];
00116 else c2=' ';
00117 switch ( c2 )
00118 {
00119 case 'l' :
00120
00121
00122 for ( i=0; i< *n; i++)
00123 {
00124 unsigned long val;
00125 val =(unsigned long) *RES_ul++;
00126 wllong(ft, val);
00127 }
00128 break;
00129 case 's' :
00130
00131
00132 for ( i=0; i< *n; i++)
00133 {
00134 unsigned short val;
00135 val =(unsigned short) *RES_us++;
00136 wlshort(ft,val);
00137 }
00138 break;
00139 default:
00140 MPUTI(unsigned long,swapl);
00141 break;
00142 }
00143 break;
00144 case 's' :
00145 MPUTI(unsigned short,swapw);
00146 break;
00147 case 'c' :
00148 for ( i=0; i< *n; i++)
00149 {
00150 unsigned char val;
00151 val =(unsigned char) *RES_uc++;
00152 fwrite(&val,sizeof(unsigned char),1,fa);
00153 }
00154 break;
00155 default :
00156 sciprint("mputi : %s format not recognized \r\n",type);
00157 *ierr=1;
00158 return;
00159 }
00160 break;
00161 default :
00162 sciprint("mputi : %s format not recognized \r\n",type);
00163 *ierr=1;
00164 return;
00165 }
00166 *ierr = ferror(fa);
00167 return;
00168 }
00169 sciprint("No input file \r\n");
00170 *ierr=1;
00171 }