#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <exec/types.h>
#include <exec/tasks.h>
#include <exec/memory.h>
#include <exec/execbase.h>
#include <intuition/intuitionbase.h>
#include <devices/trackdisk.h>
#include <devices/timer.h>
#include <libraries/dosextens.h>
#include <proto/all.h>
#include <pragma/all.h>
#include <string.h>
#include <dos.h>
#include "PopInfo.i"

#define DF0 1
#define DF1 2
#define DF2 3
#define DF3 4
#define BLK 5
#define SAVE 6
#define LOAD 7
#define WIPE 8
#define EXIT 9

/* Image-Ed Image generation */

/* Start of Image data */
USHORT popgad1ImageData[]={
   /* Plane 0 */
   0x0000, 0x0000, 0x3fff, 0xfff0, 0x3dfb, 0xdff0, 
   0x3dd7, 0x5df0, 0x3dd7, 0x5df0, 0x3df7, 0x5ff0, 
   0x3df7, 0x5ff0, 0x3df7, 0x5ff0, 0x3dfb, 0xdff0, 
   0x3fff, 0xfff0, 0x3fff, 0xfff0, 0x2fba, 0xfdf0, 
   0x3bba, 0xfbb0, 0x3baa, 0xfbb0, 0x3baa, 0xfbb0, 
   0x3baa, 0xfbb0, 0x3bb6, 0xfbb0, 0x2fba, 0xfdf0, 
   0x3fff, 0xfff0, 0x0000, 0x0000, 
   /* Plane 1 */
   0xffff, 0xfffc, 0xffff, 0xfffc, 0xfe1c, 0x61fc, 
   0xfeeb, 0xaefc, 0xfeeb, 0xaefc, 0xfe1b, 0xa1fc, 
   0xfefb, 0xaffc, 0xfefb, 0xaffc, 0xfefc, 0x6ffc, 
   0xffff, 0xfffc, 0xffff, 0xfffc, 0xf05d, 0x063c, 
   0xfdcd, 0x7ddc, 0xfdd5, 0x7ddc, 0xfdd5, 0x0ddc, 
   0xfdd5, 0x7ddc, 0xfdd9, 0x7ddc, 0xf05d, 0x7e3c, 
   0xffff, 0xfffc, 0xffff, 0xfffc
};
/* End of Image data */

struct Image popgad1Image={
	0,0,	 /* LeftEdge, TopEdge */
	30,20,2,	 /* Width, Height, Depth */
	&popgad1ImageData[0],	 /* ImageData */
	0x3,0x0,	 /* PlanePick, PlaneOnOff */
	NULL	 /* NextImage */
};

/* Start of Image data */
USHORT popgad2ImageData[]={
   /* Plane 0 */
   0x0000, 0x0000, 0x3fff, 0xfff0, 0x3ff3, 0xfff0, 
   0x3fe7, 0xfff0, 0x3fcf, 0xfff0, 0x3fcf, 0xfff0, 
   0x3fcf, 0xfff0, 0x3fcf, 0xfff0, 0x3fcf, 0xfff0, 
   0x3fe7, 0xfff0, 0x3fe7, 0xfff0, 0x3fe7, 0xfff0, 
   0x3ff3, 0xfff0, 0x3ff3, 0xfff0, 0x3fff, 0xfff0, 
   0x3ff3, 0xfff0, 0x3ff3, 0xfff0, 0x3ff3, 0xfff0, 
   0x3fff, 0xfff0, 0x0000, 0x0000, 
   /* Plane 1 */
   0xffff, 0xfffc, 0xffff, 0xfffc, 0xfffc, 0x7ffc, 
   0xfff8, 0x3ffc, 0xfff0, 0x1ffc, 0xfff0, 0x1ffc, 
   0xfff0, 0x1ffc, 0xfff0, 0x1ffc, 0xfff0, 0x1ffc, 
   0xfff8, 0x3ffc, 0xfff8, 0x3ffc, 0xfff8, 0x3ffc, 
   0xfffc, 0x7ffc, 0xfffc, 0x7ffc, 0xffff, 0xfffc, 
   0xfffc, 0x7ffc, 0xfffc, 0x7ffc, 0xfffc, 0x7ffc, 
   0xffff, 0xfffc, 0xffff, 0xfffc
};
/* End of Image data */

struct Image popgad2Image={
	0,0,	 /* LeftEdge, TopEdge */
	30,20,2,	 /* Width, Height, Depth */
	&popgad2ImageData[0],	 /* ImageData */
	0x3,0x0,	 /* PlanePick, PlaneOnOff */
	NULL	 /* NextImage */
};

