ллллкФФФФФФФЗкФФФФФФФЗкФФФФФФФЗкФФЗ кФФЗкФФФФФФФЗкФФФФФФФЗлллл
       лХХХГ ФФФФФ КГ ФФФФФ КГ ФФФФФ КГ  КХГ  КГ ФФФФФ КГ ФФФФФ КХХХл
       лХХХдЭИ   ЩЭМГ  ЩЭЭЭЭМГ  ЩЭЭЭЭМГ  К\Г  КГ  ЩЭЭЭЭМдЭИ   ЩЭМХХХл
       лХХХХХГўўўКХХГўўКХХХХХГўўгФЗХХХГўўКўГўўКГўўгФЗХХХХХГўўўКХХХХХл
       лХХХХХГБББКХХГББКХХХХХГББЩЭМХХХГББК\ГББКГББЩЭМХХХХХГБББКХХХХХл
       лХХХкФй   гФЗГ  гФФФФЗГ  гФФФФЗГ  КХГ  КГ  гФФФФЗХХГ   КХХХХХл
       лХХХГлллллллКГлллллллКГлллллллКГллКХГллКГлллллллКХХГлллКХХХХХл
       ллллдЭЭЭЭЭЭЭМдЭЭЭЭЭЭЭМдЭЭЭЭЭЭЭМдЭЭМ дЭЭМдЭЭЭЭЭЭЭМ  дЭЭЭМлллллл
                    N E T W O R K    N E W S L E T T E R

  кФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФП
  Г        June 1993           Volume Number 3         Issue Number 1      Г
  РФФТФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФТФФй
     Г                In This Month's Issue of IceNEWS                  Г
     Г                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                  Г
     Г   Editor's Notes  by Special Agent ..............   1 @7672      Г
     Г                                                                  Г
     Г   Tidbits From 1@1  .............................   1 @1         Г
     Г                                                                  Г
     Г   Features                                                       Г
     Г     The Art Of Debate - By Bro. Jack ............  11 @7672      Г
     Г     The Learning's of a Teenage CoSysOp .........   5 @7672      Г
     Г     Protecting WWiV - by The Deranged Alchemist .   1 @6855      Г
     Г                                                                  Г
     Г   Modders Corner                                                 Г
     Г     Mod Tip's by The Flying Chicken .............   1 @2456      Г
     Г     Mod Of The Month ............................                Г
     Г                                                                  Г
     Г   Programers Corner                                              Г
     Г     Quickbasic Tips by Tha AMPro ................   7 @7660      Г
     Г     Turbo C++ Tips by Darkhan ...................   2 @7654      Г
     Г                                                                  Г
     Г  Feature BBS Of The Month .......................     @7672      Г
     РФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФй
                             кФФФФФФФФФФФФФФФФФФП
ФФФФФФФФФФФФФФФФФФФФФФФФФФФФФД  Editor's Notes  УФФФФФФФФФФФФФФФФФФФФФФФФФФФФФ
                             РФФФФФФФФФФФФФФФФФФй
 
      New editor  reporting  for  duty...   First  duty  is  thanking  Jim
for entrusting me with the position. So here  goes,  thanks  Jim.  Second
duty  is thanking Spelunker and The Fez for their efforts before me  in
this  position. They have left  me with the unenviable position of trying to
match the quality of their work in  the  last  two  News Letters.  Thanks
guys  for  a  great  News Letter....

      We are going to incorporate some new features into the News Letter.
First off for  the  programmers out there, we have developed  "The
Programmers Corner." This will  contain  programing  tips  each month on
Quick Basic, Turbo C++, and others. Another new feature which  I  am excited
about is "TFC's Mod Tips of the Month". The Flying Chicken will have us
flying  through mods in no time. Right TFC????

      Last month's interview  with  Jim  went  so  well that this will
become a regular part of the News Letter "Tidbits  From  1@1". If you have
any questions you would like to see Jim answer in the News Letter make sure
you  E-Mail them to me [1@7672] and I will see to it that they are included.

      Another new  feature  will  be  "IceNet's Feature BBS's of the Month".
We will be contacting IceNet SysOp's asking  you  to  tell us about you and
your BBS, which will be featured in upcoming News Letters.

      Look for these and more new features in future Ice Net Newsletters.

      A great big thanks goes out to those who have taken time  from their
busy schedules to contribute to this months INN.....

ФФФФФФФФФФФФФФФФФФФЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭФФФФФФФФФФФФФФФФФФФ

                           кФФФФФФФФФФФФФФФФФФФФФФФП
ФФФФФФФФФФФФФФФФФФФФФФФФФФФД   Tibit's From  1@1   УФФФФФФФФФФФФФФФФФФФФФФФФФФ
                           РФФФФФФФФФФФФФФФФФФФФФФФй

SA.  Well Jim since you have been beta  testing  Net33  for  a  while  now  you
     probably have a good handle on its new abilities, how  about  sharing them
     with us. What are the new features to Net33?

Jim. It's working  flawlessly on Paragon, TGWN, and the 1120 Server.  The areas
     of change  I've  noticed  include  new  netdat*.log  infomation,  subs.inf
     information from the pings that's longer than the 40  character  limit  in
     NET32, and  routing information in the messages.  This last part is rather
     interesting, in that it's 'hidden'  from  view  til  you  extract  out the
     message and list it.  Each node along the route is listed with the time of
     departure.

     It's always possible that the final released version  could  be  different
     than the one I have.  (Release date 9am Pacific, Saturday, June 5th)

     Filo had the following remarks about NET33...

     While on  this subject, NET33 should be viewed as an "interim" release. It
     is being released primarily so that the description field is not truncated
     on the "pings."  For those who find  "ping"  to be a new, unfamiliar word,
     it refers to the process whereby @1's software interrogates  your SUBS.XTR
     file to  find  out which subs are designated as AUTO-INFO.  Those subs are
     then listed in the SUBS.LST (and  accompanying  files).   It  is  by  that
     method that the SUBS.LST should be more current than  it  has  been in the
     past.

SA.  Being IceNet  1@1 NC must strap you of much time, but on top of it you are
     also the WWiVNet and WWiVLink AC,  tell  us how you pull this off with out
     loosing your sanity?

Jim. With the GC's doing the updates, Odin doing the subs Lists,  you doing INN
     newsletter, and  loads  of  other help I receive from Wayne, Filo, all the
     AC's and sysops, even the users in  IceNET...I don't have that much to do.
     It helps being organized, and being fast.  You learn  as  you practice the
     art of  NC'ship, and you get faster.  BTW, what is this 'sanity' you refer
     too?

