
/** market.c **********************************/
/*                                            */
/* Copyright © 1988 by Digital Artists (DgA). */
/* All Rights reserved.                       */
/*                                            */
/**********************************************/

/*
Firma   : Digital Artist (DgA)
Objekt  : reederei/market.c
Version : 1.0
Autor   : [RK]
Datum   : 09-14-1988
Status  : geheim
*/

#include <exec/types.h>
#include <intuition/intuition.h>
#include <graphics/text.h>
#include "reederei.h"

extern struct Window *Window;
extern struct TextAttr font[2];
extern struct Spieler Spieler[4];
extern struct Quartal Quartal[8];
extern USHORT *box1;
extern USHORT *box2;

UBYTE Preis[24][6];
UBYTE Besitz[6][10];
UBYTE Geld[15];
UBYTE quart[4][5];

USHORT mpts[2][18] =
 {
  {0,0,599,0,599,179,1,179,1,0,598,0,598,179,0,179,0,0},
  {0,0,599,0,599,14,1,14,1,0,598,0,598,14,0,14,0,0},
 };

struct IntuiText mggtxt[16] =
 {
  {4,0,JAM2,0,0,&font[0],&Besitz[0][0],NULL},
  {4,0,JAM2,0,0,&font[0],&Besitz[1][0],NULL},
  {4,0,JAM2,0,0,&font[0],&Besitz[2][0],NULL},
  {4,0,JAM2,0,0,&font[0],&Besitz[3][0],NULL},
  {4,0,JAM2,0,0,&font[0],&Besitz[4][0],NULL},
  {4,0,JAM2,0,0,&font[0],&Besitz[5][0],NULL},
  {1,13,JAM2,6,2,&font[0],"Weizen",NULL},
  {1,13,JAM2,8,2,&font[0],"Kaffee",NULL},
  {1,13,JAM2,9,2,&font[0],"Kakao",NULL},
  {1,13,JAM2,14,2,&font[0],"Erdöl",NULL},
  {1,13,JAM2,21,2,&font[0],"Tee",NULL},
  {1,13,JAM2,16,2,&font[0],"Reis",NULL},
  {1,13,JAM2,17,2,&font[0],"Zurück",NULL},
  {1,13,JAM2,15,2,&font[0],"Kaufen",NULL},
  {1,13,JAM2,3,2,&font[0],"Verkaufen",NULL},
  {1,0,JAM2,0,0,&font[0],&Geld[0],NULL}
 };

struct Image mggim[2] =
 {
  {-2,-1,80,15,4,NULL,0xf,0x0,NULL},
  {-2,-1,96,15,4,NULL,0xf,0x0,NULL}
 };

struct Gadget mgg[16] =
 {
  {&mgg[1],520,40,0,0,GADGHNONE,NULL,BOOLGADGET|REQGADGET,NULL,NULL,&mggtxt[0],0L,NULL,0,NULL},
  {&mgg[2],520,57,0,0,GADGHNONE,NULL,BOOLGADGET|REQGADGET,NULL,NULL,&mggtxt[1],0L,NULL,0,NULL},
  {&mgg[3],520,74,0,0,GADGHNONE,NULL,BOOLGADGET|REQGADGET,NULL,NULL,&mggtxt[2],0L,NULL,0,NULL},
  {&mgg[4],520,91,0,0,GADGHNONE,NULL,BOOLGADGET|REQGADGET,NULL,NULL,&mggtxt[3],0L,NULL,0,NULL},
  {&mgg[5],520,108,0,0,GADGHNONE,NULL,BOOLGADGET|REQGADGET,NULL,NULL,&mggtxt[4],0L,NULL,0,NULL},
  {&mgg[6],520,125,0,0,GADGHNONE,NULL,BOOLGADGET|REQGADGET,NULL,NULL,&mggtxt[5],0L,NULL,0,NULL},
  {&mgg[7],15,38,76,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&mggim[0],NULL,&mggtxt[6],0L,NULL,1,NULL},
  {&mgg[8],15,55,76,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&mggim[0],NULL,&mggtxt[7],0L,NULL,2,NULL},
  {&mgg[9],15,72,76,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&mggim[0],NULL,&mggtxt[8],0L,NULL,3,NULL},
  {&mgg[10],15,89,76,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&mggim[0],NULL,&mggtxt[9],0L,NULL,4,NULL},
  {&mgg[11],15,106,76,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&mggim[0],NULL,&mggtxt[10],0L,NULL,5,NULL},
  {&mgg[12],15,123,76,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&mggim[0],NULL,&mggtxt[11],0L,NULL,6,NULL},
  {&mgg[13],15,160,92,13,GADGIMAGE|GADGHCOMP,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&mggim[1],NULL,&mggtxt[12],0L,NULL,7,NULL},
  {&mgg[14],360,160,92,13,GADGIMAGE|GADGHCOMP,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&mggim[1],NULL,&mggtxt[13],0L,NULL,8,NULL},
  {&mgg[15],480,160,92,13,GADGIMAGE|GADGHCOMP,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&mggim[1],NULL,&mggtxt[14],0L,NULL,9,NULL},
  {NULL,460,140,0,0,GADGHNONE,NULL,BOOLGADGET|REQGADGET,NULL,NULL,&mggtxt[15],0L,NULL,0,NULL}
 };

