This is MUX.m in view mode; [Download] [Up]
// // MUX // // An Objective-C class for simulating a MUX. // #import "MUX.h" #import "compmath.h" @implementation MUX - initNumBits:(int)nbits // Number of bits. numselectbits:(int)nselbits // Number of select bits. select:selnode // Node of select lines. sources:(id *)sourceArray // Array of sources. out:outnode // Output node. { int i; char tempstr[50]; [super init]; if(nbits < 1) { fprintf(stderr, "MUX: Attempt to create a MUX with less than one bit per input!\n"); exit(-1); } numbits = nbits; if(nselbits < 1) { fprintf(stderr, "MUX: Attempt to create a MUX with less than one select bit!\n"); exit(-1); } numselectbits = nselbits; numinputs = pow2(nselbits); INITDEVTYPE("MUX"); TESTNODE("SELECT", selnode, numselectbits); TESTNODE("OUT", outnode, numbits); for(i = 0; i < numinputs; i++) { sprintf(tempstr, "IN[%d]", i); TESTNODE(tempstr, sourceArray[i], numbits); } INS = (id *)malloc(numinputs * sizeof(id)); SELECT = selnode; OUT = outnode; for(i = 0; i < numinputs; i++) { INS[i] = sourceArray[i]; // fprintf(stderr, "MUX: Input %d is %p.\n", i, INS[i]); } return self; } - free { free(INS); return [super free]; } - cycle { bit *selbits = [SELECT getBits]; int i, index; index = 0; for(i = 0; i < numselectbits; i++) { index = index * 2; // Shift index right; index = index + selbits[i]; // Add current bit; } // fprintf(stdout, "MUX: Putting input %d (", index); // [INS[index] dumpBinaryToFile:stdout]; // fprintf(stdout, ") on output.\n"); [OUT setBits:[INS[index] getBits]]; // Put appropriate input on OUT. return self; } @end // // End of file. //
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.