SA.  Oh sanity well, I will tell you the  signs that it is lost. You know it is
     lost when you start mysteriously having your forehead grow  bigger and the
     remaining hair  turns  grey. It is then time to get away. this leads me to
     ask, are there any plans in the making for a national IceNet gathering?

Jim. Yes!  WWIVcon, being organized by Filo, Madman, and a few others will
     certainly be a good place for all IceNET  sysops to meet.  We could have a
     session during the conference for IceNET sysops.  It's next summer, in New
     Orleans, so stay tuned, and plan on coming.  Reservations  are being taken
     now.

                                  WWIVcon '94
                                  New Orleans
                             July 1 - July 3, 1994


Q:  What is WWIVcon?

A:  WWIVcon is a WWIV convention.  The first one is to be held in New Orleans.

Q:  Who may attend?

A:  Anyone who  is interested in WWIV may attend.  Those who do not stay at the
    convention hotel will be asked to register  in advance and pay a conference
    fee to cover costs like meals and so forth.

Q:  Where will it be in New Orleans?

A:   Comfort Inn
     1315 Gravier Street.
     New Orleans, La 70112

    If you  write  for reservations, address it to ATTN: Reservations.  If  you
wish to call and reserve a room (on credit card or something),

The number to call to make your reservation is 800-535-9141.  The Sales manager
handling this is  Esther  Holguin  (pronounced  Hole-Kwin).   The first night's
lodging must be prepaid to guarantee your  reservation.   This is $55, plus 11%
Sales Tax (I told ya we had the highest in the nation!), plus a $2.00 per night
city occupancy tax.  Ballparking, I'd guess that'd put it  at  about  $62.50 (I
don't have a calculator handy)  Have your Credit Card handy.

Q:  What is the agenda for the convention?

A:  The following activities are planned so far:

    July 1 (Friday night)  : Welcome Social at Hotel (7 - 9 pm roughly)

    July 2 (Saturday day)  : Seminars and speakers on various topics

    July 2 (Saturday night): Awards banquet

    July 3 (Sunday morning): Additional Seminars and send-off

Q:  When can I make my reservations?

A:  You can begin calling the hotel now (see information above) to reserve your
    room.  The  earlier  that  you make your reservation, the easier that it is
    for us to plan the event and you  are  assured  of  getting  a  room at the
    hotel.  (I hope that we can book all the rooms in the  hotel  by October or
    so).

    If we  can  get  the hotel booked up as early as that, we can approach some
corporate sponsers (like Borland) to  see  if  they  will  throw  together some
freebies for us.


SA.  IceNet is  running  720 plus BBS's now. Do you forsee  any  problems  with
     maintaining speedy updates and such?

Jim. Not at all.  The software and the sysops will see to that.  I'm working on
     some utilities  now  that  will  help  provide a more precisely controlled
     updating process, which will include  monitoring  total K sent in updates.
     It's a balance between speed, and cost, that I try to  optimize.   I think
     our organization  structure  gives  us some advantages too, as compared to
     other WWIV networks.  We have the ability  to move fast (decisions made at
     the top  when  required),  and at the same time, a small  number  of  GC's
     organized by  time zones, so when change is necessary, it's easy for us to
     all work as a team.


SA.  Speaking of network connections, much  discussion  has  taken place on the
     rate of updates. Could you explain for all your policy  and  the reasoning
     of it for the nightly updates?

Jim. Updates are  not on a schedule by date or day of week.  Rather, updates go
     out as they are received.  This way,  updates  are  more frequent when the
     need is greater, less frequent when things are slower.   In  total,  there
     are 14  files  to  update  and  send  out, but all the bbslist.* files are
     generally partial updates (as little as one new system in a group, or name
     change).  Total K sent out per week is about 60k as determined in a recent
     study.  The utilities I mentioned  above  will  allow  me  to more closely
     monitor this, and make decisions accordingly.  Since  the  files go out as
     received, the incoming queue is somewhat random, though your likely to see
     at least one of the 14 files.

ФФФФФФФФФФФФФФФФФФФЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭФФФФФФФФФФФФФФФФФФФ

                        F E A T U R E   A R T I C L E S
                        ФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФ

                           кФФФФФФФФФФФФФФФФФФФФФФФП
ФФФФФФФФФФФФФФФФФФФФФФФФФФФД   The Art Of Debate   УФФФФФФФФФФФФФФФФФФФФФФФФФФ
                           РФФФФФФФФФФФФФФФФФФФФФФФй
                               Bro. Jack 11 @7672

    It is a given that the BBS's are a forum for debate.  And seeing that
there is no want for argument on any of the boards I presently frequent, it
would be a profitable thing to write an article on the art of debate.

    As we  all  know there is much discussion on the subs on every issue under
the sun.   But what is the reason for the debate?  It becomes obvious that not
all of us have the same motivation.  After  many  years of study in the art of
argument and the acts of the mind it is a simple thing to  determine  when one
is a sincere  seeker of the truth of a matter or nothing more than a proud and
contentious person not interested in the  truth of the matter at all.  Opinion
should be developed according to the facts and logical argument, not according
to the emotional or immature mind set of a person who is not really interested
in making a change according to the truth of the matter.

    Name calling and character assassination is nothing more  than  a  show of
insecurity in the  person  displaying  such tactics.  So then, how much of the
arguments we have  all  followed and/or  presented  have  actually  been  good
arguments at all?  To treat our opponent in a manner which  is  respectful and
concerned with preserving  one  another's integrity should be the order of each
debate!  There are war subs to vent your  frustrations,  which I do not bother
with.  But the point is that there is a place for that pursuit.

    It is obvious that it is a waste of time and accomplishing nothing when we
come to a debate or argument without the confidence that we are correct in our
ideas.  But we also must be open to consider that we may be  wrong, and not be
afraid of making  the  change  if  we  are!  It is not a shame to be wrong and
change... but it is a shame to be wrong  and  not  be willing to consider that
possibility.  We are  all human beings with all the frailties  and  strengths,
the desires and  drives,  the curiosities and the fears common to our natures.
Mutual respect and an honest inquiry for  the truth are the essentials of good
debate.  Are we in the process of searching, or do we just  want  to prove our
point at the expense of the character, feelings and integrity of another?

    No doubt  it  is  enjoyable at times to sling mud around.  Yet this is the
pass time of children, not those who have  an  influence  on the opinions of a
nation.  Yes, it  is  true!  We are a means of informing  the  nation  of  the
general trend  in  public  opinion.  If the interpretation is correct, we have
an opinion that  we  are  hateful  and  arrogant,  with  no  tolerance for one
another.  Whatever your point of view,  it  is  necessary  that  we treat each
other with consideration.  Let's show some real class and  enter  into  debate
with a spirit of respect and mutual consideration.

    Debate is  an  art.   It is also a tool to ascertain the truth.  If we are
too immature to  handle  disagreement  in  an  intelligent  manner,  then  our
favorite pass time of BBSing (at least it is for me) has  degenerated  into  a
simple game instead of a meaningful medium of communication and inquiry.

    A few general rules of debate may be in order here:

1.      Be confident and intelligent in your argument

2.      Answer all  points  brought  up.   Do not ignore that which you cannot
        answer.

3.      Don't be afraid to admit error.   It  takes  an  intelligent  adult to
        admit when they are wrong, not to mention truthfulness with one's self.

4.      Consider what the other person is saying.  They may be right.

5.      Refrain from  personal  attacks  and  name  calling.   Immaturity  and
        insecurity are exposed when this snake rears its head.

6.      If you  don't  know  what  your talking about in an area, don't make a
        fool out of yourself unnecessarily.   Even a fool is perceived as wise
        when he keeps his mouth shut.

7.      Be yourself and respect the person of your opponent.

8.      When an agreement cannot be arrived at, consider  the  facts  from the
        beginning, search  the  logic  in  the  arguments of both sides of the
        issue at hand, and start over again.  If this is done by ALL involved
        it would be surprising how much would be accomplished here.

9.      If an agreement still cannot be reached, dismiss the debate before you
        get out of control.  At least agree to disagree with some class.

10.     Examine yourself and the concepts  that  lead  you  to the opinion you
        hold in the first place.  Again, could you imagine  what  it  would be
        like if  we  were  all  more  concerned  with  the truth of the matter
        instead of just proving ourselves right and the other guy wrong?


    And above  all.....  KEEP  ON  POSTING!!!!!!   We'll  never  get  anything
accomplished if we give up.  And besides..... who would I  get  to  talk to if
you all gave up?

                               Bro. Jack 11 @7672

ФФФФФФФФФФФФФФФФФФФЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭФФФФФФФФФФФФФФФФФФФ

                             кФФФФФФФФФФФФФФФФФФФП
ФФФФФФФФФФФФФФФФФФФФФФФФФФФФФД  Protecting WWIV  УФФФФФФФФФФФФФФФФФФФФФФФФФФФФ
                             РФФФФФФФФФФФФФФФФФФФй
                    by The Deranged Alchemist  1 @6855

     I was  first  contacted  about  doing an article on protecting WWIV a few
months ago, but had to decline due to  a  lot  of pressure at school and work.
I'm out of school now (temporarily) and was contacted again  by  Special Agent
to do an article.

     First of  all,  I'd  like  to  apologize  in  advance  for any grammar or
spelling errors as I'm not much of a writer.   My studies in college have been
in mainly scientific fields, and most writing I've done has  been  lab reports
and technical  papers (I still haven't taken English 102 yet!).

A bit of History:

     It was April of 1992 when I first became interested in starting a BBS.  I
was in college  and several of my friends had computers and we started a small
host system on Procomm Plus just to send  mail  and stuff back and forth.  One
of my friends suggested that I put up a full fleged public  BBS  so  I did.  I
had no idea  what  kinds  of  BBS  software were available, and by chance, the
first one I located on a local BBS was WWIV 4.20e.  I downloaded it and set it
up and within 2 weeks had my second phone line and was up and running.

Hackers Galore:

     It seems that new BBS's are the prime targets of hackers, and mine was no
exception.  Within the first week my BBS  was  up,  I had 3 attempts.  Luckily
all were aimed at the outdated 4.12 version and failed to work.

     There was one hacker in the area (who I shall refer  to  from  now  on as
simply G) that  took  a liking to my BBS.  We were similar in our thinking and
expertise, but on different sides of the  spectrum.   Because he liked my BBS,
he never tried  to  hack  it, but instead warned me when  he  found  areas  of
vulnerability and also  when  my  BBS  was  targeted  by  other  hackers.  His
information was extremely helpful.

     The first thing G pointed out to  me  was  the now commonly known PKUNZIP
'rename' function.  For  those who are unaware of this, the  PKUNZIP  versions
from 1.93a on  have  the  ability  to take several courses of action when they
find duplicate files already in the directory.   Older  versions just asked if
you wanted to overwrite the existing file.  The later versions gave the option
of overwriting, or  renaming!   If   a user selected 'rename'  then  you  were
prompted for a  filename  *AND  A  PATH!*   With  this  function, a user could
specify any path on your harddisk to send the file.

     When he showed me this, I felt a  chill  go  up  my spine.  I immediately
started digging through  the PKUNZIP documentation until  I  found  a  way  to
disable this without  sacrificing  the  PKUNZIP  functionality  I had grown to
appreciate on other BBS's.  By adding a '- o' argument to the command line for
PKUNZIP, the duplicate file would automatically  be  overwritten  without  any
user interaction.  I figured I was safe now.

     About 2 days later, I saw a user log on and attempt to  use this function
by uploading a  bogus ZIP file and then try to extract it.  He was amazed that
it didn't work, and I was satisfied that  I'd  prevented  another  hack.  That
week, 4 BBS's in the area went down!

     Another couple  of  weeks  later  G called me and showed  me  a  scantily
documented DSZ command line option called '-ONAME='.  Apparently this
option allowed the  sending DSZ program to specify a path and filename to send
as long as the receiving end wasn't expecting any particular filename (As with
a batch transfer).  This one is easily taken care of by specifying a directory
for DSZ to upload to with an appended '\'  on  it to designate 'This Directory
Only!', or use the '-restrict' command.

     It became  apparent  to  me  that  regardless  of the precautions  taken,
someone would always  find  a  little  documented  option  or other 'bug' in a
program that would allow a file to find  it's  way  to  an unsafe place and be
executed by the BBS.

Progressive Protection:

     I had  now  had  a BBS up and running for about 6 weeks  and  decided  to
register WWIV.  I  figured  that  by  having  the  source code I could do some
serious security modding.  I had already begun work on a program that would do
a simple checksum on a file and return an errorlevel code depending on how the
checksum compared to a value in an internal  table.   I  was  using  this from
batch files to ensure that the programs were valid before executing them.  For
example, I would use a batch file called UNZIP.BAT to call  PKUNZIP  from  the
BBS.  It would  first  check the program to ensure that its checksum was valid
prior to passing it any commands.  This  seemed  to  give me a small margin of
protection since not  only  was  there a little protection,  the  non-standard
format of file calling would at least confuse a 'would be' hacker.

     I was  still  anxiously  awaiting  my source code for WWIV when I started
working on a new method.  I found a public  domain  program written by Gary S.
Brown that would  calculate  a CRC32 check on a file. It included  the  source
code, and I was off and running.

     I changed  my  checksum  program  to  include  CRC32  checking  which  is
exponentially more accurate at catching  differences  in  two  data streams. A
checksum can easily be defeated by tacking on garbage bytes  to  the  end of a
file so that  it returns the same checksum as another program.  The only thing
a checksum does is add up each byte in  a  stream.   A  CRC32 check plugs each
byte into a complicated polynomial and XOR's each result  to  produce  a final
value that is  nearly  unique  to  that  data  stream.  Even a very proficient
programmer would have extreme difficulty  in trying to make a program return a
particular CRC32 value.

     Once I had the source code to WWIV, I began my work.  I declared an array
to hold up  to  50  filenames  and their respective CRC32  values.   This  was
hardcoded into the  BBS  source  code  and  took  up  a  lot of memory, but by
incorporating it into  the  BBS.EXE,   it  could  also  check  RETURN.EXE  and
COMMAND.COM to ensure that they were also valid giving a level  of  protection
that went far  beyond  the  batch  file  checking  I was currently doing.  The
drawback was that if anything changed,  a complete re-compile was necessary to
update the information  in the BBS.EXE.  Later I externalized  the  table  and
also built functions  into  the  BBS  that could be accessed by // commands to
update for any changes.  I'm still working on added functionality to make this
an easy 'Block  Copy'  kind of mod for  others  to  effectively  use.   It  is
available at my BBS in it's present configuration which is  not  too  tough to
install, but difficult to maintain.

Other Protections:

     I am  always  looking  for ways to increase my level of protection on the
BBS.  I will try to give a rundown on a few of these.

     One of the main areas of weakness  in  WWIV  is  the  ability of a remote
sysop to accomplish nearly anything that you could from the  keyboard.  If you
allow remote 255  access,  there  is always the possibility  that someone will
get a hold of the passwords and then  all  the  protection  in  the  world  is
useless.  To make this less of a hole, I've gone through and  found  functions
that I figured were useless to a remote sysop, or at least not necessary.   If
you have the  source code, it's easy to just add a check to see if the user is
remote or local before allowing the command  to  be executed.   Another way to
discriminate is to check the 'usernum' variable to see if  it is #1 or another
sysop.  The global  variable,  'incom' can be used to let the function know if
the user is remote or local.  For example:   Suppose  you  didn't  want remote
sysops to 'Read All Mail'.  I reserve this function to only  myself.  There is
really no reason  for a co-sysop to do this.  Here's how one would modify this
function:

                         Existing Code:

if (strcmp(s,"MAILR")==0) {
  if (checkpw()){
    sysoplog(get_stringx(1,8));
    mailr();
  }
}

                         Changes:

if (strcmp(s,"MAILR")==0) {
  if ((checkpw())&&(usernum==1)) {
    sysoplog(get_stringx(1,8));
    mailr();
  }
}

This way, only user number 1 can  'Read All Mail'.

     The 'incom' variable can also be used  to  restrict functions to only the
local sysop.  Here's an example of the same function modified  to  allow  only
the local sysop access to all mail:

if (strcmp(s,"MAILR")==0) {
  if ((checkpw())&&(!incom)) {
    sysoplog(get_stringx(1,8));
    mailr();
  }
}

The 'incom' variable  tells  the  program whether the com port is open or not.
Obviously if the user is on locally, then  the  comport is not open and !incom
will evaluate as true (the '!' is a logical 'NOT' in C).

     Well that's about it for now.  I hope to be able to submit other articles
in the future.  If you would like to obtain any of my mods, I can be contacted
on IceNET 1@6855  or  by  calling  my  BBS  (The  Lab BBS 618-462-0767).   I'd
appreciate any comments or criticisms as well.

                            The Deranged Alchemist
ФФФФФФФФФФФФФФФФФФФЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭФФФФФФФФФФФФФФФФФФФ

                   кФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФП
ФФФФФФФФФФФФФФФФФФФД  The Learning's Of A Teenage CoSysOp  УФФФФФФФФФФФФФФФФФФ
                   РФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФй
                                    Part 1
                                   by  Fini

     Do you  remember back when you first entered the world of BBSing? How you
discovered something to do with your computer other than work and video games.
It was a whole new world to explore.
     For me, as a 15 year old kid, it was  also a way to communicate and share
ideas  with  adults  on  an  equal unbiased basis. It was  a  way  to  discuss
anything to from  politics  to  computers,  or even jokes.  It was  what I had
been looking for.
     At first though, it was rather overwhelming,  post,  email,  chain, etc.,
terms you don't often use in normal preBBS life.   But,  after numerous and an
abundance  of  posts and  numerous chats with various sysops,  I  was  able to
figure out the basics of WWiV BBSing.  I soon felt I had learned all there was
to learn about  WWiV.   I  stopped  calling  boards just to download files and
started posting more  and  more.   Soon   on   my  favorite  board,  Starpoint
Technology Station, I posted so much, that I often ran out  of time.  I nicely
asked the sysop  and  received  a  few more minutes a day.  Even then, I still
ended up using most of it.
     Then one day, I was calling to read  quick and post, when.... Boo.. I was
chatting with the sysop, Special Agent.  He asked me if I  would be a cosysop,
and I of  course said yes.  He called me on the phone later that day and I was
soon immersed in a new side of WWiV i had  never  seen before.  In addition to
posting, I was  now  in  charge of helping to maintain the  quality  of  other
messages and other  daily maintenance.  I was in seven heaven, a cosysop on my
favorite board.
     That was a month ago, and I am still  a  cosysop and regular user.  It is
amazing how much work goes into running a board.  Scanning  every sub, finding
bugs, helping new users and old.  It was no wonder he needed cosysops.  In the
past month, I  have  learned  many things.  I have learned how a Net works and
what it means when it says #@### after someone's handle.  I learned how busy a
sysop is and how much of an investment it is to run a board.

                Running a BBS is no small deal, so I URGE you:

                 Take time today and say Thanks to your Sysop.
    Without them, there would be no BBS's!!  Besides your SL might go up :>
                              To be continued....
ФФФФФФФФФФФФФФФФФФФЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭФФФФФФФФФФФФФФФФФФФ



                          M O D D E R S   C O R N E R
                          ФФФФФФФФФФФФФФФФФФФФФФФФФФФ

                          кФФФФФФФФФФФФФФФФФФФФФФФФФП
ФФФФФФФФФФФФФФФФФФФФФФФФФФД TFC's Tips Of The Month УФФФФФФФФФФФФФФФФФФФФФФФФФ
                          РФФФФФФФФФФФФФФФФФФФФФФФФФй
                              From the Beginning

    Hello everyone,  and welcome to my little corner of the IceNet News.  I've
been graciously given this space each month  to  talk about something I happen
to be obsessed with, WWIV source code mods.  For those of  you that don't know
me, I am  The  Flying  Chicken,  and  I  run  The  Insane Asylum BBS in Irving
(Dallas), TX.  I begin using WWIV sometime  in late 89, and started modding it
shortly thereafter.  Since  then, I have modded versions  4.11  thru  4.22,  I
currently host a support sub for WWIV mods, and I still create new mods when I
get the time.

    And now  that we have THAT out of the way, let's get down to business.  It
took me a few minutes to figure out where to start, as modding WWIV entails so
much; everything from compiling to editing  to  syntax  to  ideas to tips; the
list goes on  forever.   But since we are at the beginning  already,  why  not
start at the beginner level?!

    No, I won't bore you with the details about how to compile, or how to edit
your source files, nor will I attempt to explain the C language.  We will have
to assume from  this  point forward that you already know that.  But there are
some basics everyone should at least consider  when  modding  your WWIV source
code.


                      Keeping Your Source Compatible with
                           Wayne Bell and STRIP.EXE

    If you have scanned the source code for any length of time, you will begin
to see the  pattern  with  which Wayne Bell has coded his  program.   Not  all
programmers use this style, but it is concise and easy to read and understand.
In particular, notice  the lines that start in column one.  These lines are of
three types:  1)  compiler directives  such  as  #defines  and  #includes,  2)
function headers, and 3) comments, blank lines, and lines  with nothing but an
opening or closing  brace.  There  is  a reason that only these lines start in
column one.

    Wayne also  provides a program called  STRIP.EXE,  which  comes  with  the