struct Gadget popgad={
	NULL,0,10,30,20,GADGHIMAGE|GADGIMAGE,RELVERIFY,BOOLGADGET,
	(APTR)&popgad1Image,(APTR)&popgad2Image,NULL,NULL,NULL,NULL,NULL};

/* End of Image-Ed Image generation */

USHORT popstay1[]={
	0xFFFF,0x8E63,0xB5AD,0xB5AD,0x8DA3,0xBDAF,0xBDAF,0xBE6F,0xFFFF};
USHORT popstay2[]={
	0xFFFF,0xC895,0xB565,0xBD65,0xCD0B,0xF56B,0xB56B,0xCD6B,0xFFFF};

struct Image pim1={
	0,0,16,9,1,&popstay1[0],0x1,0x0,NULL};
struct Image pim2={
	0,0,16,9,1,&popstay2[0],0x1,0x0,NULL};
struct Gadget popstaygad={
	NULL,0,-8,16,9,GADGHIMAGE|GADGIMAGE|GRELBOTTOM,RELVERIFY|TOGGLESELECT,
	BOOLGADGET,(APTR)&pim1,(APTR)&pim2,NULL,NULL,NULL,NULL,NULL};

short xyborder[]={
	-1,-1,50,-1,50,11,-1,11,-1,-1};
struct Border Border={
	0,0,2,0,JAM1,5,xyborder,NULL};
struct IntuiText exittext={
	3,0,JAM1,10,2,NULL,"EXIT",NULL};
struct IntuiText wipetext={
	3,0,JAM1,10,2,NULL,"WIPE",NULL};
struct IntuiText loadtext={
	3,0,JAM1,10,2,NULL,"LOAD",NULL};
struct IntuiText savetext={
	3,0,JAM1,10,2,NULL,"SAVE",NULL};
struct IntuiText blktext={
	3,0,JAM2,10,2,NULL,"BLK1",NULL};
struct IntuiText df3text={
	3,0,JAM1,10,2,NULL,"DF3:",NULL};
struct IntuiText df2text={
	3,0,JAM1,10,2,NULL,"DF2:",NULL};
struct IntuiText df1text={
	3,0,JAM1,10,2,NULL,"DF1:",NULL};
struct IntuiText df0text={
	3,0,JAM1,10,2,NULL,"DF0:",NULL};

struct Gadget exitgadget={
	NULL,584,117,50,11,GADGHCOMP,RELVERIFY,BOOLGADGET,(APTR)&Border,NULL,
	&exittext,NULL,NULL,EXIT,NULL};
struct Gadget wipegadget={
	&exitgadget,584,103,50,11,GADGHCOMP,RELVERIFY,BOOLGADGET,(APTR)&Border,NULL,
	&wipetext,NULL,NULL,WIPE,NULL};
struct Gadget loadgadget={
	&wipegadget,584,89,50,11,GADGHCOMP,RELVERIFY,BOOLGADGET,(APTR)&Border,NULL,
	&loadtext,NULL,NULL,LOAD,NULL};
struct Gadget savegadget={
	&loadgadget,584,75,50,11,GADGHCOMP,RELVERIFY,BOOLGADGET,(APTR)&Border,NULL,
	&savetext,NULL,NULL,SAVE,NULL};
struct Gadget blkgadget={
	&savegadget,584,61,50,11,GADGHCOMP,RELVERIFY,BOOLGADGET,(APTR)&Border,NULL,
	&blktext,NULL,NULL,BLK,NULL};
struct Gadget df3gadget={
	&blkgadget,584,47,50,11,GADGHCOMP,RELVERIFY,BOOLGADGET,(APTR)&Border,NULL,
	&df3text,NULL,NULL,DF3,NULL};
struct Gadget df2gadget={
	&df3gadget,584,33,50,11,GADGHCOMP,RELVERIFY,BOOLGADGET,(APTR)&Border,NULL,
	&df2text,NULL,NULL,DF2,NULL};
struct Gadget df1gadget={
	&df2gadget,584,19,50,11,GADGHCOMP,RELVERIFY,BOOLGADGET,(APTR)&Border,NULL,
	&df1text,NULL,NULL,DF1,NULL};
struct Gadget df0gadget={
	&df1gadget,584,5,50,11,GADGHCOMP,RELVERIFY,BOOLGADGET,(APTR)&Border,NULL,
	&df0text,NULL,NULL,DF0,NULL};

struct NewWindow SWindow={
	0,10,30,30,3,0,GADGETUP,RMBTRAP|WINDOWDRAG|BORDERLESS|SMART_REFRESH,
	&popgad,NULL,"Pop!",NULL,NULL,0,0,0,0,WBENCHSCREEN};

struct NewWindow MWindow={
	0,10,639,0,-1,-1,CLOSEWINDOW|INACTIVEWINDOW|GADGETUP|DISKINSERTED|RAWKEY|
	DISKREMOVED|REFRESHWINDOW|MOUSEBUTTONS,WINDOWCLOSE|INACTIVEWINDOW|ACTIVATE|
	SMART_REFRESH|RMBTRAP|WINDOWDEPTH|WINDOWDRAG|WINDOWSIZING,&popstaygad,
	NULL,"PopInfo v3.1 © Copyright 1989 Jonathan Potter",NULL,NULL,
	90,21,639,0,WBENCHSCREEN};

struct NewWindow LWindow={
	0,0,640,200,-1,-1,GADGETUP,ACTIVATE|RMBTRAP|SMART_REFRESH,
	&df0gadget,NULL,NULL,NULL,NULL,0,0,0,0,WBENCHSCREEN};

struct NewWindow WWindow={
	170,85,300,30,-1,-1,MOUSEBUTTONS|RAWKEY|INACTIVEWINDOW,ACTIVATE|RMBTRAP,
	NULL,NULL,NULL,NULL,NULL,0,0,0,0,WBENCHSCREEN};

struct IntuitionBase *IntuitionBase;
struct Window *Window, *CWindow;
struct Screen *scr;
struct Port *diskport;
struct IOStdReq *diskreq;
struct IntuiMessage *Msg;
struct FileLock *lock;
struct InfoData *data;
struct DosLibrary *DosBase;
struct DeviceList *devlist;
struct RootNode *rootnode;
struct DosInfo *dosinfo;
struct GfxBase *GfxBase;
struct FileInfoBlock *finfo;
struct DateStamp now;
struct timerequest TimeReq;
struct MsgPort *TimerPort;

FILE *bbsavefile;
char txt[80], wintit[]="PopInfo v3.1 © Copyright 1989 Jonathan Potter";
char bootblock[]={
	'D','O','S',0,0xC0,0x20,0x0F,0x19,0x00,0x00,0x03,0x70,0x43,0xFA,0x00,
	0x18,0x4E,0xAE,0xFF,0xA0,0x4A,0x80,0x67,0x0A,0x20,0x40,0x20,0x68,0x00,
	0x16,0x70,0x00,0x4E,0x75,0x70,0xFF,0x60,0xFA,0x64,0x6F,0x73,0x2E,0x6C,
	0x69,0x62,0x72,0x61,0x72,0x79,0x00,0x00,0x00,0x00,0x00};
short ScreenHeight, ScreenWidth;

struct IntuiText mesg={
	1,0,JAM1,10,12,NULL,txt,NULL};

int oldpri,numdevs,nondos,nodisk,flag,flag2,sbbflag,a,b,c,x,y,savebb,
	 dnum,sum,lastsum,error,nsbb[4],oldw,oldh,oldtop,oldleft,maxnumdevs,
	 onumdevs,namep,popflag,ractreq,xyz,fast,chipt,total,hours,mins,secs,
	 checkbbs,VirusBase,day,month,year;
UBYTE devname[4];
char *volumename, *filename, *bbmess, *status;
unsigned int *point1;
unsigned int *point2;
USHORT *popgad1_chip, *popgad2_chip, *popstay1_chip, *popstay2_chip;
UBYTE *diskbuffer;
char TimeBuffer[9], DateBuffer[9];

struct TextAttr TopazText={
	"topaz.font",8,0,0};

#define iprint Window->RPort
#define cprint CWindow->RPort
#define CHIPMEMORY (AvailMem(MEMF_CHIP) >> 10)*1024
#define FASTMEMORY (AvailMem(MEMF_FAST) >> 10)*1024
#define TOTALMEMORY CHIPMEMORY+FASTMEMORY
#define WINDOWMESSAGE 1L<<Window->UserPort->mp_SigBit
#define TIMERMESSAGE 1L<<TimerPort->mp_SigBit

char *virusdesc[]={
	"  Not recognised as a virus.  ",
	"    SCA virus recognised!!    ",
	"BYTE BANDIT virus recognised!!",
	"BYTE WARRIOR virus recognised!",
	" NORTHSTAR virus recognised!! ",
	"  REVENGE virus recognised!!  ",
	"  OBELISK virus recognised!!  ",
	" PENTAGON virus recognised!!! ",
	" SYSTEM Z virus recognised!!! ",
	"    HCS VIRUS recognised!!    ",
	"DISK-DOKTOR VIRUS recognised!!",
	"LAMER EX'TOR VIRUS recognised!",
	" ULTRAFOX VIRUS recognised!!  ",
	" GRAFFITI VIRUS recognised!!  ",
	"16 BIT CREW VIRUS recognised!!",
	" PHANTASM VIRUS recognised!!  ",
	"OLD N. STAR VIRUS recognised!!"};
