home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / prog / c / afixsrc.lha / RogerSrc.Notes < prev   
Text File  |  1993-03-07  |  8KB  |  122 lines

  1. NOTE: Source released by Roger Walker at the request of Russel Miranda.
  2. Below is his original description of the source flow...
  3.  
  4.  
  5. Quickly, theory of operation stuff...  lets hope I can explain it!
  6.  
  7. It starts up by putting out the nifty little title with my name... it goes
  8. into one of my command line parsing routines (admittedly, not my favorite one,
  9. which uses a right-to-left method of parsing the line.. but I'm babbling!) and
  10. sets one or two global variables.  It goes then into some task renaming stuff
  11. I ripped from Jon's door exaples, but instead it does it RIGHT, by preserving
  12. the pointer to the old task name, to restore when it's done.  StartLink()
  13. hooks it into ParCon for the location of the BBS's config structure (see the
  14. included ParConLnk.h file)  I then allocate some of the string variables I
  15. use, because I was afraid of running over my stack space (I hate for people to
  16. be forced to raise the stack!).  The lprintf() statements work like a
  17. primitive printf() statement that instead goes to the log file.  The log file
  18. is purposely opened and closed for each write, ensuring that it is closed when
  19. the program has the greatest chance of failing (and therefore cutting down on
  20. HD errors, and allowing you to see where it failed).  Several other strings
  21. are allocate, as are some work variables (newadr, orignode).
  22.     The config file is read next... That is an experience in itself...,
  23. but I'll try to explain it here... You of course can figure most of it out,
  24. but I'll explain MY functions.  GetLine(FILE *,char *) is a function that
  25. reads a line out of a text file (just a line, up to 255 characters) and alters
  26. the line so that it contains no leading whitespace, no trailing whitespace,
  27. no characters after a ';', and no blank lines (they are skipped).  It will
  28. return a zero if the file has ended, or a non-zero if EOF was not hit.  Nearly
  29. all of the funtions with the word Add in them add items to linked lists... of
  30. which there are several.  I was linked-list happy, and I prefer them over
  31. arrays and things like that which are always the same size, and leave you with
  32. limits on the amount of data.  In any case... the lists are as follows, I'll
  33. attempt to explain...
  34.  
  35. The area list... this contains all the vital info on each area, such as A) a
  36. list (yes another) of the systems receiving this echo (hence the unlimited
  37. nature of AreaFix and MailStorm to send echos to various systems), the Paragon
  38. area number, and the areatag... (was 16, I would increase to say 60 or so if
  39. I were you, it's such a small amount of space anyway!) These are added to the
  40. list whenever an AREA x line is hit in the ReadCfg function.  The next is the
  41. alias list... since it's not that important, it wasn't really necessary to
  42. make this a linked list, but why not?  It stores only other names by which
  43. AreaFix may be known.  These are the ALIAS lines (surprisingly enough!)
  44. Following that is the list of passwords.  This list contains information on
  45. the systems that are allowed to perform an areafix session, such as the
  46. address, password, and the security level.  When making this one, though,
  47. like that alias list, I was somewhat new to lists and put the nextXXXX pointer
  48. at the end... in all actuality is should be the first variable in the
  49. structure, but shoot me, it works.  The pass structures go with the PASS
  50. lines in the config.  The protection structures make up the next list, and
  51. they go with the PROTECT lines in the config file.  They contain the areatag
  52. and protection level of each echo you wish to put above the access of other
  53. systems. (note the nextXXXX line is last again... sigh...8-D)  The next list
  54. is the request list.  This list contains an echo tag name, and a list of
  55. systems who wish to connect to it upon its arrival.  This is used in
  56. conjunction with the AreaFix.QUE file, and is described later.  Another list
  57. like this is the fwdsys list, which is used for the request forwarding also.
  58. This list has a fwdarea list hanging off of it.  Back to the config file.
  59. As lines are read from the file, the lists are built in memory.
  60.     GetHiMk() lets AreaFix know where to start its search for netmail,
  61. it reads in the high water mark off the disk and ensures that the area number
  62. has not been changed, as that would most likely mean the watermark is corrupt.
  63.     InputAreas() reads in the Areas.CTL file.  It is parsed with GetLine
  64. also, so all comments are stripped and an internal linked list representation
  65. of the list is built.  The address of 'change' is passed over, so if there is
  66. an invalid area in the Areas.CTL, AreaFix will know that a new one must be
  67. written out.
  68.     BuildReqLst() is a function that reads in the .QUE file, and builds
  69. the internal representation of that in the request list mentioned above.
  70.     Finally, the meat of the program... here AreaFix starts the scan up
  71. to the highest message in the area... It opens each message, and checks the
  72. header to find if the message is addressed to one of its aliases (AliasMatch)
  73. and if so, it double checks to find if the message is addressed to this system
  74. (why someone would pass an AreaFix through another system, I'll never know...
  75. but it's worth checking for)  If it has a message, it immediately opens the
  76. reply message in a temp file (one that is hopefully unique, it uses the task
  77. ID number as part of it, so it should be unique for each AreaFix running).  It
  78. then processes the subject line, checks the password, and sets several
  79. flags for the commands the message's author wishes to use.  Then, it steps
  80. through the message line by line and writes a reply for each line.  It acts
  81. upon the internal lists appropriately removing or adding systems from area
  82. lists, or resetting the High Msg Sent pointer if a rescan is requested.
  83. When it hits the end of the message (or the tear line), it drops out of the
  84. loop and gives a summary of the areas the system is connected with, acts on
  85. a query, and then closes the message (which is then renamed to an actual
  86. message).  If the message called for an area list, the list function is
  87. called which will convert a file into a message.  The message is closed,
  88. and the cycle repeats until there are no more messages in the search area.
  89. The high water marks are saved, then any forwarded requests are sent (for
  90. any info on this black magic with the fwdsys and fwdarea lists, just
  91. ask...).  The Que is processed (it checks to see if any of the areas
  92. previously requested now exist in the paragon config, and removes them from
  93. the que, announces their presence, and auto-connects them.  Any not removed
  94. are saved to the .QUE again, and the link is severed with ParCon.  The
  95. Areas.CTL file is saved out to disk (if there were any modifications), and
  96. the log is written.  There... it's done.  Hope I didn't lose you anywhere,
  97. I've never written docs like THESE before!
  98.  
  99. In any case, I'd like to stress again that you can give me a call voice at
  100. the above number... and I'd be glad to help you out if something is
  101. unclear.  If you have never done any linked lists (some people don't do
  102. them, others shy away from them because they deal heavily with [dare I say
  103. it?] pointers.  I love them... even more than queueueueues (ok... so
  104. there's a few extra letters in there...).  They are the ideal way to handle
  105. an unknown quantity of data efficiently.
  106.  
  107. Hope this file has been of some help... it's sure been fun writing it
  108. though!
  109.  
  110. )Russ
  111.  
  112. Russel Miranda
  113. Sysop of The Enterprise BBS of Bushkill, Pa.  (717) 588-7636
  114. FIDO: (1:268/106.0), 14.4Kbps HST, ADS.  Home of AreaFix, AmigaTick,
  115. MailStorm, SectorWars, UserPrt, CompList, TopTen, WaterMark, ad infinitum
  116. (ad nauseum?  8-D) with more to come.  Place your software orders now, no
  117. reservations, takeout welcomed!
  118.  
  119. NOTE: Current Address as of 07-Mar-93 is: Amigaman@esu.edu. The fido addresses
  120. listed above are obsolete (rw)
  121.  
  122.