source.  This program scans the source files that make up  the BBS and creates
a file of  prototypes  for  the  functions  it  finds.  The file it creates is
otherwise known as FCNS.H.  In order to  create  this  file, enter the command
MAKE FCNS in  your  source directory.  Your source will be  scanned,  and  the
header file created.  This  will not be done automatically, but should be done
whenever you add functions to your source.

    The STRIP program is efficient, but  not  very lenient.  In particular, it
expects very little in column one, other than what I mentioned  above.  If you
place text in column one, STRIP will think your code is a function header, and
include it while creating FCNS.H; certainly not what was intended. In fact, it
will cause compiler errors when you MAKE the BBS.  TIP:  Keep your code out of
column one.

    Another glitch in STRIP has to do with comments.  When modding your source
code, you should really consider commenting it in some fashion.  It allows you
to immediately identify  'foreign'  code,  and  can make life much easier when
installing mods a few months down the road.  STRIP will handle comments in all
cases except one.  When I add a function  to my source, I comment the function
header line itself, like this:

        void new_function(int num)              /* mod - new void */
        {
           ....

    Well, when  STRIP  sees  this  type  of  comment,  it   ignores  the  line
completely.  This will  not cause problems if the new function returns an int,
however any other return value will generate  a  compiler  message.  There are
two ways to correct this:  1) don't comment at the end of  the function header
line, place the  comment on the line above instead;  2) if you want it, I have
a fix available.  See the note at the end  of this column for more information
about it.


                       You Want Me To Back Up My Source?

    The last  thing  I  want  to cover in this edition is  probably  the  most
