combine two sensor sketches

hi all
ihave a seeduino stalker ,ublox gps module and a LSM303DH compass module ive managed to run both of these separately
in both the serial monitor and in processing
What I now want to learn is how to combine the two sketches, first display in the arduino serial monitor then save to sd and then
open the logged .text in processing for graphical display

can someone show how this can be done

here are the two examples
first for the gps im using ladyardas logger sketch which logs to sd . this sketch has capacity for three additional sensors
but im lost as to how to introduce the compass module

// this is a generic logger that does checksum testing so the data written should be always good
// Assumes a sirf III chipset logger attached to pin 2 and 3

#include <SD.h>
#include <avr/sleep.h>
#include "GPSconfig.h"

// If using Arduino IDE prior to 1.0,
// make sure to install newsoftserial from Mikal Hart
// http://arduiniana.org/libraries/NewSoftSerial/
#if ARDUINO >= 100
 #include <SoftwareSerial.h>
#else
 #include <NewSoftSerial.h>
#endif

// power saving modes
#define SLEEPDELAY 0
#define TURNOFFGPS 0
#define LOG_RMC_FIXONLY 0

// what to log
#define LOG_RMC 1 // RMC-Recommended Minimum Specific GNSS Data, message 103,04
//#define LOG_GGA 0 // GGA-Global Positioning System Fixed Data, message 103,00
//#define LOG_GLL 0 // GLL-Geographic Position-Latitude/Longitude, message 103,01
//#define LOG_GSA 0 // GSA-GNSS DOP and Active Satellites, message 103,02
//#define LOG_GSV 0 // GSV-GNSS Satellites in View, message 103,03
//#define LOG_VTG 0 // VTG-Course Over Ground and Ground Speed, message 103,05



// Use pins 2 and 3 to talk to the GPS. 2 is the TX pin, 3 is the RX pin
#if ARDUINO >= 100
 SoftwareSerial gpsSerial =  SoftwareSerial(2, 3);
#else
 NewSoftSerial gpsSerial =  NewSoftSerial(2, 3);
#endif
// Set the GPSRATE to the baud rate of the GPS module. Most are 4800
// but some are 38400 or other. Check the datasheet!
#define GPSRATE 9600

// Set the pins used 
#define powerPin 0
#define led1Pin 7
#define led2Pin 4
#define chipSelect 10


#define BUFFSIZE 90
char buffer[BUFFSIZE];
uint8_t bufferidx = 0;
uint8_t fix = 0; // current fix data
uint8_t i;
File logfile;

// read a Hex value and return the decimal equivalent
uint8_t parseHex(char c) {
  if (c < '0')
    return 0;
  if (c <= '9')
    return c - '0';
  if (c < 'A')
    return 0;
  if (c <= 'F')
    return (c - 'A')+10;
}

// blink out an error code
void error(uint8_t errno) {
/*
  if (SD.errorCode()) {
    putstring("SD error: ");
    Serial.print(card.errorCode(), HEX);
    Serial.print(',');
    Serial.println(card.errorData(), HEX);
  }
  */
  while(1) {
    for (i=0; i<errno; i++) {
      digitalWrite(led1Pin, HIGH);
      digitalWrite(led2Pin, HIGH);
      delay(100);
      digitalWrite(led1Pin, LOW);
      digitalWrite(led2Pin, LOW);
      delay(100);
    }
    for (; i<10; i++) {
      delay(200);
    }
  }
}

void setup() {
  WDTCSR |= (1 << WDCE) | (1 << WDE);
  WDTCSR = 0;
  Serial.begin(115200);
  Serial.println("\r\nGPSlogger");
  pinMode(led1Pin, OUTPUT);
  pinMode(led2Pin, OUTPUT);
  pinMode(powerPin, OUTPUT);
  digitalWrite(powerPin, LOW);

  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(10, OUTPUT);
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card init. failed!");
    error(1);
  }

  strcpy(buffer, "GPSLOG00.TXT");
  for (i = 0; i < 100; i++) {
    buffer[6] = '0' + i/10;
    buffer[7] = '0' + i%10;
    // create if does not exist, do not open existing, write, sync after write
    if (! SD.exists(buffer)) {
      break;
    }
  }

  logfile = SD.open(buffer, FILE_WRITE);
  if( ! logfile ) {
    Serial.print("Couldnt create "); Serial.println(buffer);
    error(3);
  }
  Serial.print("Writing to "); Serial.println(buffer);
  
  // connect to the GPS at the desired rate
  gpsSerial.begin(GPSRATE);
  
  Serial.println("Ready!");
  
  gpsSerial.print(SERIAL_SET);
  delay(250);

//#if (LOG_DDM == 1)
   //  gpsSerial.print(DDM_ON);
//#else
    // gpsSerial.print(DDM_OFF);
//#endif
//  delay(250);
//#if (LOG_GGA == 1)
   // gpsSerial.print(GGA_ON);
//#else
  //  gpsSerial.print(GGA_OFF);
//#endif
 // delay(250);
//#if (LOG_GLL == 1)
   // gpsSerial.print(GLL_ON);
//#else
   // gpsSerial.print(GLL_OFF);
//#endif
 // delay(250);
//#if (LOG_GSA == 1)
   // gpsSerial.print(GSA_ON);
//#else
   // gpsSerial.print(GSA_OFF);
//#endif
 // delay(250);
//#if (LOG_GSV == 1)
  //  gpsSerial.print(GSV_ON);
//#else
   // gpsSerial.print(GSV_OFF);
//#endif
  delay(250);
#if (LOG_RMC == 1)
    gpsSerial.print(RMC_ON);
#else
    gpsSerial.print(RMC_OFF);
#endif
  delay(250);

//#if (LOG_VTG == 1)
 //   gpsSerial.print(VTG_ON);
//#else
  //  gpsSerial.print(VTG_OFF);
//#endif
 // delay(250);

//#if (USE_WAAS == 1)
  //  gpsSerial.print(WAAS_ON);
//#else
  //  gpsSerial.print(WAAS_OFF);
//#endif
}

void loop() {
  //Serial.println(Serial.available(), DEC);
  char c;
  uint8_t sum;

  // read one 'line'
  if (gpsSerial.available()) {
    c = gpsSerial.read();
#if ARDUINO >= 100
    //Serial.write(c);
#else
    //Serial.print(c, BYTE);
#endif
    if (bufferidx == 0) {
      while (c != '

And here is the compass module code

#include <Wire.h>
#include <LSM303DLH.h>

LSM303DLH compass;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  compass.enableDefault();
  
  // Calibration values. Use the Calibrate example program to get the values for
  // your compass.
  compass.m_min.x = -520; compass.m_min.y = -570; compass.m_min.z = -770;
  compass.m_max.x = +540; compass.m_max.y = +500; compass.m_max.z = 180;
}

void loop() {
  compass.read();
  int heading = compass.heading((LSM303DLH::vector){0,-1,0});
  Serial.println(heading);
  delay(100);
}

)
       c = gpsSerial.read(); // wait till we get a $
   }
   buffer[bufferidx] = c;

#if ARDUINO >= 100
   //Serial.write(c);
#else
   //Serial.print(c, BYTE);
#endif
   if (c == ‘\n’) {
     //putstring_nl(“EOL”);
     //Serial.print(buffer);
     buffer[bufferidx+1] = 0; // terminate it

if (buffer[bufferidx-4] != ‘’) {
       // no checksum?
       Serial.print(’
’);
       bufferidx = 0;
       return;
     }
     // get checksum
     sum = parseHex(buffer[bufferidx-3]) * 16;
     sum += parseHex(buffer[bufferidx-2]);

// check checksum
     for (i=1; i < (bufferidx-4); i++) {
       sum ^= buffer[i];
     }
     if (sum != 0) {
       //putstring_nl(“Cxsum mismatch”);
       Serial.print(’~’);
       bufferidx = 0;
       return;
     }
     // got good data!

if (strstr(buffer, “GPRMC”)) {
       // find out if we got a fix
       char *p = buffer;
       p = strchr(p, ‘,’)+1;
       p = strchr(p, ‘,’)+1;       // skip to 3rd item

if (p[0] == ‘V’) {
         digitalWrite(led1Pin, LOW);
         fix = 0;
       } else {
         digitalWrite(led1Pin, HIGH);
         fix = 1;
       }
     }
     if (LOG_RMC_FIXONLY) {
       if (!fix) {
         Serial.print(’_’);
         bufferidx = 0;
         return;
       }
     }
     // rad. lets log it!
     Serial.print(buffer);
     Serial.print(’#’);
     digitalWrite(led2Pin, HIGH);      // sets the digital pin as output

// Bill Greiman - need to write bufferidx + 1 bytes to getCR/LF
     bufferidx++;

logfile.write((uint8_t ) buffer, bufferidx);
     logfile.flush();
     /

     if( != bufferidx) {
        putstring_nl(“can’t write!”);
        error(4);
     }
     */

digitalWrite(led2Pin, LOW);

bufferidx = 0;

// turn off GPS module?
     if (TURNOFFGPS) {
       digitalWrite(powerPin, HIGH);
     }

delay(SLEEPDELAY * 1000);
     digitalWrite(powerPin, LOW);
     return;
   }
   bufferidx++;
   if (bufferidx == BUFFSIZE-1) {
      Serial.print(’!’);
      bufferidx = 0;
   }
 } else {

}

}

void sleep_sec(uint8_t x) {
 while (x–) {
    // set the WDT to wake us up!
   WDTCSR |= (1 << WDCE) | (1 << WDE); // enable watchdog & enable changing it
   WDTCSR = (1<< WDE) | (1 <<WDP2) | (1 << WDP1);
   WDTCSR |= (1<< WDIE);
   set_sleep_mode(SLEEP_MODE_PWR_DOWN);
   sleep_enable();
   sleep_mode();
   sleep_disable();
 }
}

SIGNAL(WDT_vect) {
 WDTCSR |= (1 << WDCE) | (1 << WDE);
 WDTCSR = 0;
}

/* End code */


------------------------------------------------------

And here is the compass module code

§DISCOURSE_HOISTED_CODE_1§

Modify your post, and wrap the sketches in code tags - select the sketch and then click the # button. That will stop the forum code from eating bits and setting italics on.