RGB LED STRIP programming question

I think this will do close to what you want.

#include <FastSPI_LED.h>

#define NUM_LEDS 96

struct CRGB { 
  unsigned char r; 
  unsigned char g; 
  unsigned char b; 
};

struct CRGB *leds;

#define PIN 4

void setup() {
  pinMode(5, INPUT);
  FastSPI_LED.setLeds(NUM_LEDS);
  FastSPI_LED.setChipset(CFastSPI_LED::SPI_WS2801);
  FastSPI_LED.setDataRate(3);
  //FastSPI_LED.setChipset(CFastSPI_LED::SPI_LPD6803);
  //FastSPI_LED.setChipset(CFastSPI_LED::SPI_HL1606);
  //FastSPI_LED.setChipset(CFastSPI_LED::SPI_595);
  //FastSPI_LED.setChipset(CFastSPI_LED::SPI_WS2801);

  FastSPI_LED.setPin(PIN);

  FastSPI_LED.init();
  FastSPI_LED.start();

  leds = (struct CRGB*)FastSPI_LED.getRGBData(); 
  memset(leds, 0, NUM_LEDS * 3);
}

void loop() { 
  int button = analogRead(5);

  //  If the button is down, insert a random color at the beginning of the strip
  if(button > 1000) {
      leds[0].r = random(256);
      leds[0].g = random(256);
      leds[0].b = random(256);
  }
  
  // Show the current pattern
  FastSPI_LED.show();
  delay(30);
 
  // Move all the lights down one step
  for(int i = NUM_LEDS-1; i > 0; i-- ) {
      leds[i].r = leds[i-1].r;
      leds[i].g = leds[i-1].g;
      leds[i].b = leds[i-1].b;

      leds[0].r = 0;
      leds[0].g = 0;
      leds[0].b = 0;
  }
}

EDIT: Oops. The loop should have started at NUM_LEDS-1. Fixed it