important part of  modding  WWIV.   Backups.   I  cannot  begin  to stress the
importance of backups of some kind.  Backups  can  be  simple  ZIP'd copies of
your source and  executables,  or  more  complex forms of backups;  it  really
doesn't matter; but choose a regimen and stick to it.

    What should   you  backup?   Everything  in  your  source  directory,  for
starters. This includes the *.C, *.H, *.MAK,  *.ASM and any *.STR files.  Also
backup your *.EXE and *.COM files. Further, you might want  to keep a separate
copy of the  executables that you are actually running, so you can quickly un-
install mods if need be. I also backup up my USER.DAT, just in case.

    Here's a quick batch file you can use  to  backup your source.  In fact, I
use it on my system.  It will create a ZIP file that contains  a  current copy
of everything needed  to  compile your BBS.  You'll need to create a text file
in your source directory; I call it SAVE.BAT.  Place the following inside this
new file:

                   pkzip source -u *.c *.h *.mak *.asm *.str

    Once this batch file is in your source  directory,  simply  type  SAVE  to
execute it.  All of your WWIV source files will be ZIP'd  for  you,  safe  and
sound.  Further, if  you only change a few *.C files, only those files will be
re-ZIP'd when you execute it, so you can create quick backups often.

    I run SAVE before each mod I install.   This allows me to un-install a mod
