00001 #include "scicos_block.h"
00002 #include <math.h>
00003
00004 void logicalop(scicos_block *block,int flag)
00005 {
00006 int i,j,k,l;
00007 i=block->ipar[0];
00008 switch (i)
00009 {
00010 case 0:
00011 if (block->nin==1)
00012 {
00013 block->outptr[0][0]=1.0;
00014 for (j=0;j<block->insz[0];j++) {
00015 if(block->inptr[0][j]<=0)
00016 {
00017 block->outptr[0][0]=0.0;
00018 break;
00019 }
00020 }
00021 }
00022 else {
00023 for (j=0;j<block->insz[0];j++) {
00024 block->outptr[0][j]=1.0;
00025 for (k=0;k<block->nin;k++) {
00026 if(block->inptr[k][j]<=0) {
00027 block->outptr[0][j]=0.0;
00028 break;
00029 }
00030 }
00031 }
00032 }
00033 break;
00034
00035 case 1:
00036 if (block->nin==1)
00037 {
00038 block->outptr[0][0]=0.0;
00039 for (j=0;j<block->insz[0];j++) {
00040 if(block->inptr[0][j]>0) {
00041 block->outptr[0][0]=1.0;
00042 break;
00043 }
00044 }
00045 }
00046 else {
00047 for (j=0;j<block->insz[0];j++) {
00048 block->outptr[0][j]=0.0;
00049 for (k=0;k<block->nin;k++) {
00050 if(block->inptr[k][j]>0) {
00051 block->outptr[0][j]=1.0;
00052 break;
00053 }
00054 }
00055 }
00056 }
00057 break;
00058
00059 case 2:
00060 if (block->nin==1)
00061 {
00062 block->outptr[0][0]=0.0;
00063 for (j=0;j<block->insz[0];j++) {
00064 if(block->inptr[0][j]<=0)
00065 {
00066 block->outptr[0][0]=1.0;
00067 break;
00068 }
00069 }
00070 }
00071 else {
00072 for (j=0;j<block->insz[0];j++) {
00073 block->outptr[0][j]=0.0;
00074 for (k=0;k<block->nin;k++) {
00075 if(block->inptr[k][j]<=0) {
00076 block->outptr[0][j]=1.0;
00077 break;
00078 }
00079 }
00080 }
00081 }
00082 break;
00083
00084 case 3:
00085 if (block->nin==1)
00086 {
00087 block->outptr[0][0]=1.0;
00088 for (j=0;j<block->insz[0];j++) {
00089 if(block->inptr[0][j]>0) {
00090 block->outptr[0][0]=0.0;
00091 break;
00092 }
00093 }
00094 }
00095 else {
00096 for (j=0;j<block->insz[0];j++) {
00097 block->outptr[0][j]=1.0;
00098 for (k=0;k<block->nin;k++) {
00099 if(block->inptr[k][j]>0) {
00100 block->outptr[0][j]=0.0;
00101 break;
00102 }
00103 }
00104 }
00105 }
00106 break;
00107
00108 case 4:
00109 if (block->nin==1)
00110 {
00111 l=0;
00112 for (j=0;j<block->insz[0];j++) {
00113 if(block->inptr[0][j]>0) {
00114 l=(l+1)%2;
00115 }
00116 }
00117 block->outptr[0][0]=(double) l;
00118 }
00119 else {
00120 for (j=0;j<block->insz[0];j++) {
00121 l=0;
00122 for (k=0;k<block->nin;k++) {
00123 if(block->inptr[k][j]>0) {
00124 l=(l+1)%2;
00125 }
00126 }
00127 block->outptr[0][j]=(double) l;
00128 }
00129 }
00130 break;
00131
00132 case 5:
00133 for (j=0;j<block->insz[0];j++) {
00134 if(block->inptr[0][j]>0) {
00135 block->outptr[0][j]=0.0;
00136 }
00137 else{
00138 block->outptr[0][j]=1.0;
00139 }
00140 }
00141 }
00142 }