home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / Dloads / OTHERUTI / WWIV412S.ZIP / WWIVSOUR.DOC < prev    next >
Text File  |  1990-08-05  |  15KB  |  371 lines

  1.                     WWIV Source Documentation
  2.                 Copyright (c) 1988 by Wayne Bell
  3.  
  4.  
  5.  
  6. If you have this file, you should also have the source code for
  7. WWIV.  This means you have sent in a donation.  The source code
  8. is ONLY available to people who have sent in donations, NOT FOR
  9. OTHER PEOPLE.  As can be seen in the notice at the beginning of
  10. all the source files, DISTRIBUTION OF THE SOURCE BY ANYONE EXCEPT
  11. ME IS PROHIBITED.  Even if your best friend mails me a check
  12. right before your eyes, he must get the source from ME, you may
  13. not give him a copy.
  14.  
  15. If you have somehow gotten ahold of this WITHOUT either
  16. downloading it from my BBS, or having me send you a copy, then
  17. you are hurting the cause of good software.  If it turns out that
  18. it is not possible to control distribution of the source by
  19. reasonable means, you will probably find that the source WILL NOT
  20. BE AVAILABLE for future versions.
  21.  
  22. The source is being given out so that you may modify the BBS to
  23. suit your own needs and desires, for your system only.  You may
  24. not give out a copy of your modified program to anyone (either
  25. the source or compiled).
  26.  
  27. This does not mean, however, that you can't distribute CHANGES. 
  28. You may not distribute a copy of WWIV that you have compiled,
  29. ever, or any major portions of the source code.  You can,
  30. however, distribute changes you made to the source, so that
  31. other people with the source may make the same changes.  
  32.  
  33. For example, suppose you made a modification to function
  34. sublist() in BBS.C, and wanted to allow other people to make the
  35. same modification.  Now, since function sublist() is under 50
  36. lines (rather short), you may just go ahead and distribute the
  37. entire procedure, telling people they need to replace function
  38. sublist() in BBS.C with your new one.
  39.  
  40. Suppose, on the other hand, that you have made modifications to
  41. function scan() in MSGBASE.C.  Since function scan() is around
  42. 350 lines, it is unlikely you will have made modifications to the
  43. entire thing.  Most likely, it will be just a block of code,
  44. maybe 50-75 lines long, that contains the bulk of your changes. 
  45. Just pull out those blocks that you have made changes to, and
  46. distribute those, along with a short note telling which lines to
  47. delete, and where to insert your new ones.
  48.  
  49. Suppose, instead, that your modification required you to insert 3
  50. new variables, and put in a few lines of code in 4 of the source
  51. files.  DO NOT JUST DISTRIBUTE ALL THE FILES YOU CHANGED. 
  52. Instead, document where you made the changes, and list where to
  53. insert (or delete) the few lines of code you did change.
  54.  
  55. If your modifications would require you to distribute over 100
  56. lines of the initial BBS code, you should contact me before you
  57. distribute it, sending me a copy, and asking if it's OK.  Most
  58. likely it will be.
  59.  
  60. If you have any questions about this policy, or how it might
  61. apply to you, feel free to contact me on my system at 213-208-
  62. 6689 300/1200/2400/24 hrs.
  63.  
  64. You may wonder why I have put such restrictions on distribution
  65. of changes.  The main reason is the wreckless abandon some people
  66. have exhibited in just doing whatever they damn well pleased with
  67. earlier versions of WWIV.  I've heard of people making changes to
  68. the code, inserting profanity in comments throughout the program,
  69. and distributing that as if it were a perfectly normal copy of
  70. WWIV.  This is what I want to prevent.  
  71.  
  72. As long as your changes don't contain a significant portion of
  73. the BBS source in them, I will probably have no problems about
  74. your distributing them.  But, do check, BEFOREHAND.
  75.  
  76. Also, any changes that you do distribute, I'd appreciate it if
  77. you'd upload a copy to my system, so that there can be a sort of
  78. "central area" where people can find things.
  79.  
  80. About INIT.EXE.  As you can see, I'm not distributing the source
  81. to the init program.  See the main docs as to the reason why.  If
  82. you feel you really NEED the source to init, and have a good
  83. reason why, contact me, and we'll try to work it out.
  84.  
  85.  
  86. /****************************************************************************/
  87.  
  88.  
  89. There.  Now that I'm through with that, I can get about describing the
  90. source a bit.  First, how to set everything up so that it compiles.
  91.  
  92. WWIV will compile correctly under Turbo C v1.5, Turbo C v2.0, and Turbo
  93. C++ v1.0.  It will not compile correctly under Turbo C v1.0, and it will
  94. not compile correctly under Microsoft C, or any other C compiler.  Using
  95. TC++, you get to use overlays, and a more powerful make utility, and
  96. everything is really a lot nicer.  Therefore, I really would suggest
  97. that people upgrade to TC++, even if you don't use any of the C++
  98. extensions.
  99.  
  100. Needless to say, that creates quite a few different environments that
  101. everything has to work under.  Therefore, I am NOT going to describe how
  102. to get WWIV to compile under the Turbo C integrated environment.  There
  103. are just too many things you have to do, and too many ways you can mess
  104. up, especially if you are not very familiar with it.  So, if you want to
  105. compile using the integrated environment, you're on your own.
  106.  
  107. My preferred method of compiling is therefore using the make utility.
  108. Once you make a few simple modifications to the file 'makefile.mak',
  109. everything will magically compile optimally under any version of Turbo
  110. C, including using overlays if you are using TC++.  Note, however,
  111. that if you upgrade from TC1.5/2.0 to TC++, you will have to remove all
  112. your .obj files and re-compile all of them to allow the overlay system
  113. to work correctly.
  114.  
  115. First, un-zip the WWIV source archive into a WWIV dir.  DO NOT put it in
  116. your Turbo C directory.
  117.  
  118. If you boot up an editor and edit 'makefile.mak', you'll find that the
  119. first section looks like:
  120.  
  121.  
  122. #############################################################################
  123. #
  124. # Specify directories to use
  125. #
  126.  
  127. !if $(__MAKE__) >= 0x0300
  128. TC  = d:\tcpp
  129. !else
  130. TC  = c:\tc
  131. !endif
  132.  
  133. OBJ = obj\\
  134.  
  135. EXE = exe\\
  136.  
  137. The first part up there attempts to determine if you are using TC1.5/2.0
  138. or TC++.  You will need to edit the appropriate "TC = " line to point to
  139. your Turbo C directory.  If you have Turbo C++ installed in c:\cpp, then
  140. set the first TC line to be "TC = c:\cpp".  If you have Turbo C v2.0
  141. installed in "d:\c", then set the second TC line to "TC = d:\c".
  142.  
  143. The next statement is "OBJ = obj\\", which points to the directory to
  144. put the object files (.obj) in.  I prefer to put them off in a separate
  145. directory, since you don't do anything with them directly.  To use this
  146. setup, from your main WWIV directory, type "md obj" and all the .obj
  147. files will go there.  If you want them to just stay in the same
  148. directory as the source code, then change the line to "OBJ = .\\"
  149.  
  150. The final line you will have to worry about is "EXE = exe\\".  This
  151. specifies where to put the executables (bbs.exe and return.exe).  You
  152. will most likely want to leave those in the same directory as the source
  153. files, so change it to "EXE = .\\"
  154.  
  155. Now, whenever you want to re-compile any changed files and re-link the
  156. executables, go to the WWIV source directory and type "make".  If
  157. everything is set up correctly, the source should compile without any
  158. errors or warnings.  If you have any errors or warnings, you have done
  159. something wrong.  Go back and check to ensure that you have the
  160. directory variables set up correctly.
  161.  
  162.  
  163. Under TC++, I have an extra option in the makefile - it creates the
  164. fcns.h file based upon your source files.  To re-create the fcns.h file
  165. just type "make fcns".  This is what I have used to create it in the
  166. first place, so if you run it on an unmodified copy of the source, it
  167. should end up being the same.  Additionally, if you add additional
  168. source files, this will include the prototypes from those files also
  169. (assuming, of course, that you use the same function declaration style
  170. that I do - the technique is pretty dumb, but it works).
  171.  
  172.  
  173.  
  174. /****************************************************************************/
  175.  
  176.  
  177. The rest of this document is to describe some general things about the
  178. source, and is not meant to describe how to use Turbo C.  If you need
  179. help with the TC integrated environment, look through the manual, and
  180. play around with it a bit.  Unfortunately, I haven't updated this
  181. section in a long time, and so most of the .c file descriptions are out
  182. of date.  The function and global variable declarations should still be
  183. fairly close, though.  If you have problems, try contacting a WWIV
  184. support system.
  185.  
  186.  
  187. Header files:
  188.  
  189. VARDEC.H - holds the type declarations and #define's for the BBS.
  190.  
  191. FCNS.H - holds most of the main function declarations (but not
  192. all).
  193.  
  194. VARS.H - Holds declarations for all global variables.
  195.  
  196. NET.H - holds declarations for WWIVnet.
  197.  
  198.  
  199. Main source files:
  200.  
  201. BBS.C - Main BBS files - main menu, main DL menu, and procedures
  202. to log on a caller.  If you add new functions to the main menu,
  203. you'll need to modify some procedure in BBS.C to have a call to
  204. execute it.
  205.  
  206. COM.C - Contains all the modem routines - input/output to the com
  207. port.  This also has all the combined com/screen routines - like,
  208. to output to both the screen and com port, the routine is in
  209. here.  ANSI interpretation is also in here, along with standard
  210. "input a line" functions.
  211.  
  212. CONIO.C - Contains console I/O routines, to output a character to
  213. the screen, and get a character from the keyboard.  You'll notice
  214. I do a lot of _AH=; geninterrupt(), instead of using the console
  215. I/O functions in TC 1.5.  This is because most of those functions
  216. weren't in 1.0, and I wrote these routines under TC 1.0.  Also,
  217. the code for top of screen data, and chat, and validating a user
  218. are in here, along with sysop key interpretation (f-keys).
  219.  
  220. NEWUSER.C - Obviously, contains info for logging on new users
  221. (and nothing else).
  222.  
  223. XFER.C - Contains most of the DL functions, anything from the
  224. transfer menu will be in here (but the actual transfer main menu
  225. is in BBS.C).
  226.  
  227. SR.C - Send/Receive files.  Internal and external protocols are
  228. implemented in here.
  229.  
  230. UTILITY.C - Utility functions, not expressly relating to the BBS. 
  231. Such as free disk space, time & date, initialization, reading &
  232. writing to the user list.
  233.  
  234. SYSOPF.C - Most of the sysop functions.  uedit, boardedit,
  235. diredit, chainedit, system status, validating a user, voting
  236. initialization.
  237.  
  238. SYSOPF1.C - More sysop functions.  Internal sysop editor,
  239. gfileedit (overflow from sysopf.c).
  240.  
  241. EXTRN.C - external program interface.  Runs external programs,
  242. but re-directs all I/O (through dos calls) to go to BBS routines
  243. instead of just to the console.
  244.  
  245. MSGBASE.C - Message base, e-mail.  Entering message, scan prompt,
  246. sending e-mail, posting, reading e-mail, multi-mail.
  247.  
  248. BBSUTL.C - Other BBS functions not relating to file transfer or
  249. mail/messages.  Gfiles, main menu get key function, inputting a
  250. line (for a message), logon, logoff, yourinfo, request chat,
  251. selecting colors.
  252.  
  253. BBSUTL1.C - overflow from bbsutl.c, mostly.  Rest of default
  254. section, sysop log, auto-message, bbslist, kill old e-mail, user
  255. list, voting, zlog, external programs.
  256.  
  257. If you don't see anything listed here, find whatever seems to be
  258. closest, and search that file.
  259.  
  260. Common functions:
  261.  
  262. char getkey() - waits for, and returns one character of input
  263.  
  264. void input(char *s, int len) - inputs len characters (uppercase
  265. only) to string s.
  266.  
  267. void inputl(char *s, int len) - same as input, but allows
  268. lowercase.
  269.  
  270. int yn() - returns 1 for yes, 0 for no.  C/R=no
  271.  
  272. int ny() - same as yn(), but C/R=yes
  273.  
  274. void ansic(int n) - selects a color (if user supports ANSI).  n
  275. is 0 to 7.
  276.  
  277. char onek(char *s) - pass it a string, and it allows the user to
  278. hit one key in the string, which it returns.  ie, you want
  279. Delete, Ignore, Retry, so you do onek("DIR"), and it will return
  280. D, I, or R.  If the user hangs up, it returns the first
  281. character, so if one option is Quit, have the Q first.
  282.  
  283. void prt(int i, char *s) - selects color i, prints string s,
  284. returns to color 0.
  285.  
  286. void nl() - does a carriage return/line feed - go to new line.
  287.  
  288. void print(char *s, ...) - pass one or more strings, they are
  289. printed.  Terminate list with null string, ie, print("You are
  290. ","here and"," now","") - DON'T terminate with NULL.
  291.  
  292. void prompt(char *s, ...) - same as print, but no cr/lf on end.
  293.  
  294. void pl(char *s) - prints string s, with a cr/lf on end
  295.  
  296. void outstr(char *s) - prints s, no cr/lf on end
  297.  
  298. void pla(char *s, int *abort) - prints s, allowing abort.  Pass
  299. pointer to an integer, if user aborts, *abort will be 1, and
  300. output is terminated.  You MUST initialize *abort to zero.
  301.  
  302. void outs(char *s) - outputs a string, to the screen only (not to
  303. remote user).
  304.  
  305. void tleft(int x) - updates time left display at top of screen. 
  306. if x is non-zero, the user will be hung up on if his time is
  307. expired.  If x is zero, time display will be updated, but user
  308. won't be hung up on.
  309.  
  310. void topscreen() - updates top of screen info.
  311.  
  312. char *mmkey(int n) - inputs data for the main menu.  see odc
  313. below.
  314.  
  315.  
  316.  
  317. global variables:
  318.  
  319. int using_modem - is non-zero if there is a remote user
  320.  
  321. int hangup - is non-zero if the user has hung up.  MUST BE AN
  322. EXIT CONDITION FOR ALL LOOPS THAT DO I/O.
  323.  
  324. userrec thisuser - holds information about the current user
  325.  
  326. int usernum - holds user number of current user
  327.  
  328. configrec syscfg - holds system configuration.  SHOULD NOT BE
  329. MODIFIED IN PROGRAM.  The data in here should be changed ONLY in
  330. init, the main BBS should use this as READ-ONLY.
  331.  
  332. statusrec status - holds current stats information.
  333.  
  334. char odc[81] - If you want to have an input like the main menu
  335. (ie, certain characters mean get a second character, ie, you hit
  336. O at main menu, it goes right to that function, hitting / will
  337. get another character), set odc to a string containing the
  338. characters you wish a second character for, then call mmkey(2) -
  339. will return a pointer to a string for the data entered.
  340.  
  341. ie, if you want to enter a number 1-19, you have to get a second
  342. character if the user hits one, so you'd say:
  343.  
  344. char *ss;
  345.  
  346. strcpy(odc,"1");
  347. ss=mmkey(2);  
  348.  
  349. Then ss can point to a string "1", "5","15","1X", "G","19", etc.
  350.  
  351.  
  352. char curspeed[80] - string holding current baud rate in use, can
  353. be "KB","300","1200","2400","9600", or "19200".
  354.  
  355. char crttype - screen mode currently active (7 means monochrome
  356. dispaly).
  357.  
  358.  
  359.  
  360. OK, that's all I can think of for now.  Any questions/comments,
  361. please f-back me on my system, 213-208-6689 300/1200/2400/24 hrs. 
  362. Anything you think I left out or could expand upon more, tell me,
  363. and I'll have that in the next version of the source docs.
  364.  
  365.  
  366. Wayne Bell
  367. Box 636
  368. 904 Silver Spur Road
  369. Rolling Hills Estates, CA  90274
  370. 213-208-6689 300/1200/2400/24 hrs.
  371.