home *** CD-ROM | disk | FTP | other *** search
/ Education Sampler 1992 [NeXTSTEP] / Education_1992_Sampler.iso / SoundAndMusic / Hyperupic / Hyperupic.app / HyperupicControl.m < prev    next >
Text File  |  1992-08-20  |  11KB  |  607 lines

  1. #import "HyperupicControl.h"
  2.  
  3.  
  4. @implementation HyperupicControl
  5.  
  6. static any_t runFunc(any_t obj)
  7. {
  8.   [((id)obj) runGen];
  9.   return 0;
  10. }
  11.  
  12. static DPSTimedEntryProc updateStatus( DPSTimedEntry te, double now,
  13.     void *userData )
  14. {
  15.   HyperupicControl *self;
  16.  
  17.   self = userData;
  18.   if (self->hypeGen) {
  19.     if ([self->hypeGen getStatus] == IDLE) {
  20.       [self->statusText setStringValue:"done"];
  21.  
  22.       if ( [self->hypeGen getSavedSoundFile] == NO ) {
  23.     char msg[1024];
  24.     sprintf(msg,"%7f", (float) ([self->hypeGen getBigee] ));
  25.     [self->amplitudeText setStringValue:msg];
  26.     sprintf(msg,"%7f", (float) ([self->hypeGen getDuration] ));
  27.     [self->durationText setStringValue:msg];
  28.       }
  29.     }
  30.     else {
  31.       if ([self->hypeGen getStatus] == PAUSED)
  32.     [self->statusText setStringValue:"paused"];
  33.       else {
  34.     char msg[1024];
  35.     sprintf(msg,"%d%% computed", (int) ([self->hypeGen howFar] * 100.));
  36.     [self->statusText setStringValue:msg];
  37.     sprintf(msg,"%7f", (float) ([self->hypeGen getBigee] ));
  38.     [self->amplitudeText setStringValue:msg];
  39.     sprintf(msg,"%7f", (float) ([self->hypeGen getDuration] ));
  40.     [self->durationText setStringValue:msg];
  41.       }
  42.     }
  43.   }
  44.   return 0;
  45. }
  46.  
  47. + create {
  48.  
  49.   id    newInstance;
  50.  
  51.   newInstance = [self new];
  52.   return newInstance;
  53. }
  54.  
  55. - init {
  56.  
  57.   [super init];
  58.   hypeGen = [[HyperupicGen alloc] init];
  59.   myTimedEntry = DPSAddTimedEntry( 3.0, (DPSTimedEntryProc) updateStatus,
  60.         self, NX_BASETHRESHOLD );
  61.  
  62.   return self;
  63. }
  64.  
  65. - sendAmplitudeText: (char *) stringValue {
  66.  
  67.   [amplitudeText setStringValue:stringValue];
  68.   return self;
  69. }
  70.  
  71. - sendStatusText: (char *) stringValue {
  72.  
  73.   [statusText setStringValue:stringValue];
  74.   return self;
  75. }
  76.  
  77. - sendMapPathText: (char *) stringValue{
  78.  
  79.   [mapPathText setStringValue:stringValue];
  80.   return self;
  81. }
  82.  
  83. - sendImagePathText: (char *) stringValue{
  84.  
  85.   [imagePathText setStringValue:stringValue];
  86.   return self;
  87. }
  88.  
  89. - displayFreqs: sender {
  90.  
  91.   [freqConWindow orderBack:sender];
  92.   [hypeGen displayFreqs:sender];
  93.   return self;
  94. }
  95.  
  96. - setHarmsText: sender {
  97.  
  98.   [hypeGen setHarmsText:sender];
  99.   return self;
  100. }
  101.  
  102. - setxVal: sender {
  103.  
  104.   char    bonk[1024];
  105.  
  106.   [hypeGen setxVal:sender];
  107.   sprintf(bonk,"%d", [hypeGen xendVal]);
  108.   [xfText setStringValue:bonk];
  109.   sprintf(bonk,"%d", 0);
  110.   [xsText setStringValue:bonk];
  111.  
  112.   return self;
  113. }
  114.  
  115. - setyVal: sender {
  116.  
  117.   char    bonk[1024];
  118.  
  119.   [hypeGen setyVal:sender];
  120.   sprintf(bonk,"%d", [hypeGen yendVal]);
  121.   [yfText setStringValue:bonk];
  122.   sprintf(bonk,"%d", 0);
  123.   [ysText setStringValue:bonk];
  124.  
  125.   return self;
  126. }
  127.  
  128. - setxstartVal: sender {
  129.  
  130.   [hypeGen setxstartVal:sender];
  131.   return self;
  132. }
  133.  
  134. - setystartVal: sender {
  135.  
  136.   [hypeGen setystartVal:sender];
  137.   return self;
  138. }
  139.  
  140. - setxendVal: sender {
  141.  
  142.   [hypeGen setxendVal:sender];
  143.   return self;
  144. }
  145.  
  146. - setyendVal: sender {
  147.  
  148.   [hypeGen setyendVal:sender];
  149.   return self;
  150. }
  151.  
  152. - snuff: sender {
  153.  
  154.   if ([hypeGen getStatus] != IDLE) {
  155.     [hypeGen snuff];
  156.     [statusText setStringValue:"snuffed"];
  157.   }
  158.   else 
  159.     NXRunAlertPanel("Shake your Booty","Holy Toledo! Nothing left to kill!",
  160.             "okie",NULL,NULL,NULL);
  161.  
  162.   return self;
  163. }
  164.  
  165. - pause: sender {
  166.  
  167.   if ([hypeGen getStatus] == PAUSED) {
  168.     [(HyperupicGen *)hypeGen resume];
  169.     [statusText setStringValue:"running"];
  170.   }
  171.   else {
  172.     if ([hypeGen getStatus] != IDLE) {
  173.       [(HyperupicGen *)hypeGen pause];
  174.     [statusText setStringValue:"paused"];
  175.     }
  176.     else {
  177.       NXRunAlertPanel("Head Cheese","Look around you! We're idling.",
  178.             "dokie",NULL,NULL,NULL);
  179. //    [sender setState:0];
  180.     }
  181.   }
  182.  
  183.   return self;
  184. }
  185.  
  186. - ampref: sender {
  187.   [hypeGen ampref:sender];
  188.   return self;
  189. }
  190.  
  191. - time: sender {
  192.   [hypeGen time:sender];
  193.   return self;
  194. }
  195.  
  196. - freqcon: sender {
  197.   [hypeGen freqcon:sender];
  198.   return self;
  199. }
  200.  
  201. - freqdiff: sender {
  202.   [hypeGen freqdiff:sender];
  203.   return self;
  204. }
  205.  
  206. - samplingRate: sender {
  207.   [hypeGen samplingRate:sender];
  208.   return self;
  209. }
  210.  
  211. - seed: sender {
  212.   [hypeGen seed:sender];
  213.   return self;
  214. }
  215.  
  216. - setSynt: sender {
  217.   [hypeGen setSynt:sender];
  218.   return self;
  219. }
  220.  
  221. - setImagePath: sender {
  222.  
  223.   char    bonk[1024];
  224.  
  225.   if ( [hypeGen getStatus] == IDLE ) {
  226.     [hypeGen setImagePath:sender];
  227.     if ( [hypeGen getGotImage] == YES) {
  228.       sprintf(bonk,"%d", [hypeGen xval]);
  229.       [xText setStringValue:bonk];
  230.       sprintf(bonk,"%d", [hypeGen yval]);
  231.       [yText setStringValue:bonk];
  232.       sprintf(bonk,"%d", [hypeGen xendVal]);
  233.       [xfText setStringValue:bonk];
  234.       sprintf(bonk,"%d", [hypeGen yendVal]);
  235.       [yfText setStringValue:bonk];
  236.       sprintf(bonk,"%d", 0);
  237.       [xsText setStringValue:bonk];
  238.       sprintf(bonk,"%d", 0);
  239.       [ysText setStringValue:bonk];
  240.     }
  241.   }
  242.   else {
  243.     sprintf(bonk,"%s", [hypeGen getImagePath]);
  244.     [imagePathText setStringValue:bonk];
  245.   }
  246.  
  247.   return self;
  248. }
  249.  
  250. - setMapPath: sender {
  251.  
  252.   char    bonk[1024];
  253.  
  254.   if ( [hypeGen getStatus] != IDLE ) {
  255.     sprintf(bonk,"%s", [hypeGen getMapPath]);
  256.     [mapPathText setStringValue:bonk];
  257.   }
  258.   else 
  259.     [hypeGen setMapPath:sender];
  260.  
  261.   return self;
  262. }
  263.  
  264. - setTablePath: sender {
  265.  
  266.   char    bonk[1024];
  267.  
  268.   if ( [hypeGen getStatus] != IDLE ) {
  269.     sprintf(bonk,"%s", [hypeGen getTablePath]);
  270.     [tablePathText setStringValue:bonk];
  271.   }
  272.   else
  273.     [hypeGen setTablePath:sender];
  274.  
  275.   return self;
  276. }
  277.  
  278. - openRequest:sender
  279. {
  280.  
  281.   char    bonk[1024];
  282.  
  283.   if ( [hypeGen getStatus] != IDLE ) {
  284.     NXRunAlertPanel("Iron Maiden","Well blow me down! Hyperupic is transducing!",
  285.                         "okie",NULL,NULL,NULL);
  286.     return nil;
  287.   }
  288.  
  289.   if ([hypeGen openRequest:sender] && [hypeGen getGotImage] == YES) {
  290.     sprintf(bonk,"%s", [hypeGen getImagePath]);
  291.     [imagePathText setStringValue:bonk];
  292.     sprintf(bonk,"%d", [hypeGen xval]);
  293.     [xText setStringValue:bonk];
  294.     sprintf(bonk,"%d", [hypeGen yval]);
  295.     [yText setStringValue:bonk];
  296.     sprintf(bonk,"%d", [hypeGen xendVal]);
  297.     [xfText setStringValue:bonk];
  298.     sprintf(bonk,"%d", [hypeGen yendVal]);
  299.     [yfText setStringValue:bonk];
  300.     sprintf(bonk,"%d", 0);
  301.     [xsText setStringValue:bonk];
  302.     sprintf(bonk,"%d", 0);
  303.     [ysText setStringValue:bonk];
  304.   }
  305.  
  306.   return self;
  307. }
  308.  
  309. - openMapRequest:sender
  310. {
  311.  
  312.   char    bonk[1024];
  313.  
  314.   if ( [hypeGen getStatus] != IDLE ) {
  315.     NXRunAlertPanel("Don Ho","NO NO NO! Hyperupic is transducing!",
  316.                         "dokie",NULL,NULL,NULL);
  317.     return nil;
  318.   }
  319.  
  320.   if ([hypeGen openMapRequest:sender] && [hypeGen getGotMapFile] == YES) {
  321.     sprintf(bonk,"%s", [hypeGen getMapPath]);
  322.     [mapPathText setStringValue:bonk];
  323.   }
  324.  
  325.   return self;
  326. }
  327.  
  328. - openTableRequest:sender
  329. {
  330.  
  331.   char    bonk[1024];
  332.  
  333.   if ( [hypeGen getStatus] != IDLE ) {
  334.     NXRunAlertPanel("Psychedelic Circus","Uh Oh! Hyperupic is transducing!",
  335.                         "dokie",NULL,NULL,NULL);
  336.     return nil;
  337.   }
  338.  
  339.   if ([hypeGen openTableRequest:sender] && [hypeGen getGotTableFile] == YES) {
  340.     sprintf(bonk,"%s", [hypeGen getTablePath]);
  341.     [tablePathText setStringValue:bonk];
  342.   }
  343.  
  344.   return self;
  345. }
  346.  
  347.  
  348. - saveRequest:sender
  349. {
  350.   [hypeGen saveRequest:sender];
  351.   return self;
  352. }
  353.  
  354. - saveInRequest:sender
  355. {
  356.   if ([hypeGen saveInRequest:sender])
  357.     [mainWindow setTitle:[hypeGen getSoundPath]];
  358.  
  359.   return self;
  360. }
  361.  
  362. - playSound: sender {
  363.  
  364.   [hypeGen playSound:sender];
  365.   return self;
  366. }
  367.  
  368. - stopPlaying: sender {
  369.  
  370.   SNDStop(1);
  371.   return self;
  372. }
  373.  
  374. - reverseMapping: sender {
  375.  
  376.   [hypeGen reverseMapping:sender];
  377.   return self;
  378. }
  379.  
  380. - adjustFrequency: sender {
  381.  
  382.   char    bonk[1024];
  383.  
  384.   sprintf(bonk,"%f", [hypeGen adjustFrequency]);
  385.   [freqOffText setStringValue:bonk];
  386.   return self;
  387. }
  388.  
  389. - runGen: sender {
  390.  
  391.   int    grabber;
  392.  
  393.   if ([hypeGen getGotImage] == NO) {
  394.     NXRunAlertPanel("Bruno Walter","Criminy! No image to transduce!",
  395.                         "dokie",NULL,NULL,NULL);
  396.     return nil;
  397.   }
  398.  
  399.   if ([hypeGen getGotMapFile] == NO) {
  400.     NXRunAlertPanel("Liberal, Kansas","Loser! Specify an amplitude map file!",
  401.                         "okie",NULL,NULL,NULL);
  402.     return nil;
  403.   }
  404.  
  405.   if ([hypeGen getOscilTable] == YES) {
  406.     if ([hypeGen getGotTableFile] == NO) {
  407.       NXRunAlertPanel("Lead Pipe",
  408.             "Oh Ford! You need to specify an oscillator table!",
  409.             "dokie",NULL,NULL,NULL);
  410.       return nil;
  411.     }
  412.   }
  413.  
  414.   // thread control
  415.  
  416.   if ([hypeGen getStatus] != IDLE) {
  417.     grabber = NXRunAlertPanel("Snail Death",
  418.         "Drunkard! You already have a process running!",
  419.         "Snuff","Reprieve",NULL,NULL);
  420.     if (grabber == NX_ALERTDEFAULT) {
  421.       [self snuff:self];
  422.       cthread_yield();             // a good time for a thread!
  423.     } 
  424.     else {
  425.       if (grabber == NX_ALERTALTERNATE)
  426.         return nil;
  427.     }
  428.   }
  429.  
  430.  
  431.   if ( [hypeGen getSavedSoundFile] == NO ) {
  432.     grabber = NXRunAlertPanel("Marlboro","Clumsy! Unsaved sound file!",
  433.             "Save","Forget","Cancel",NULL);
  434.  
  435.     if ( grabber == NX_ALERTDEFAULT )
  436.       [self saveInRequest:self];
  437.     else {
  438.       if ( grabber == NX_ALERTOTHER )
  439.     return nil;
  440.     }
  441.   }
  442.  
  443.   cthread_detach(cthread_fork( runFunc, (any_t) hypeGen));
  444.  
  445.   return self;
  446. }
  447.  
  448. - selectGenHarmSeries: sender {
  449.  
  450.   [hypeGen selectGenHarmSeries:sender];
  451.   return self;
  452. }
  453.  
  454. - selectGenScale: sender {
  455.  
  456.   [hypeGen selectGenScale:sender];
  457.   return self;
  458. }
  459.  
  460. - selectXcoor: sender {
  461.  
  462.   [hypeGen selectXcoor:sender];
  463.   return self;
  464. }
  465.  
  466.  
  467. - selectYcoor: sender {
  468.  
  469.   [hypeGen selectYcoor:sender];
  470.   return self;
  471. }
  472.  
  473. - selectDisplayAll: sender {
  474.  
  475.   [hypeGen selectDisplayAll:sender];
  476.   return self;
  477. }
  478.  
  479. - selectDisplayMinMax: sender {
  480.  
  481.   [hypeGen selectDisplayMinMax:sender];
  482.   return self;
  483. }
  484.  
  485.  
  486. - selectGenNorm: sender {
  487.  
  488.   [hypeGen selectGenNorm:sender];
  489.   return self;
  490. }
  491.  
  492. - selectGenRetro: sender {
  493.  
  494.   [hypeGen selectGenRetro:sender];
  495.   return self;
  496. }
  497.  
  498. - selectGenRotNorm: sender {
  499.  
  500.   [hypeGen selectGenRotNorm:sender];
  501.   return self;
  502. }
  503.  
  504. - selectGenRotRetro: sender {
  505.  
  506.   [hypeGen selectGenRotRetro:sender];
  507.   return self;
  508. }
  509.  
  510. - selectGenNormInv: sender {
  511.  
  512.   [hypeGen selectGenNormInv:sender];
  513.   return self;
  514. }
  515.  
  516. - selectGenRetroInv: sender {
  517.  
  518.   [hypeGen selectGenRetroInv:sender];
  519.   return self;
  520. }
  521.  
  522. - selectGenRotNormInv: sender {
  523.  
  524.   [hypeGen selectGenRotNormInv:sender];
  525.   return self;
  526. }
  527.  
  528. - selectGenRotRetroInv: sender {
  529.  
  530.   [hypeGen selectGenRotRetroInv:sender];
  531.   return self;
  532. }
  533.  
  534. - selectMapR: sender {
  535.  
  536.   [hypeGen selectMapR:sender];
  537.   return self;
  538. }
  539.  
  540. - selectMapG: sender {
  541.  
  542.   [hypeGen selectMapG:sender];
  543.   return self;
  544. }
  545.  
  546. - selectMapB: sender {
  547.  
  548.   [hypeGen selectMapB:sender];
  549.   return self;
  550. }
  551.  
  552. - selectMapRG: sender {
  553.  
  554.   [hypeGen selectMapRG:sender];
  555.   return self;
  556. }
  557.  
  558. - selectMapRB: sender {
  559.  
  560.   [hypeGen selectMapRB:sender];
  561.   return self;
  562. }
  563.  
  564. - selectMapGB: sender {
  565.  
  566.   [hypeGen selectMapGB:sender];
  567.   return self;
  568. }
  569.  
  570. - selectMapRGB: sender {
  571.  
  572.   [hypeGen selectMapRGB:sender];
  573.   return self;
  574. }
  575.  
  576. - selectOscCos: sender {
  577.  
  578.   [hypeGen selectOscCos:sender];
  579.   return self;
  580. }
  581.  
  582. - selectOscComplex: sender {
  583.  
  584.   [harmWindow orderBack:sender];
  585.   [hypeGen selectOscComplex:sender];
  586.   return self;
  587. }
  588.  
  589. - selectOscTable: sender {
  590.  
  591.   if ( [hypeGen getGotTableFile] == NO ) {
  592.     if (![self openTableRequest:sender]) {
  593.       return nil;
  594.     }
  595.   }
  596.  
  597.   if (![hypeGen selectOscTable:sender])
  598.     return nil;
  599.  
  600.  
  601. //  [oscilRadio selectCellAt:0 :0];
  602.  
  603.   return self;
  604. }
  605.  
  606. @end
  607.