mod version date 2-24-92

The BIG mod for WWIV 4.20 by Larry Mears 205-880-9896 2400 baud 24hrs
Description: Will scan for the Blue Instant Graphics! terminal AND also
the Atari ST Instant Graphics! terminal.  It will check the terminals
version and only allow BIG 1.02 and IG 2.17 the latest versions as of this
mod.  I am the author of the Instant Graphics! terminals.  There is a
a BIG 1.01a minor bug fix DL B101A.ZIP for the update only.  Fixes the problem
with the BIG pause command when the WELCOME file comes across.   If you don't
know what the BIG term is call 205-880-9896 and DL BIG102.ZIP now!
AT class computer with VGA color required.  BIG is a REAL graphics terminal.
BIG has 6 years dev time behind it, it will make ANSI run to a corner and
wimper!  I spent 5 years on the Atari version before I ported IG to DOS!
OK, nuff said let's get on with it.   When the IG terminal is found it will be
indentified and the GFILES with the following extenders will be used with
FALLBACK to ANSI/ASCII if the files are non-existant.

BIG term DEMO level unregistered:  *.IG1  - fallback to .ANS, .MSG
BIG term REGISTERED:               *.IG2  - fallback to .IG1, .ANS, .MSG
BIG term REGISTERED & ADLIB card:  *.IG3  - fallback to .IG2, .IG1, .ANS, .MSG
IG color terminal:                 *.IG4  - fallback to .ANS, .MSG (only)
IG mono  terminal:                 *.IG5  - fallback to .ANS, .MSG (only)

When BIG term is found the SYSOP side will not see ANY menu or logon file
display.  ie User hits '?' the main menu will be ASCI sent without EXTRA WWIV
decoding that DOES cause problems with ADLIB music data, and for that same
reason no ADLIB music data can be placed into messages, BUT ADLIB data CAN be
sent correctly with system files such as WELCOME.IG3 then the command to
execute the data can be in messages or menus!  Thumpin' thundering graphics!!!
This mod will NOT effect the NORMAL operation of WWIV from the local console,
it will work just like it always did, BUT things will be a little different
when a BIG user is on-line and the SYSOP is assisting him from the console
side.  The user will see and hear things that the SYSOP will not.
It would take a major REWRITE of WWIV to make it FULLY BIG altered on the
SYSOP side.  I'm not up to it and unless Wayne Bell wanted me to do it I
wouldn't even try.  This is the best I could come up with using the KISS
principle!  You might want to add a option from the main menu to allow
the switching of menu type by the user instead of just the AUTO scan method.
If so the variable 'big_menus' holds the key 0=normal operation 1-5 tells the
IG terminal type just like the *.IGx extender.

The files you will need to modify are:
VARS.H
LILO.C
SR.C
MSGBASE.C
MSGBASE1.C
BBSUTL.C    (optional)
BBS.C       (optional)

Come on let's go!

------------------------------------------------------------
In VARS.H  find the line of code that looks like this:

#ifdef _DEFINE_GLOBALS_

directly BELOW that line add this code:

/* LGM{ */
unsigned char big_menus=0;
/* }LGM */

You don't have to include the comments but that will help you locate the
mod later to mod the mod or remove or copy it to another WWIV version or such.


NEXT in VARS.H find the line of code that looks like:

extern char *ctypes[];

now directly ABOVE this line ADD this code:

/* LGM{ */
extern unsigned char big_menus;
/* }LGM */

OK thats' all you do to VARS.H save it out to disk!

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

NEXT load up LILO.C  oh boy lot's to do here!
Find the line of code near the top that looks like:

#pragma hdrstop