quickly, with one simple command:

                               pkunzip source -o


                                   Curtains

    Well, why  don't we call that our first session for this  month.   In  the
future, I will  go  into more detail with MAKE, FCNS.H, *.STR files, and other
items mentioned above, in addition to  all  kinds  of tips and tricks for WWIV
modders.  We'll examine ARs, exemptions, bit operations, and  so  much more in
future editions, and I'll even give you some mods to help enhance your system.
So go play with your source for a while, and I'll see you next month.

                              The Flying Chicken

                             The Insane Asylum BBS
                                IceNet 1 @2456

    If you'd  like  a  copy of my STRIP.EXE program, I have it written up in a
mod called TFC026.ZIP.   I  have  Auto-Sysop  Validation,  and  am  Snarfable.
Please feel free to grab yourself a copy.

ФФФФФФФФФФФФФФФФФФФЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭФФФФФФФФФФФФФФФФФФФ


                            кФФФФФФФФФФФФФФФФФФФФП
ФФФФФФФФФФФФФФФФФФФФФФФФФФФФД  Mod Of The Month  УФФФФФФФФФФФФФФФФФФФФФФФФФФФФ
                            РФФФФФФФФФФФФФФФФФФФФй


ЩЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЛ
К WWIV Desc    : Print a much more detailed, cosmetic pending list.         К
К                                                                           К
К Filename     : TB11-422.MOD          Mod Version       : 1.0х             К
К Author       : чhe сishop            1st File Modified : NETSUP.C         К
К  1st Net     :  1@7.WWIVnet          2nd File Modified :                  К
К  2nd Net     :  1@7.ExpressNet       3rd File Modified :                  К
К  3rd Net     :  1@4550.IceNet        4th File Modified :                  К
К  4rd Net     :  1@7.WWIVweb          5th File Modified :                  К
К  5th Net     :  1@7.FUNnet           6th File Modified :                  К
К                                                                           К
К WWIV Version : 4.22                  Date(Happy Easter): 11 Apr 1993      К
К                                                                           К
К Difficulty   : лБББББББББ            (Let your dog do it).                К
К                                                                           К
К Description  :  This mod replaces the old pending list with one that has  К
К                a lot more information presented in a much more cosmetic   К
К                form.  It is based directly on MYMOD030 by Keith Cohen,    К
К                1@9969, although it fixes a few problems with lining up    К
К                the boxes in that mod.  In addition, it also prints the    К
К                number of fails for each connect, which will tell you      К
К                at a glance how often your BBS is calling out.             К
К                                                                       чс  К
ШЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭМ

This is what the pending list format now looks like:
ЩЭЭЭЭЭбЭЭЭЭЭЭЭЭЭЭЭЭЭбЭЭЭЭЭЭЭбЭЭЭЭЭЭЭЭЭЭбЭЭЭЭЭЭЭЭЭЭбЭЭЭЭЭЭЭЭбЭЭЭЭЭЭбЭЭЭЭЭЭЭЭЭЭЭЛ
К Ok? Г Network     Г  Node Г     Sent Г Received Г  Ready Г FailsГ  Elapsed  К
ЬЭЭЭЭЭиЭЭЭЭЭЭЭЭЭЭЭЭЭиЭЭЭЭЭЭЭиЭЭЭЭЭЭЭЭЭЭиЭЭЭЭЭЭЭЭЭЭиЭЭЭЭЭЭЭЭиЭЭЭЭЭЭиЭЭЭЭЭЭЭЭЭЭЭЙ

кФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФП
Г Legend:                                                                   Г
Г                                                                           Г
Г  = Leave this line alone                                                  Г
Г  + Add this line                                                          Г
Г  - Delete this line                                                       Г
Г  | Change this line                                                       Г
Г  . Many statements elapse here                                            Г
РФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФй

кФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФП
Г Disclaimer:                                                               Г
Г                                                                           Г
Г       LIVE WITH IT.                                                       Г
РФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФй

ФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФ
Step 0:   Back it up.
ФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФ

ФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФ
Step 1:   Open up NETSUP.C.  Comment out the old print_pending_list and
           replace it with this one.
ФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФ

void print_pending_list(void)
{
  int i,i1,i2,nn,num_ncn,num_call_sys,h,m,se;
  char s[255],ch,s1[81],s2[81],s3[81],s4[81],s5[81];
  long l,l1;
  net_call_out_rec *con;
  net_contact_rec *ncn;

  if ((net_networks[0].sysnum==0) && (net_num_max==1))
    return;

  time(&l);

  nl();
  nl();
  pl("                      Ф> Network Status <Ф");
  nl();


pl("ЩЭЭЭЭЭбЭЭЭЭЭЭЭЭЭЭЭЭЭбЭЭЭЭЭЭЭбЭЭЭЭЭЭЭЭЭЭбЭЭЭЭЭЭЭЭЭЭбЭЭЭЭЭЭЭЭбЭЭЭЭЭЭбЭЭЭЭЭЭЭ
ЭЭЭЭЛ");         /* fix word wrap */
  pl("К Ok? Г Network     Г  Node Г     Sent Г Received Г  Ready Г FailsГ
Elapsed  К");    /* fix word wrap */

pl("ЬЭЭЭЭЭиЭЭЭЭЭЭЭЭЭЭЭЭЭиЭЭЭЭЭЭЭиЭЭЭЭЭЭЭЭЭЭиЭЭЭЭЭЭЭЭЭЭиЭЭЭЭЭЭЭЭиЭЭЭЭЭЭиЭЭЭЭЭЭЭ
ЭЭЭЭЙ");         /* fix word wrap */

  for (nn=0; nn<net_num_max; nn++) {

    set_net_num(nn);

    if (!net_sysnum)
      continue;

    if (!net_networks[net_num].con)
      read_call_out_list();

    if (!net_networks[net_num].ncn)
      read_contacts();

    con=net_networks[net_num].con;
    ncn=net_networks[net_num].ncn;
    num_call_sys=net_networks[net_num].num_con;
    num_ncn=net_networks[net_num].num_ncn;

    for (i=0; i<num_ncn; i++) {
        i2=-1;
        for (i1=0; i1<num_call_sys; i1++)
          if (con[i1].sysnum==ncn[i].systemnumber)
            i2=i1;
        if (i2!=-1) {
          if (ok_to_call(i2))
            strcpy(s2,"Yes");
          else
            strcpy(s2,"---");

      if (ncn[i].lastcontactsent) {
        l1=l-ncn[i].lastcontactsent;
            se=l1%60; l1=(l1-se)/60;
            m=l1%60;
            h=l1/60;
        sprintf(s1,"%02d:%02d:%02d",h,m,se);
      } else {
        strcpy(s1,"  NEVER! ");
      }

        ltoa((((ncn[i].bytes_sent)+1023)/1024),s3,10);
        strcat(s3,"k");
        ltoa((((ncn[i].bytes_received)+1023)/1024),s4,10);
        strcat(s4,"k");
        ltoa((((ncn[i].bytes_waiting)+1023)/1024),s5,10);
        strcat(s5,"k");

           /* sprintf(s,"   К %-3s Г %-11s Г %5u Г %8s Г %8s Г %8s Г %9s К", */
            sprintf(s,"К %-3s Г %-11s Г %5u Г %8s Г %8s Г %6s Г %4d Г %9s К",
              s2,
              net_name,
              ncn[i].systemnumber,
              s3,
              s4,
              s5,
              ncn[i].numfails,  /* added */
              s1);
          pl(s);
        }
      }
  }


  for (nn=0; nn<net_num_max; nn++) {

    set_net_num(nn);

    if (!net_sysnum)
      continue;

    sprintf(s,"%sDEAD.NET",net_data);
    i=open(s,O_RDONLY | O_BINARY);
    if (i>0) {
      l=filelength(i);
      close(i);
      ltoa((((l)+1023)/1024),s3,10);
      strcat(s3,"k");
      sprintf(s,"К --- Г %-11s Г DEAD! Г -------- Г -------- Г %6s Г ---- Г
--------  К",net_name,s3);   /* fix word wrap */
      pl(s);
    }
  }


pl("ШЭЭЭЭЭЯЭЭЭЭЭЭЭЭЭЭЭЭЭЯЭЭЭЭЭЭЭЯЭЭЭЭЭЭЭЭЭЭЯЭЭЭЭЭЭЭЭЭЭЯЭЭЭЭЭЭЭЭЯЭЭЭЭЭЭЯЭЭЭЭЭЭЭ
ЭЭЭЭМ");                     /* fix word wrap */
  nl();
  if (!useron)
    pausescr();
}

ФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФ-
Step 2:  You're done!  Email me if you use this mod!
ФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФ-

                                            Ф* чс (Apr '93) *Ф

ФФФФФФФФФФФФФФФФФФФЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭФФФФФФФФФФФФФФФФФФФ


                      P R O G R A M E R 'S    C O R N E R
                      ФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФ
                            кФФФФФФФФФФФФФФФФФФФФП
ФФФФФФФФФФФФФФФФФФФФФФФФФФФФД  Quick Basic Tips  УФФФФФФФФФФФФФФФФФФФФФФФФФФФФ
                            РФФФФФФФФФФФФФФФФФФФФй

                         QuickBASIC Tips and Tricks #1
                                 by Alex Mead

  So you've  done  it.  You've made the jump from QBASIC (free with MS-DOS) to
QuickBASIC.  You probably think that the big deal was getting a compiler, Well
there's a lot more to it than that.   QuickBASIC  has  a  whole  host  of  new
features that every QuickBASIC programmer should be familiar with.  Before you
go and memorize every command the language has to offer (not difficult
because we QuickBASIC  programers  have the one language that  actually  reads
like English) you'd  be  doing  yourself  a  GREAT  service  by  familiarizing
yourself with the QuickBASIC Editor.
  The moment you set foot inside the QuickBASIC environment I suggest that you
go right to the options menu and select full menus, because that is where your
power is hiding.
  Now that you've got the power to make  programs  larger  than  64K, you will
also find that you have the option to start linking program  modules together.
This can be done with the new commands in the File Menu.  Also new in the file
menu is the ever necessary DOS Shell option.
  For some  reason  they left the undo command out of QBASIC, but now that you
have QuickBASIC, you can select UNDO,  and  undo  the changes you just made to
the line you're working on (it's come in handy more than a few times).
  In QuickBASIC  you  now have the power to include files  directly  with  the
'$INCLUDE metacommand, and therefore you get a nifty little view include files
option in your View Menu.
  Then of course there's the stuff you really bought QuickBASIC for... the new
options in the  RUN menu.  You now can compile your programs into .EXEs or you
can make them into programming libraries  to  be  used  over  and  over again.
You'll also find the Change COMMAND$ option which can be helpful when creating
a program that uses command line parameters.
  Perhaps just  as  importantly  however,  you have found  yourself  a  pretty
powerful debugger.  My  life  would  be lost without the Instant Watch option.
Also available, you can override the Error  handling  with the Break on Errors
option, and the History on option is new and often useful.
  Learn to use all of this and you will save even more time  than  you already
are by programming in QuickBASIC.

                              Support Shareware!
                             Alex Mead 'Tha AMPro'
                                 IceNet 7@7660

ФФФФФФФФФФФФФФФФФФФЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭФФФФФФФФФФФФФФФФФФФ

                             кФФФФФФФФФФФФФФФФФФП
ФФФФФФФФФФФФФФФФФФФФФФФФФФФФФД  Turbo C++ Tips  УФФФФФФФФФФФФФФФФФФФФФФФФФФФФФ
                             РФФФФФФФФФФФФФФФФФФй

                              "The Way I 'C' It"
                                Pointer Basics
                           By Daarkhan 2@7654 IceNET
                                  14 May 1993

    Having been  asked  to  write a column for IceNET News on the subject of C
programming, I found myself wondering what  to  write about. I have a tutorial
series which I'm working on ("Learning C", which has its  own  message  base),
but that's an  ongoing  learning  experience. I need something short and sweet
which people can benefit from right away. (If you are a novice programmer, and
want to learn C, get a hold of my tutorial series.)

    So, I thought, and I thought, and I  thought. Now, it's one day before the
deadline, and I think I've finally figured what to write about.  It seems that
the subject on  which  I've  received  the  most  Email  on,  and  that  I see
programmers having most problems with is that of the dreaded POINTER. So, I'll
dedicate this article on pointers.

    Before I start, however, a little disclaimer.  I do not consider myself to
be the world's  greatest  programming  authority.  I  am   a   self-taught   C
programmer, and I  am  a  major  in  Computer  Science, but I do make mistakes
(usually my compiler nails me, however). I probably won't compile and test all
of the code which I post here, but it  should  be  correct.  If  not,  someone
please Email me, and I'll post an addendum to next month's column.

    What is a pointer? Basically, a pointer is a variable,  itself, that holds
the memory address  of another variable or object.  Think of it like a network
Email forwarding number (something with  which  I'm sure you're all familiar).
If you have an account on one system, and want to have your Email from another
system sent there, you change the default setting so that  system  2 sends (or
POINTS TO) system  1. Then, every Email reference to you on system 2 will send
your mail to system 1.

That's exactly how pointers work. If you have a variable

     int i;

and declare a pointer to that variable

     int *p;

     p = &i;

the pointer 'p'  now holds the memory  address  of  the  variable  'i'.   Easy
enough? Let's take a look under the hood of your machine. A favorite method of
showing what this looks like that an instructor of mine uses goes like this:

    Let's take a look at a part of your computer's memory.  The  numbers  here
are completely arbitrary,  and  are  used only for example, but we'll start at
memory address 1000.


               Address           Value
     ---------------------------------------
               1000                ?
               1002                ?
               1004                ?
               1006                ?
               1008                ?

    Ok, let's  say  that  this is a segment of your computer's  memory  before
you've done any  initialization  or  declarations or whatever. Whatever values
are there are probably just junk.

First, we want to get an integer and call it 'i'. We'll declare it as normal:

     int i;

    Now, our memory looks the same, but  the  computer  will  reserve a little
chunk of that (2 bytes for most compilers) to store the integer we refer to as
'i'.  We'll set the value of 'i' to equal 20:

     i = 20;

and take a look at our memory map:


               Address        Value
          =======================================
               1000              20              i
          =======================================
               1002                ?
               1004                ?
               1006                ?
               1008                ?

    Are you with me so far? We haven't  used  any  pointers  yet, however. All
we've done is declare an integer and set its value.  Now, let's add a pointer.
I want to declare an integer pointer 'p':

     int *p;

    Now, what's going to happen, is that the compiler needs  a  place to store
the data for this pointer, so it will grab some space (usually 4 bytes for int
pointers) and call that location 'p'.  Our memory map now looks like this:


               Address            Value
          =======================================
               1000               20              i
          =======================================
               1002                ?              p
               1004                ?
               1006                ?
               1008                ?

    Same as before, however now there is a 4 byte block reserved  for  'p' (it
will be 1002 - 1006). Because 'p' is a pointer, this memory location will hold
ANOTHER MEMORY LOCATION  within  it.  To see how this works, let's execute the
call:

     p = &i;

    Now, the ADDRESS of 'i' has been assigned to 'p'. Let's take a look at our
memory map now...


               Address            Value
          =======================================
               1000                 20             i
          =======================================
               1002                1000            p

               1004
          =======================================
               1006                ?
               1008                ?


See? 'p' now  has the LOCATION of 'i' stored in it. Now, it is possible for us
to access the information in 'i' THROUGH 'p' in a method called INDIRECTION.

    We can see what's stored in 'i' two  ways.  First,  we  can use the method
that I'm sure all of you are familiar with:

     printf ("%i",i);

and get the result of

                                             20

We can now also access this information like this:

     printf ("%i",*p);

                                             20

    Here's how it works: by adding the asterisk before  'p'  in  the  call  to
printf(), we are  saying,  "print the VALUE POINTED TO BY 'p'." Whatever is at
the address at which 'p' points to is referenced and printed.

    Well, I don't quite know how long  to  make  these articles, as this is my
first time writing for IceNET News, so send me your suggestions.  Should  they
be longer, shorter,  etc.?  I  need feedback! Tell me what you want to know. I
love getting your Email. Be sure to check  out the new chapter coming out soon
in the Learning C Tutorials.

                                  Until then,
                                   Daarkhan

ФФФФФФФФФФФФФФФФФФФЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭФФФФФФФФФФФФФФФФФФФ
 
                           Feature BBS of The Month
                           ФФФФФФФФФФФФФФФФФФФФФФФФ

Editors Note [I  will start with my BBS seeing this idea came upon us too late
to get information from others....]


BBS Name: Starpoint Technology Station

SysOp Name: Special Agent

CoSysops: Bro Jack, Fini, Darkwing, oTTo Parts, and Mad Man.

System Equipment: We are running  a  386  25mhz unit, a Zoom 14400 Modem,
100 megs of  hard  disk  space, and a Tandy CD-Rom with over  8600  files  for
downloading.

When did you first start bbsing?

I first started  BBSing  6  years  or  so ago. I remember the days well. I was
using an old Commie 128 with a 300 baud  modem. I was lost in the IBM world so
a friend of mine told me about Tres^Angle BBS which was run  on  an Apple ][ E
at only 300  baud. The first days of BBSing were lots of fun for me but not my
fellow BBS'ers. I was too arrogant and  looked  for  trouble. Well I caught on
fast and knew I had to change my ways and with a new handle  I  came back onto
the scene. This  time  with  a  Apple ][ E and a 2400 baud modem. I used VT100
emulation to call the IBM BBS's. A year  ago I purchased my first IBM machine.
I never knew the real world, wow color was so neat...  I did  not realize what
I was missing not having color and ANSI.

What caught your attention, that later made you decide to start your own BBS?

My situation  is unique, I had a friend ask me to run his BBS for him, at
the time I knew nothing. He gave me the docs and said learn!! So it was really
nothing that caught my attention as being a user that made me want to start my
own BBS.

When did you start your BBS?

STS was up and running on July of 1992, but in January of 1993 I purchased the
machine, moved it to my house with my own  phone  line and then that is when I
really first started it. The BBS has grow greatly. It averages over 40 percent
usage everyday. With 60 percent on a weekday not being out of line.

When did you join IceNet?

I can't remember when I joined IceNet but I think it was  in  Dec  of  92 just
before I took over ownership of the BBS.

Why did you join IceNet?

I saw many good subs on the 35 or so BBS's I called every week and said I must
join that net.  I  am  so  glad  that  I did. Jim has been so helpful to me in
running my BBS, although he has not logged  on  yet,  haha. He went out of his
way to help me set up the net, even going so far as calling  me  voice to make
sure things were  going  well.  Along  with  Jim you other sysops have been so
helpful. All my questions in the beginning  were  answered  fast  and  in most
cases I had 3 or 4 pieces of mail waiting for me with the answers. Yes joining
IceNet was a great move on my part.

What is the theme or purpose of your BBS?

STS is a multifaceted BBS. We do subscribe to over 20 some  Tech based subs so
I guess the  main  theme  is Technology. The fasted moving subs on the BBS are
the Christian ones in nature though. The  main  purpose  of the BBS is to be a
help to other  people  and to be a place where people can  share  their  views
without getting blasted.  The  rules  on  the  BBS  are  simple, keep it clean
language wise and don't dish it out if you can't take it.

I also take care to see that we have most  of  the  WWIV utility type programs
online for downloading and have a good selection of WWIV online  games. I kind
of am an  unofficial WWIV support BBS. We also enjoy being a distribution site
for shareware authors. We currently have  Master  Software  online  and we are
AMPro Distribution site #3.

What makes your BBS different or unique from others?

Well one thing  for  sure is you will never here me call  anyone  a  leech  or
putdown those who  only  like  to  play games. I have the CD Rom for people to
download files. I  hear  too  many  SysOps   complaining   about   people  only
downloading files. Hey, that is what I got the files for, to be downloaded.  I
also have online games to play, not to take up space. Different,  hum, well we
like people to  share  their  views openly. If they disagree with me so be it.
Everyone is entitled to his her own thoughts,  opinion  and feelings. Who am I
to say that can't say that here. In that area I am different than many. I have
strong views of my own and I expect the same from them and  get  it. We have a
great BBS for  debate.  I  have not seen one fight yet from people who call my
BBS and get involved with our many heated subjects. That is unique. I see much
fighting in BBS land but we are spared it here and I am thankful.


Running a BBS takes much time and effort, what makes it worth it for you?

One of the things I love about running  the  BBS  and  what makes all the work
worth it is  all the people I get to meet and talk to on a  daily  basis.  The
feeling that all are equal is great...
 

  кФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФП
  Г IceNEWS is an independent newsletter published monthly as a service to Г
  Г IceNET, its Sysops and users.  The opinions & reviews expressed herein Г
  Г are the expressed views of the respective writers. All Rights Reserved.Г
  РФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФй