/*   f14.c contains these files for monopoly:  savegame()
            jailpark()  sendtojail()  rnd()  random_start()
 */

#include "mono:defines"
#include "mono:xvariables"

USHORT savegame()
{
struct FileHandle *saveptr;
struct FileLock *save_lock;
char   *Csave_buffer, *Nsave_buffer;
USHORT *USsave_buffer;
SHORT  *Ssave_buffer;
BOOL   *Bsave_buffer;
LONG   *Lsave_buffer;
int access_mode, length1, length2, length4, length35, iter;
UBYTE *file_name;

length1=1;
length2=2;
length4=4;
length35=35;

wait_LS.Screen = screen1;
wait_LS.Title = (UBYTE *)"PLEASE WAIT";
if ((waitwindow=(struct Window *)OpenWindow(&wait_LS))==NULL) cleanup();
rportwait=waitwindow->RPort;
SetRast(rportwait, yellow);


Ssave_buffer=(SHORT *)AllocMem(length2, MEMF_CHIP|MEMF_CLEAR);
if (Ssave_buffer == 0)
   {
   wait_LStext1.FrontPen=red;
   wait_LStext1.BackPen=lt_gray;
   wait_LStext1.DrawMode=JAM2;
   wait_LStext1.IText=(UBYTE *)"      SAVE ABORTED!!!";
   wait_LStext2.IText=(UBYTE *)"Could not allocate enough memory.";
   PrintIText(rportwait, &wait_LStext1, 0,0);
   Delay(200);
   CloseWindow(waitwindow);
   return(ALLOCMEM_FAILED);
   }

Bsave_buffer=(BOOL *)AllocMem(length2, MEMF_CHIP|MEMF_CLEAR);
if (Bsave_buffer == 0)
   {
   FreeMem(Ssave_buffer, length2);
   wait_LStext1.FrontPen=red;
   wait_LStext1.BackPen=lt_gray;
   wait_LStext1.DrawMode=JAM2;
   wait_LStext1.IText=(UBYTE *)"      SAVE ABORTED!!!";
   wait_LStext2.IText=(UBYTE *)"Could not allocate enough memory.";
   PrintIText(rportwait, &wait_LStext1, 0,0);
   Delay(200);
   CloseWindow(waitwindow);
   return(ALLOCMEM_FAILED);
   }
USsave_buffer=(USHORT *)AllocMem(length2, MEMF_CHIP|MEMF_CLEAR);
if (USsave_buffer == 0)
   {
   FreeMem(Ssave_buffer, length2);
   FreeMem(Bsave_buffer, length2);
   wait_LStext1.FrontPen=red;
   wait_LStext1.BackPen=lt_gray;
   wait_LStext1.DrawMode=JAM2;
   wait_LStext1.IText=(UBYTE *)"      SAVE ABORTED!!!";
   wait_LStext2.IText=(UBYTE *)"Could not allocate enough memory.";
   PrintIText(rportwait, &wait_LStext1, 0,0);
   Delay(200);
   CloseWindow(waitwindow);
   return(ALLOCMEM_FAILED);
   }

Csave_buffer=(char *)AllocMem(length1, MEMF_CHIP|MEMF_CLEAR);
if (Csave_buffer == 0)
   {
   FreeMem(Ssave_buffer, length2);
   FreeMem(Bsave_buffer, length2);
   FreeMem(USsave_buffer, length2);
   wait_LStext1.FrontPen=red;
   wait_LStext1.BackPen=lt_gray;
   wait_LStext1.DrawMode=JAM2;
   wait_LStext1.IText=(UBYTE *)"      SAVE ABORTED!!!";
   wait_LStext2.IText=(UBYTE *)"Could not allocate enough memory.";
   PrintIText(rportwait, &wait_LStext1, 0,0);
   Delay(200);
   CloseWindow(waitwindow);
   return(ALLOCMEM_FAILED);
   }
Nsave_buffer=(char *)AllocMem(length35, MEMF_CHIP|MEMF_CLEAR);
if (Nsave_buffer == 0)
   {
   FreeMem(Ssave_buffer, length2);
   FreeMem(Bsave_buffer, length2);
   FreeMem(USsave_buffer, length2);
   FreeMem(Csave_buffer, length1);
   wait_LStext1.FrontPen=red;
   wait_LStext1.BackPen=lt_gray;
   wait_LStext1.DrawMode=JAM2;
   wait_LStext1.IText=(UBYTE *)"      SAVE ABORTED!!!";
   wait_LStext2.IText=(UBYTE *)"Could not allocate enough memory.";
   PrintIText(rportwait, &wait_LStext1, 0,0);
   Delay(200);
   CloseWindow(waitwindow);
   return(ALLOCMEM_FAILED);
   }
Lsave_buffer=(LONG *)AllocMem(length4, MEMF_CHIP|MEMF_CLEAR);
if (Lsave_buffer == 0)
   {
   FreeMem(Ssave_buffer, length2);
   FreeMem(Bsave_buffer, length2);
   FreeMem(USsave_buffer, length2);
   FreeMem(Csave_buffer, length1);
   FreeMem(Nsave_buffer, length35);
   wait_LStext1.FrontPen=red;
   wait_LStext1.BackPen=lt_gray;
   wait_LStext1.DrawMode=JAM2;
   wait_LStext1.IText=(UBYTE *)"      SAVE ABORTED!!!";
   wait_LStext2.IText=(UBYTE *)"Could not allocate enough memory.";
   PrintIText(rportwait, &wait_LStext1, 0,0);
   Delay(200);
   CloseWindow(waitwindow);
   return(ALLOCMEM_FAILED);
   }

if ((file_name=file_request(SAVE_IT)) == 0)
   {
   FreeMem(Ssave_buffer, length2);
   FreeMem(Bsave_buffer, length2);
   FreeMem(USsave_buffer, length2);
   FreeMem(Csave_buffer, length1);
   FreeMem(Nsave_buffer, length35);
   FreeMem(Lsave_buffer, length4);
   wait_LStext1.FrontPen=red;
   wait_LStext1.BackPen=lt_gray;
   wait_LStext1.DrawMode=JAM2;
   wait_LStext1.IText=(UBYTE *)"      SAVE ABORTED!!!";
   wait_LStext2.IText=(UBYTE *)"     Invalid file name.";
   PrintIText(rportwait, &wait_LStext1, 0,0);
   Delay(200);
   CloseWindow(waitwindow);
   return(NO_FILE_TO_SAVE);
   }
wait_LStext1.IText=(UBYTE *)"Now Saving File...";
wait_LStext2.IText=file_name;
PrintIText(rportwait, &wait_LStext1, 0,0);

access_mode=MODE_NEWFILE; 

if ((save_lock=Lock(file_name, ACCESS_WRITE))!=0)
   {
   struct IntuiText save_prompt, save_prompt1, yes_save_prompt, no_save_prompt;
   save_prompt.FrontPen=red;
   save_prompt.BackPen=black;
   save_prompt.DrawMode=JAM1;
   save_prompt.LeftEdge=50;
   save_prompt.TopEdge=5;
   save_prompt.ITextFont=&TextFont;
   save_prompt.IText=(UBYTE *)"FILE ALREADY EXISTS!";
   save_prompt.NextText=&save_prompt1;
   CMes(&save_prompt1, 5, 15, "O.K. to over write old data?", orange, 1);
   CMes(&yes_save_prompt, 6, 4, "YES", red, 1);
   CMes(&no_save_prompt, 6, 4, "NO", green, 1);
   if (!(AutoRequest(boardwindow, &save_prompt, &yes_save_prompt, 
               &no_save_prompt, NULL, NULL, 250, 60)))
      {
      UnLock(save_lock);
      FreeMem(Ssave_buffer, length2);
      FreeMem(Bsave_buffer, length2);
      FreeMem(USsave_buffer, length2);
      FreeMem(Csave_buffer, length1);
      FreeMem(Nsave_buffer, length35);
      FreeMem(Lsave_buffer, length4);
      SetRast(rportwait, yellow);
      wait_LStext1.FrontPen=red;
      wait_LStext1.BackPen=lt_gray;
      wait_LStext1.DrawMode=JAM2;
      wait_LStext1.IText=(UBYTE *)"DID NOT SAVE File...";
      PrintIText(rportwait, &wait_LStext1, 0,0);
      Delay(200);
      CloseWindow(waitwindow);
      return(DONT_OVERWRITE);
      }
   access_mode=MODE_OLDFILE; 
   }

if ((saveptr=Open(file_name, access_mode))==0)
   {
   UnLock(save_lock);
   FreeMem(Ssave_buffer, length2);
   FreeMem(Bsave_buffer, length2);
   FreeMem(USsave_buffer, length2);
   FreeMem(Csave_buffer, length1);
   FreeMem(Nsave_buffer, length35);
   FreeMem(Lsave_buffer, length4);
   SetRast(rportwait, yellow);
   wait_LStext1.FrontPen=red;
   wait_LStext1.BackPen=lt_gray;
   wait_LStext1.DrawMode=JAM2;
   wait_LStext1.IText=(UBYTE *)"DID NOT SAVE File...";
   PrintIText(rportwait, &wait_LStext1, 0,0);
   Delay(200);
   CloseWindow(waitwindow);
   return(CANT_LOCK_SAVE_FILE);
   }
else
   {
 
               /*   MONO   */
   Csave_buffer[0]=0x4d;
   Write(saveptr, Csave_buffer, length1);
   Csave_buffer[0]=0x4f;
   Write(saveptr, Csave_buffer, length1);
   Csave_buffer[0]=0x4e;
   Write(saveptr, Csave_buffer, length1);
   Csave_buffer[0]=0x4f;
   Write(saveptr, Csave_buffer, length1);
               /*   SAVE   */
   Csave_buffer[0]=0x53;
   Write(saveptr, Csave_buffer, length1);
   Csave_buffer[0]=0x41;
   Write(saveptr, Csave_buffer, length1);
   Csave_buffer[0]=0x56;
   Write(saveptr, Csave_buffer, length1);
   Csave_buffer[0]=0x45;
   Write(saveptr, Csave_buffer, length1);
   FreeMem(Csave_buffer, length1);


               /*   DATA   */    
   Ssave_buffer[0]=REDX;
   Write(saveptr, Ssave_buffer, length2); 
   Ssave_buffer[0]=REDY;
   Write(saveptr, Ssave_buffer, length2); 
   Ssave_buffer[0]=GREENX;
   Write(saveptr, Ssave_buffer, length2); 
   Ssave_buffer[0]=GREENY;
   Write(saveptr, Ssave_buffer, length2); 
   Ssave_buffer[0]=BLUEX;
   Write(saveptr, Ssave_buffer, length2); 
   Ssave_buffer[0]=BLUEY;
   Write(saveptr, Ssave_buffer, length2); 
   Ssave_buffer[0]=YELLOWX;
   Write(saveptr, Ssave_buffer, length2); 
   Ssave_buffer[0]=YELLOWY;
   Write(saveptr, Ssave_buffer, length2);
   FreeMem(Ssave_buffer, length2); 

   Bsave_buffer[0]=done;
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=doublerr;
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=doubleutil;
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=jaildoubled;
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=trieddoubles;
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=trydoublethrice;
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=doublesrolled;
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=isinjail[0];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=isinjail[1];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=isinjail[2];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=isinjail[3];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=notplaying[0];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=notplaying[1];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=notplaying[2];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=notplaying[3];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[0];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[1];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[2];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[3];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[4];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[5];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[6];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[7];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[8];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[9];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[10];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[11];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[12];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[13];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[14];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[15];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[16];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[17];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[18];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[19];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[20];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[21];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[22];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[23];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[24];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[25];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[26];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[27];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[28];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[29];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[30];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[31];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[32];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[33];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[34];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[35];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[36];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[37];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[38];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismono[39];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[0];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[1];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[2];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[3];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[4];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[5];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[6];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[7];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[8];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[9];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[10];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[11];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[12];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[13];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[14];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[15];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[16];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[17];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[18];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[19];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[20];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[21];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[22];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[23];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[24];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[25];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[26];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[27];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[28];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[29];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[30];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[31];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[32];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[33];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[34];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[35];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[36];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[37];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[38];
   Write(saveptr, Bsave_buffer, length2);
   Bsave_buffer[0]=ismorg[39];
   Write(saveptr, Bsave_buffer, length2);
   FreeMem(Bsave_buffer, length2);

   USsave_buffer[0]=nhp;
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=ncp;
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=ntp;
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=nsp;
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=nowrolling;
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numdoubles;
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=typeplayer0;
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=typeplayer1;
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=typeplayer2;
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=typeplayer3;
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=playerat[0];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=playerat[1];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=playerat[2];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=playerat[3];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=freecard[0];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=freecard[1];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=freecard[2];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=freecard[3];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numutil[0];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numutil[1];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numutil[2];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numutil[3];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numrr[0];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numrr[1];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numrr[2];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numrr[3];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=jaildouble[0];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=jaildouble[1];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=jaildouble[2];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=jaildouble[3];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[0];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[1];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[2];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[3];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[4];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[5];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[6];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[7];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[8];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[9];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[10];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[11];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[12];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[13];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[14];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[15];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[16];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[17];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[18];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[19];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[20];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[21];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[22];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[23];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[24];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[25];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[26];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[27];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[28];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[29];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[30];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[31];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[32];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[33];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[34];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[35];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[36];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[37];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[38];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=owner[39];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[0];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[1];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[2];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[3];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[4];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[5];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[6];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[7];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[8];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[9];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[10];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[11];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[12];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[13];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[14];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[15];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[16];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[17];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[18];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[19];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[20];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[21];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[22];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[23];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[24];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[25];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[26];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[27];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[28];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[29];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[30];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[31];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[32];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[33];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[34];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[35];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[36];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[37];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[38];
   Write(saveptr, USsave_buffer, length2);
   USsave_buffer[0]=numhouses[39];
   Write(saveptr, USsave_buffer, length2);
   FreeMem(USsave_buffer, length2);

   for (iter=0; iter<35; iter++)   Nsave_buffer[iter]=name0[iter];
   Write(saveptr, Nsave_buffer, length35);
   for (iter=0; iter<35; iter++)   Nsave_buffer[iter]=name1[iter];
   Write(saveptr, Nsave_buffer, length35);
   for (iter=0; iter<35; iter++)   Nsave_buffer[iter]=name2[iter];
   Write(saveptr, Nsave_buffer, length35);
   for (iter=0; iter<35; iter++)   Nsave_buffer[iter]=name3[iter];
   Write(saveptr, Nsave_buffer, length35);
   FreeMem(Nsave_buffer, length35);

   Lsave_buffer[0]=bankroll[0];
   Write(saveptr, Lsave_buffer, length4);
   Lsave_buffer[0]=bankroll[1];
   Write(saveptr, Lsave_buffer, length4);
   Lsave_buffer[0]=bankroll[2];
   Write(saveptr, Lsave_buffer, length4);
   Lsave_buffer[0]=bankroll[3];
   Write(saveptr, Lsave_buffer, length4);
   Lsave_buffer[0]=bankroll[4];
   Write(saveptr, Lsave_buffer, length4);
   Lsave_buffer[0]=bankroll[5];
   Write(saveptr, Lsave_buffer, length4);
   FreeMem(Lsave_buffer, length4);
   Close(saveptr);
   UnLock(save_lock);
   SetRast(rportwait, yellow);
   wait_LStext1.FrontPen=green;
   wait_LStext2.FrontPen=green;
   wait_LStext1.BackPen=lt_gray;
   wait_LStext2.BackPen=lt_gray;
   wait_LStext1.DrawMode=JAM2;
   wait_LStext2.DrawMode=JAM2;
   wait_LStext1.IText=file_name;
   wait_LStext2.IText=(UBYTE *)"Sucessfully Saved!";
   PrintIText(rportwait, &wait_LStext1, 0,0);
   Delay(200);
   CloseWindow(waitwindow);
   return(GAME_SAVED);
   }
}