Directly BELOW this line add this chunk of code:
/* LGM{ */
int check_ig()
{
  long l,m;
  char ch[6];
  int  ig_v, ct=0;

  while (comhit())
    get1c();

  pr1("G#? 0:");

  l=timer1()+36;
  if (modem_flag & flag_ec)
    l += 18;

  while ((timer1()<l) && (!hangup)) {
    checkhangup();
    m=timer1()+36;
    ct=0;
    do {
	if(comhit()) {  ch[ct]=get1c(); ct++; }
    } while(ct<4 && timer1()<m);
    /* check for IG version 2.17 or higher */
      ig_v=((ch[0]-48)*100)+((ch[2]-48)*10)+(ch[3]-48);
      if(ig_v<217 && ig_v>200) {
       nl();
       outstr("Please download the latest version of the IG terminal");
       nl();
       outstr("to use the ST Instant Graphics! menus on this BBS. G#b 0:");
       nl();
      }
      if(ig_v>=217) {
       /* check for MONO or COLOR IG terminal */
       pr1("G#? 3:");
       m=timer1()+36;
       ct=0;
       do {
	if(comhit()) {  ch[ct]=get1c(); ct++; }
       } while(ct<2 && timer1()<m);
       if(ch[0]=='0' && ch[1]==':') return(0); /* not allowing low res */
       if(ch[0]=='1' && ch[1]==':') return(4); /* signify IG color med res */
       if(ch[0]=='2' && ch[1]==':') return(5); /* signify IG mono high res */
    } else return(0);
  }
  return(0);
}



int check_big()
{
  long l,m;
  char ch[6];
  int  big_v,ct=0;

  ch[4]='D';
  while (comhit())
    get1c();

  pr1("I#? 0:");

  l=timer1()+36;
  if (modem_flag & flag_ec)
    l += 18;

  while ((timer1()<l) && (!hangup)) {
    checkhangup();
    m=timer1()+36;
    ct=0;
    do {
    if(comhit()) {  ch[ct]=get1c(); ct++; }
    } while(ct<5 && timer1()<m);
    /* check for version 1.02 or higher */
      big_v=((ch[0]-48)*100)+((ch[2]-48)*10)+(ch[3]-48);
      if(big_v<102 && big_v>99) {
       nl();
       outstr("Please download the NEW version of the BIG terminal");
       nl();
       outstr("to use the Blue Instant Graphics! menus on this BBS. I#b 2:");
       nl();
      }

      if(big_v>=102) {
       if(ch[4]==0 || ch[4]=='D') return(1);
       /* check for ADLIB if registered */
       pr1("I#? 2:");
       m=timer1()+36;
       ct=0;
       do {
	if(comhit()) {  ch[ct]=get1c(); ct++; }
       } while(ct<2 && timer1()<m);
       if(ch[0]>='1' && ch[1]==':' && ch[4]=='R') return(3);
       if(ch[4]=='R') return(2);
    } else return(0);
  }
  return(0);
}

/* }LGM */


OK now still in LILO.C go to the routine called getuser()  we will make
some changes here.  Look for the line of code that matches this:

  if ((!net_only) && (incom)) {

Directly BELOW that line add this block of code:

  /* LGM{ */
  big_menus=check_big();
  if(!big_menus) big_menus=check_ig();
   switch(big_menus) {
    case 0: outstr("\n\rIG! Scan complete, extended on-line graphics and sound denied.");
	    nl(); break;
    case 1: outstr("\n\rDetected BIG DEMO VERSION"); nl(); break;
    case 2: outstr("\n\rDetected BIG REGISTERED"); nl(); break;
    case 3: outstr("\n\rDetected BIG ADLIB REGISTERED"); nl(); break;
    case 4: outstr("\n\rDetected IG Color (med)"); nl(); break;
    case 5: outstr("\n\rDetected IG Mono (high)"); nl(); break;
    default: outstr("\n\r\7uh oh...."); nl(); break;
   }
  /* }LGM */


OK now in this same routine getuser() find the line that looks like:

    sprintf(s,"%sWELCOME.ANS",syscfg.gfilesdir);

Directly BELOW that line add this code:

    /* LGM{ */
   if(big_menus) {
      big_menus+=48;
      sprintf(s,"%sWELCOME.IG%c",syscfg.gfilesdir,big_menus);
      big_menus-=48;
   }
   /* }LGM */



OK now find the BLOCK of code that looks like:

      if (ans>0)
	printfile("welcome.ans");
      else if (ans==0)
	printfile("welcome.msg");
    } else
      printfile("welcome.msg");
  }


What you need to do is DELETE the above BLOCK and REPLACE it with this:

      /* LGM{ */
    if(big_menus)
     printfile("welcome");
     else if (ans>0)
      /* }LGM */
	printfile("welcome.ans");
      else if (ans==0)
	printfile("welcome.msg");
      /* LGM{ */
    } else if(!big_menus) printfile("welcome.msg");
	   else printfile("welcome");
     /* }LGM */
  }