struct Border mbo[2] =
 {
  {0,0,13,0,JAM2,9,&mpts[1][0],&mbo[1]},
  {0,0,13,0,JAM2,9,&mpts[0][0],NULL}
 };

struct IntuiText mtxt[34] =
 {
  {1,0,JAM2,490,3,&font[0],"Gütermarkt",&mtxt[1]},
  {1,0,JAM2,10,3,&font[0],"Reeder",&mtxt[2]},
  {1,0,JAM2,85,3,&font[0],NULL,&mtxt[3]},
  {12,0,JAM2,23,20,&font[0],"Ware",&mtxt[4]},
  {12,0,JAM2,500,20,&font[0],"Tonnen",&mtxt[5]},

  {12,0,JAM2,130,20,&font[0],&quart[0][0],&mtxt[6]},
  {12,0,JAM2,220,20,&font[0],&quart[1][0],&mtxt[7]},
  {12,0,JAM2,310,20,&font[0],&quart[2][0],&mtxt[8]},
  {12,0,JAM2,400,20,&font[0],&quart[3][0],&mtxt[9]},

  {12,0,JAM2,132,40,&font[0],&Preis[0][0],&mtxt[10]},
  {12,0,JAM2,222,40,&font[0],&Preis[1][0],&mtxt[11]},
  {12,0,JAM2,312,40,&font[0],&Preis[2][0],&mtxt[12]},
  {11,0,JAM2,402,40,&font[0],&Preis[3][0],&mtxt[13]},

  {12,0,JAM2,132,57,&font[0],&Preis[4][0],&mtxt[14]},
  {12,0,JAM2,222,57,&font[0],&Preis[5][0],&mtxt[15]},
  {12,0,JAM2,312,57,&font[0],&Preis[6][0],&mtxt[16]},
  {11,0,JAM2,402,57,&font[0],&Preis[7][0],&mtxt[17]},

  {12,0,JAM2,132,74,&font[0],&Preis[8][0],&mtxt[18]},
  {12,0,JAM2,222,74,&font[0],&Preis[9][0],&mtxt[19]},
  {12,0,JAM2,312,74,&font[0],&Preis[10][0],&mtxt[20]},
  {11,0,JAM2,402,74,&font[0],&Preis[11][0],&mtxt[21]},

  {12,0,JAM2,132,91,&font[0],&Preis[12][0],&mtxt[22]},
  {12,0,JAM2,222,91,&font[0],&Preis[13][0],&mtxt[23]},
  {12,0,JAM2,312,91,&font[0],&Preis[14][0],&mtxt[24]},
  {11,0,JAM2,402,91,&font[0],&Preis[15][0],&mtxt[25]},

  {12,0,JAM2,132,108,&font[0],&Preis[16][0],&mtxt[26]},
  {12,0,JAM2,222,108,&font[0],&Preis[17][0],&mtxt[27]},
  {12,0,JAM2,312,108,&font[0],&Preis[18][0],&mtxt[28]},
  {11,0,JAM2,402,108,&font[0],&Preis[19][0],&mtxt[29]},

  {12,0,JAM2,132,125,&font[0],&Preis[20][0],&mtxt[30]},
  {12,0,JAM2,222,125,&font[0],&Preis[21][0],&mtxt[31]},
  {12,0,JAM2,312,125,&font[0],&Preis[22][0],&mtxt[32]},
  {11,0,JAM2,402,125,&font[0],&Preis[23][0],&mtxt[33]},

  {1,0,JAM2,360,140,&font[0],"Kapital :",NULL}
 };