VOID jailpark()
{
if (nowrolling == 0)
   {
   REDX=38;
   REDY=174;
   }
if (nowrolling == 1)
   {
   GREENX=50;
   GREENY=174;
   }
if (nowrolling == 2)
   {
   BLUEX=38;
   BLUEY=183;
   }
if (nowrolling == 3)
   {
   YELLOWX=50;
   YELLOWY=183;
   }
WaitTOF();
DrawGels();
}

VOID sendtojail()
{
switch (playerat[nowrolling])
   {
   case 2:  
      {
      for (i=224, j=179; i>41; i-=7)
         {
         if (nowrolling == 0)
            {
            REDX=i;
            REDY=j;
            }
         if (nowrolling == 1)
            {
            GREENX=i;
            GREENY=j;
            }  
         if (nowrolling == 2)
            {
            BLUEX=i;
            BLUEY=j;
            }
         if (nowrolling == 3)
            {
            YELLOWX=i;
            YELLOWY=j;
            }
         WaitTOF();
         DrawGels();
         }
      jailpark();
      break;
      }
   case 7:  
      {
      for (i=108, j=179; i>41; i-=4)
         {
         if (nowrolling == 0)
            {
            REDX=i;
            REDY=j;
            }
         if (nowrolling == 1)
            {
            GREENX=i;
            GREENY=j;
            }  
         if (nowrolling == 2)
            {
            BLUEX=i;
            BLUEY=j;
            }
         if (nowrolling == 3)
            {
            YELLOWX=i;
            YELLOWY=j;
            }
         WaitTOF();
         DrawGels();
         }
      jailpark();
      break;
      }
   case 17:
      {
      for (i=42, j=62; j<180; j+=5)
         {
         if (nowrolling == 0)
            {
            REDX=i;
            REDY=j;
            }
         if (nowrolling == 1)
            {
            GREENX=i;
            GREENY=j;
            }  
         if (nowrolling == 2)
            {
            BLUEX=i;
            BLUEY=j;
            }
         if (nowrolling == 3)
            {
            YELLOWX=i;
            YELLOWY=j;
            }
         WaitTOF();
         DrawGels();
         }
      jailpark();
      break;
      }

   case 22:
      {  
      for (i=0; i<16; i++)
         {
         if (nowrolling == 0)
            {
        REDX=jailvectorlocation22[i][0];
        REDY=jailvectorlocation22[i][1];
            }
         if (nowrolling == 1)
            {
            GREENX=jailvectorlocation22[i][0];
            GREENY=jailvectorlocation22[i][1];
            }
         if (nowrolling == 2)
            {
            BLUEX=jailvectorlocation22[i][0];
        BLUEY=jailvectorlocation22[i][1];
            }
         if (nowrolling == 3)
            {
        YELLOWX=jailvectorlocation22[i][0];
        YELLOWY=jailvectorlocation22[i][1];
            }
         WaitTOF();
         DrawGels();
         }
      jailpark();
      break;
      }
   case 30:
      {
      for (i=0; i<34; i++)
         {
     if (nowrolling == 0)
            {
        REDX=jailvectorlocation30[i][0];
        REDY=jailvectorlocation30[i][1];
            }
         if (nowrolling == 1)
            {
        GREENX=jailvectorlocation30[i][0];
        GREENY=jailvectorlocation30[i][1];
            }
            if (nowrolling == 2)
            {
        BLUEX=jailvectorlocation30[i][0];
        BLUEY=jailvectorlocation30[i][1];
            }
         if (nowrolling == 3)
            {
        YELLOWX=jailvectorlocation30[i][0];
        YELLOWY=jailvectorlocation30[i][1];
            }
         WaitTOF();
         DrawGels();
         }
      jailpark();
      break;
      }
   case 33:
      {   
      for (i=0; i<31; i++)
         {
         if (nowrolling == 0)
            {
        REDX=jailvectorlocation33[i][0];
        REDY=jailvectorlocation33[i][1];
            }
         if (nowrolling == 1)
            {
        GREENX=jailvectorlocation33[i][0];
        GREENY=jailvectorlocation33[i][1];
            }
            if (nowrolling == 2)
            {
        BLUEX=jailvectorlocation33[i][0];
        BLUEY=jailvectorlocation33[i][1];
            }
         if (nowrolling == 3)
            {
        YELLOWX=jailvectorlocation33[i][0];
        YELLOWY=jailvectorlocation33[i][1];
            }
         WaitTOF();
         DrawGels();
         }
      jailpark();
      break;
      }
   case 36:
      { 
      for (i=0; i<22; i++)
         {
         if (nowrolling == 0)
            {
        REDX=jailvectorlocation36[i][0];
        REDY=jailvectorlocation36[i][1];
            }
         if (nowrolling == 1)
            {
        GREENX=jailvectorlocation36[i][0];
        GREENY=jailvectorlocation36[i][1];
            }
         if (nowrolling == 2)
            {
        BLUEX=jailvectorlocation36[i][0];
        BLUEY=jailvectorlocation36[i][1];
            }
         if (nowrolling == 3)
            {
        YELLOWX=jailvectorlocation36[i][0];
        YELLOWY=jailvectorlocation36[i][1];
            }
         WaitTOF();
         DrawGels();
         }
      jailpark();
      break;
      }

   default:
      {
      for (i=0; i<36; i++)
         {
         if (nowrolling == 0)
            {
        REDX=jailvectorlocation30[i][0];
        REDY=jailvectorlocation30[i][1];
            }
         if (nowrolling == 1)
            {
        GREENX=jailvectorlocation30[i][0];
        GREENY=jailvectorlocation30[i][1];
            }
         if (nowrolling == 2)
            {
        BLUEX=jailvectorlocation30[i][0];
        BLUEY=jailvectorlocation30[i][1];
            }
         if (nowrolling == 3)
            {
        YELLOWX=jailvectorlocation30[i][0];
        YELLOWY=jailvectorlocation30[i][1];
            }
         WaitTOF();
         DrawGels();
         }
      jailpark();
      break;
      }
   }
playerat[nowrolling]=99;
isinjail[nowrolling]=TRUE;
}