OK that is all that you need to do to LILO.C save it out to disk.
---------------------------------------------------------------------

LOAD up  SR.C  we got some poking around to do here too!
Now find the routine called ascii_send();
In this routine find the line that matches:

	outchr(b[i2++]);

REPLACE that line with this code:

	/* LGM{ */
	if(!big_menus) outchr(b[i2++]); else outcomch(b[i2++]);
	/* }LGM */

OK that's all to do to SR.C save it to disk!
-----------------------------------------------------------------------

Now LOAD up MSGBASE.C and find the routine called printfile(char *fn)
in this routine find the line that matches this:

  if (strchr(s,'.')==NULL) {

Directly BELOW that line ADD this code block:
  /* LGM{ */
    if(big_menus) {
     strcpy(s1,s);
     strcat(s1,".IGx");
     s1[(strlen(s1)-1)]=big_menus+48;
     if(exist(s1)) { ascii_send(s1,0,0); return(0); }
       else { if(big_menus-1>0 && big_menus<4) {
		s1[(strlen(s1)-1)]=big_menus+47;
		if(exist(s1)) { ascii_send(s1,0,0); return(0); }
		   else { if(big_menus-2>0) {
			  s1[(strlen(s1)-1)]=big_menus+46;
			  if(exist(s1)) { ascii_send(s1,0,0); return(0); }
			  }
		   } /*endif 2nd else*/
	      } /* endif big_menus-1>0 */
       } /*endif 1st else */
    } /*endif big_menus*/
    /* }LGM */


OK dude that's all you do to MSGBASE.C, save it out to disk!
---------------------------------------------------------------

NEXT LOAD up MSGBASE1.C  find the routine called printmenu(int i)
In that routine find the line that matches:

   int next;

Directly BELOW that line add this block of code:

  /* LGM{ */
  if(big_menus) {
  sprintf(s1,"MENU%u.IGx",i);
  s1[(strlen(s1)-1)]=big_menus+48;
    sprintf(s,"%s%s",syscfg.gfilesdir,s1);
    s1[(strlen(s1)-4)]='\0';
    if (exist(s)) {
      printfile(s1);
      return;
    } else {  if(big_menus-1>0 && big_menus<4 ) {
		 s[(strlen(s)-1)]=big_menus+47;
		 if (exist(s)) {
		  printfile(s1);
		  return;
		 }  else {  if(big_menus-2>0) {
			    s[(strlen(s)-1)]=big_menus+46;
			      if (exist(s)) {
			       printfile(s1);
			       return;
			      }
			    }
		    } /* endif 2nd else */
	      } /*endif big_menus-1>0 */
      } /*endif 1st else */
  } /*endif big_menus*/
  /* }LGM */


OK that's it for MSGBASE1.C save it out to disk!
--------------------------------------------------------------

Alright now LOAD up BBSUTL.C  this part of the mod is optional.
What it does is allow any caller with a BIG or IG term the maximum
//UPLOAD message size limit of 20000 bytes, although they still are required
to have a access level above 10 to //UPLOAD messages.  This is to encourage
users to upload their BIG Pictures to your message base.  It's up to
you add it if you like.

In the routine called upload_post() find the line of code that matches:

	maxli=80;

Directly BELOW that line add this code:

  /* LGM{ */
  if(big_menus) maxli=80;
  /* }LGM */

That's all we do to BBSUTL.C save it to disk!
-------------------------------------------------------------

OK here is another OPTIONAL mod I have on my bbs.  My BBS is open access
anyone can post that calls me, hopefully their BIG graphics to my
BIG PICTURE base!  To add this to your bbs  LOAD BBS.C  up.

Look for the line that looks like this:

  if ((strcmp(s,"UPLOAD")==0) && (actsl>10))

CHANGE that line to this:

  if ((strcmp(s,"UPLOAD")==0) && (actsl>9))


Now save BBS.C to disk that's all to do there.
------------------------------------------------------------




LAST you type MAKE and cross your fingers, hope you made no typos!

DISCLAIMER:  I will not be held responsible for ANY damage this mod
might cause.  It works fine for me running WWIV 4.20 on DOS 3.3 and
I really do hope you give your BBS the AWESOME POWER of BIG MENUS and
BIG LOGON files!