struct Requester market =
 {NULL,20,5,600,180,0,0,&mgg[0],&mbo[0],&mtxt[0],0,0,NULL,NULL,NULL,NULL,NULL};

Market(pl)
int pl;
 {
  struct IntuiMessage *mmsg;
  BOOL choosen = FALSE;
  int i = 0;
  int x,y,id;
  struct Gadget *gg;

  mggim[0].ImageData = box1;
  mggim[1].ImageData = box2;

  mtxt[2].IText = Spieler[pl].Name;

  for(x=4;x<8;x++)
   sprintf(&quart[x-4][0],"%1d/%2d",(USHORT)Quartal[x].Quartal/100,Quartal[x].Quartal-((USHORT)Quartal[x].Quartal/100)*100);

  for(x=0;x<6;x++)
   {
    for(y=4;y<8;y++)
     {
      if(Quartal[y].WarenWMPreis[x] != 0)
       sprintf(&Preis[(x*4)+y-4][0],"%d",Quartal[y].WarenWMPreis[x]);
      else
       strcpy(&Preis[(x*4)+y-4][0]," --");
     }
    mggtxt[6+x].FrontPen = 1;
   }

  RefreshText(pl);
  Request(&market,Window);

  while (!(choosen))
   {
    while((mmsg=(struct IntuiMessage *)GetMsg(Window->UserPort))==NULL);
    ReplyMsg(mmsg);
    if (mmsg->Class == GADGETDOWN)
     {
      gg = (struct Gadget *) mmsg->IAddress;
      id = gg->GadgetID;
      if ((id >= 1) && (id <= 6))
       {
        if (i != 0)
         mggtxt[5+i].FrontPen = 1;
        mggtxt[5+id].FrontPen = 0;
        i = id;
        if (Spieler[pl].Geld == 0)
         OffGadget(&mgg[13],Window,&market);
        else
         OnGadget(&mgg[13],Window,&market);
        RefreshGadgets(&mgg[11],Window,&market);
       }
      if (id == 7)
       {
        i = 0;
        choosen = TRUE;
       }
      if ((id == 8) && (i != 0))
       {
        y = (int)((float)Spieler[pl].Geld/((float)Quartal[7].WarenWMPreis[i-1]/1000));
        x = GetValue(0,y);
        if(x * Quartal[7].WarenWMPreis[i-1]/1000 <= Spieler[pl].Geld)
         {
          Spieler[pl].WarenBesitz[i-1] += x;
          Spieler[pl].Geld -= (LONG)(x * Quartal[7].WarenWMPreis[i-1] / 1000);
          if (x == y)
           Spieler[pl].Geld = 0;
          RefreshText(pl);
          RefreshGadgets(&mgg[5],Window,&market);
         }
       }
      if ((id == 9) && (i != 0))
       {
        x = GetValue(0,Spieler[pl].WarenBesitz[i-1]);
        if(x <= Spieler[pl].WarenBesitz[i-1])
         {
          Spieler[pl].WarenBesitz[i-1] -= x;
          Spieler[pl].Geld += (LONG)(x * Quartal[7].WarenWMPreis[i-1] / 1000);
          RefreshText(pl);
          if (Spieler[pl].Geld == 0)
           OffGadget(&mgg[13],Window,&market);
          else
           OnGadget(&mgg[13],Window,&market);
          RefreshGadgets(&mgg[5],Window,&market);
         }
       }
     }
   }

  EndRequest(&market,Window);

  return;
 }

RefreshText(pl)
int pl;
 {
  int x;

  for(x=0;x<6;x++)
   {
    if (Spieler[pl].WarenBesitz[x] != 0)
     {
      sprintf(&Besitz[x][0],"%d",Spieler[pl].WarenBesitz[x]);
      strncat(&Besitz[x][0],"       ",6-strlen(&Besitz[x][0]));
     }
    else
     strcpy(&Besitz[x][0]," --    ");
   }
  sprintf(&Geld[0],"%-4.1f Mio. ",(float)Spieler[pl].Geld/1000);
  strncat(&Geld[0],"              ",14-strlen(&Geld[0]));
 }