int rnd(min, max)   /*   min and max are INCLUSIVE   */
int min, max;
{
int rnum, low, high;

if (min > max)
   {
   low=max;
   high=min;
   }
else
   {
   low=min;
   high=max;
   }

getrnum:  rnum=rand();
if (rnum < (high-low+1) )  goto getrnum;

return((rnum%(high-low+1))+low);
}

int random_start()
{
int i, first, second, third, fourth;
UBYTE hold0[35], hold1[35], hold2[35], hold3[35];

if (nsp == 2)
   {
   if (rnd(1,2) == 1)  return(0);
   else
      {
      for (i=0; i<35; i++)
         {
         hold0[i]=name0[i];
         hold1[i]=name1[i];
     }
      for (i=0; i<35; i++)
         {
     name0[i]=hold1[i];
     name1[i]=hold0[i];
     }
      }
   return(0);
   }     
if (nsp == 3)
   {
   first=rnd(1,3);     
   retwo: second=rnd(1,3);
   if (first == second)  goto retwo;     
   rethree:  third=rnd(1,3);
   if ( (first == third) || (second == third) )  goto rethree;
   if ( (first > second) && (second > third) )   return(0);
   for (i=0; i<35; i++)
      {
      hold0[i]=name0[i];
      hold1[i]=name1[i];
      hold2[i]=name2[i];
      }
   /*  if (first == 1)  leave it be   */
   if (first == 2)
      {
      for (i=0; i<35; i++) name0[i]=hold1[i];
      }
   if (first == 3)
      {
      for (i=0; i<35; i++) name0[i]=hold2[i];
      }
   if (second == 1)
      {
      for (i=0; i<35; i++) name1[i]=hold0[i];
      }
   if (second == 3)
      {
      for (i=0; i<35; i++) name1[i]=hold2[i];
      }
   if (third == 1)
      {
      for (i=0; i<35; i++) name2[i]=hold0[i];
      }
   if (third == 2)
      {
      for (i=0; i<35; i++) name2[i]=hold1[i];
      }
   return(0);
   }

if (nsp == 4)
   {
   first=rnd(1,4);     
   retwo4: second=rnd(1,4);
   if (first == second)  goto retwo4;     
   rethree4:  third=rnd(1,4);
   if ( (first == third) || (second == third) )  goto rethree4;
   refour4:  fourth=rnd(1,4); 
   if ( (first == fourth) || (second == fourth) || (third == fourth) )
      goto refour4;
   if ( (first > second) && (second > third) && (third > fourth) )  return(0);
   for (i=0; i<35; i++)
      {
      hold0[i]=name0[i];
      hold1[i]=name1[i];
      hold2[i]=name2[i];
      hold3[i]=name3[i];
      }
   /*  if (first == 1)  leave it be   */
   if (first == 2)
      {
      for (i=0; i<35; i++) name0[i]=hold1[i];
      }
   if (first == 3)
      {
      for (i=0; i<35; i++) name0[i]=hold2[i];
      }
   if (first == 4)
      {
      for (i=0; i<35; i++) name0[i]=hold3[i];
      }
   if (second == 1)
      {
      for (i=0; i<35; i++) name1[i]=hold0[i];
      }
   if (second == 3)
      {
      for (i=0; i<35; i++) name1[i]=hold2[i];
      }
   if (second == 4)
      {
      for (i=0; i<35; i++) name1[i]=hold3[i];
      }
   if (third == 1)
      {
      for (i=0; i<35; i++) name2[i]=hold0[i];
      }
   if (third == 2)
      {
      for (i=0; i<35; i++) name2[i]=hold1[i];
      }
   if (third == 4)
      {
      for (i=0; i<35; i++) name2[i]=hold3[i];
      }
   if (fourth == 1)
      {
      for (i=0; i<35; i++) name3[i]=hold0[i];
      }
   if (fourth == 2)
      {
      for (i=0; i<35; i++) name3[i]=hold1[i];
      }
   if (fourth == 3)
      {
      for (i=0; i<35; i++) name3[i]=hold3[i];
      }
   }
}
