home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / bbs / nitelite / howto.txt < prev    next >
Text File  |  1985-05-31  |  87KB  |  1,681 lines

  1. THE NITE LITE BBS PROGRAM
  2.  
  3. This  documentation  and  the  software it describes are copyright
  4. 1989,  Paul Swanson.   All Rights Reserved.   They are distributed
  5. as shareware.   If  you  use this BBS program, support it by mail-
  6. ing a registration fee of $35 to  Nite Lite Systems,  P.O.  Box R,
  7. Billerica, MA 01821.   In  turn  you  will receive,  on disk,  the
  8. latest update of this software.  Include the  name  and  telephone
  9. number of your BBS so that it can be added to  the  list  of  Nite
  10. Lite BBSs.  You may also purchase  access  to  a  support  section
  11. set up on the original  Nite Lite  BBS,  accessible  by  modem  at
  12. 300 or 1200 baud at  (508) 663-4221, or at 2400 baud at (508) 663-
  13. 2885.   Information is available  on  that  BBS on how to purchase
  14. access to this support section  as  well  as  information  on  the
  15. purchase of the  Multiline Nite Lite BBS program and the SP series
  16. interface it requires.   Any money you pay  for  registering  this
  17. one-line version as well as any money you pay for  access  to  the
  18. support  section  may  be  deducted  from  your  purchase  of  the
  19. Multiline Nite Lite BBS software.
  20.  
  21. GETTING IT ON LINE
  22.  
  23. The first thing you should do once you have unarc'd the Nite  Lite 
  24. BBS  program  is to set up your system the way it will be  set  up 
  25. when  you have callers logging on.   In other words,  set  up  the 
  26. folders  you  will be using and,  if you want to use a  RAM  disk, 
  27. install the RAM disk.  After that, run the INIT.TOS program.
  28.  
  29. Note that this version of the Nite Lite BBS will require at  least 
  30. a  one-meg Atari ST computer system.   It does not use  the  whole 
  31. megabyte of RAM,  but it does use more than 512K.  You can declare 
  32. a RAM disk of up to 400K bytes.
  33.  
  34. The sample non-password system that you can create using  INIT.TOS 
  35. consists of just one main menu.   All of the other files generated 
  36. are required for general operation of the BBS.   To understand how 
  37. this BBS operates,  set up your system and run INIT.TOS.   Have it 
  38. generate the non-password main menu.   You may want to make a hard 
  39. copy  of this documentation file so that you have it to  refer  to 
  40. while you are running the BBS program.
  41.  
  42. Assuming  that  you  have  run  INIT.TOS  at  this   point,   load 
  43. NITELITE.TOS into memory.   Log on using your SysOp name.   If you 
  44. spell it exactly the way you did when running INIT.TOS the  system 
  45. will ask for your password.   This must also be entered exactly as 
  46. it  was  entered  when  running  INIT.TOS.   You  should  then  be 
  47. presented with your SysOp menu, which is very, very terse.  All it 
  48. asks you to do is enter a command.
  49.  
  50. The  SysOp menu allows complete access to everything on your  BBS.  
  51. Almost any Nite Lite command, including all menu commands and most 
  52. interpreter  commands,   can  be  entered  at  this  prompt.   The 
  53. disadvantage  of  this type of menu is that you do have  to  learn 
  54. some commands in order to do anything.
  55.  
  56. THE LOGON SEQUENCE
  57.  
  58. Before  going  through some of the more  commonly  used  commands, 
  59. first review what the BBS just did.  When you first start it up it 
  60. reads  in some of the system files,  then initializes the  message 
  61. base.   When it is ready it automatically logs on your local port, 
  62. which  is  port  0.   The  modem is port 1 and  you  also  have  a 
  63. background port that you can have running,  which is port C.  This 
  64. has  no modem or terminal associated with it but can be  used  for 
  65. background processing tasks.
  66.  
  67. The  baud  rate detection is skipped on port 0.   On port  1  your 
  68. callers  will have to hit RETURN to initiate the logon.   The  BBS 
  69. uses  this RETURN character to determine the caller's  baud  rate.  
  70. After hitting RETURN,  or immediately,  without hitting RETURN, on 
  71. port 0,  the file LOGON in your main directory is displayed, after 
  72. which the system requests your name.   Enter your name and  verify 
  73. that  you entered it properly by hitting Y at the next prompt  and 
  74. the  BBS  will  see if you have a password.   If  you  do  have  a 
  75. password, the next prompt requests it.  You have up to three tries 
  76. to enter your password correctly.
  77.  
  78. If  you enter your password correctly,  the password code is  read 
  79. from  the  password  file and logon continues.   If  there  is  no 
  80. password,  a non-password access code is assigned to your call and 
  81. logon  continues.   A  few  statistics are  shown  on  the  screen 
  82. followed by the contents of the file GREET in your main directory.  
  83. If  you have a password and your new message pointer is  not  zero 
  84. you next have the option of reading new messages addressed to you.  
  85. The  very first logon onto your BBS will not generate that  prompt 
  86. since there are no messages on the system.
  87.  
  88. The main menu is displayed next.   If you have no  password,  this 
  89. will be AMENUZ.   Your SysOp password automatically logs you  onto 
  90. the menu AMENUB.  If you assign other passwords on your system you 
  91. can  control  it so the different callers can log  onto  different 
  92. main  menus.   This  allows you to control the access  of  various 
  93. callers very completely.  The menu names are all AMENU followed by 
  94. an  upper  case letter or a single digit,  so they can  be  AMENU0 
  95. through AMENU9 or AMENUA through AMENUZ.  A caller can access only 
  96. those  function  you  allow on the main menu you  assign  to  that 
  97. caller.
  98.  
  99. THE PASSWORD CODE
  100.  
  101. Which main menu a caller sees is determined by the password access 
  102. code,  which is a 14-character string.  The first character in the 
  103. string is the number or letter used to create the name of the main 
  104. menu,  so that character can be a digit (0 to 9) or a letter (A to 
  105. Z).   Remember,  the  letter B is reserved for full SysOp and  the 
  106. letter  Z  is used for the non-password  callers.   The  next  two 
  107. characters are the caller's time limit.   This may be 01 to 99 or, 
  108. for "infinite time," use 00.   This is a per-call time limit.  The 
  109. next  five  characters are the new  message  pointer.   Initialize 
  110. these to five zeroes.   The BBS will use them to keep the caller's 
  111. new message pointer updated.   The next character should  normally 
  112. be a space.   If it is an @ sign the caller (usually just the main 
  113. SysOp)  will  be  able to read (and delete) any  messages  in  the 
  114. message bases,  public as well as private.  If it is an upper case 
  115. letter (this is normally used when a remote SysOp takes care of  a 
  116. particular  section of your BBS),  the caller has SysOp access  on 
  117. the  message  base  designated  by  that  letter.    Message  base 
  118. designators are explained in a later section,  which explains  how 
  119. the message base operates.   The last five characters are  special 
  120. access codes.  They are used only by the L1 command.  This command 
  121. is not often used on BBSs,  and if you don't intend to use it  you 
  122. can use these five characters to store other information.
  123.  
  124. Your password access code is initially defined as  B0000000@11111, 
  125. which gives you access to the menu AMENUB,  an infinite time limit 
  126. (the 00),  an initialized new message pointer (00000),  SysOp read 
  127. access  on  all  bases (the @ sign) and all  five  special  access 
  128. codes,  in  case  you do have some L1 commands  on  your  BBS.   A 
  129. typical password caller's code may be A4000000 00000, which allows 
  130. them  access to the menu AMENUA with 40 minutes of on  line  time.  
  131. The  new message pointer is initialized to 00000,  no  SysOp  read 
  132. access  is  allowed  (the space character) and  all  five  special 
  133. access codes are "off" (the final 00000).
  134.  
  135. STANDARD MENUS
  136.  
  137. The menus on a Nite Lite BBS are in a particular format.  They are 
  138. text  files  and can be entered using commands  available  to  you 
  139. directly from your SysOp menu.   They are executed as text  files, 
  140. which means you do not have to compile them before you put them on 
  141. line.  You can type them directly into the file where they will be 
  142. used by your callers.
  143.  
  144. A  standard  menu normally starts with a line  containing  exactly 
  145. three  @  signs.   This  is a signal to Nite Lite  that  it  is  a 
  146. standard menu.   That line must be only the three @ signs, with no 
  147. trailing  spaces or other characters.   The very next line in  the 
  148. file  is a list of upper case letters.   These define the  letters 
  149. that  you want to allow on the menu.   Normally these letters  are 
  150. used  to form the prompt at the end of the menu.   If you want  to 
  151. display  your  own  prompt,  put a vertical bar  (|)  followed  by 
  152. exactly the prompt you want displayed at that menu.
  153.  
  154. Those  initial  two lines are followed by the text  of  the  menu, 
  155. exactly the way you want your callers to see it.  After the end of 
  156. the text,  on a line by itself,  place the word END.   This is the 
  157. code  that  Nite Lite looks for to tell where the  text  ends  and 
  158. where the commands start,  so it must be END,  in all upper  case, 
  159. with no other characters on the line.
  160.  
  161. Each  line following END contains one Nite  Lite  command.   These 
  162. commands,  defined in detail later in this text, consist of either 
  163. a  letter  followed  by a digit (standard  menu  commands)  or  an 
  164. exclamation point (!) followed by two letters.   Depending on  the 
  165. command,  other information may be appended to either of these two 
  166. forms.
  167.  
  168. NOTE:   the  word MENU is a reserved word on Nite Lite.   You  can 
  169. call other menus (secondary menus) from your main menu, but do not 
  170. put the word MENU in any part of the name of a secondary menu.  It 
  171. will  not execute it properly because it will "think" that  it  is 
  172. looking for a main menu.  Do not use a folder named "MENU" because 
  173. then  this  reserved  word will become part of  the  name  of  any 
  174. secondary menu that you may place in that  folder.   Also,  always 
  175. use the complete form of the menu name.   Nite Lite looks for  the 
  176. colon  that  follows the drive designator,  so even if  your  main 
  177. drive  is C:\,  Nite Lite may not be able to locate a menu if  you 
  178. call it as "GAMES" instead of "C:\GAMES" - always include the disk 
  179. designator and colon.
  180.  
  181. AUTOMENUS AND NICS COMMAND FILES
  182.  
  183. Instead of using the standard hot-keyed menus available under Nite 
  184. Lite,  you can use your own programmed menus.   You can also  call 
  185. your own programs,  written in the NICS (<N>ite Lite <I>nterpreter 
  186. <C>ommand <S>et) language.
  187.  
  188. Your main SysOp menu is an automenu.  If you look at that file you 
  189. will see that it starts with three exclamation points on the first 
  190. line  (!!!).   The  second line is a file specification  with  /02 
  191. appended  to  the  end.   The third line is the letter  E  all  by 
  192. itself.   This  is  a  very small,  simple  automenu,  but  it  is 
  193. reponsible for allowing you complete BBS access.
  194.  
  195. When the Nite Lite BBS sees the !!! on the first line of a menu it 
  196. executes it as an automenu.  The next line (the file specification 
  197. with the /02 at the end) is then converted to an M8  command.   M8 
  198. is a "load NICS file" command.   If there is a slash (/)  followed 
  199. by exactly 2 digits,  that many lines are skipped before execution 
  200. begins,  so  this  file is actually calling  itself  and  starting 
  201. execution on the third line.  The third line is just the letter E, 
  202. which is the only one-letter Nite Lite command.  This is immediate 
  203. mode.   You  can  use any standard menu command in  a  NICS  file, 
  204. although they are more commonly used for NICS commands.
  205.  
  206. For NICS files called using an M8 command you don't use the !!! or 
  207. the file specification.   You can just use M8filespec and the file 
  208. will have the first statement on the first line.   For example, if 
  209. the following file were C:\TESTFILE you would use M8C:\TESTFILE to 
  210. call  it  from a menu.   This file will give you a  random  number 
  211. between 1 and 20 (inclusive):
  212.  
  213. !RD
  214. !XA+48
  215. !SW
  216. !RD
  217. !XA+48
  218. !AP
  219. !YA/5
  220. !YA+1
  221. !SW
  222. !MS0502
  223. !PRLRandom number between 1 and 20:
  224. !PRA
  225.  
  226. The  !RD command generates a digit from 0 to 9 and places  it,  in 
  227. binary form, into your A string.  The next command, !XA+48, adds a 
  228. binary  48  to this value to make the number  printable  (standard 
  229. ASCII format for numbers).   !SW swaps the A and B strings so  you 
  230. can  do the same thing again.   At that point,  both the A  and  B 
  231. strings contain some digit in ASCII format.  The !AP appends the B 
  232. string  to  the A string,  which ends up holding a  random  number 
  233. between  00  and 99.   To get it into the 1  to  20  range,  !YA/5 
  234. divides  it  by  5 (putting it into the 0 to 19 range  -  it  uses 
  235. integer division) and the !YA+1 then transfers that to the 1 to 20 
  236. range.   The !Y commands leave the result in a 6-digit form,  with 
  237. the leading zeroes.   To get rid of them,  the !SW puts the result 
  238. into  the B string and !MS0502 takes the partial  string  starting 
  239. with  the 5th byte of the B string,  for two bytes,  and puts  the 
  240. result into the A string.   The !PRL command "prints" out  "Random 
  241. number  between 1 and 20:" and the !PRA "prints" the  contents  of 
  242. the A string,  which is the two-digit random number between 1  and 
  243. 20.   After the last command is executed,  the BBS will return  to 
  244. the menu that called the file. 
  245.  
  246. THE X DISK DESIGNATOR
  247.  
  248. To  simplify  making menus and text files  "portable,"  Nite  Lite 
  249. recognizes a wildcard disk designator.   If you use X instead of a 
  250. disk drive designator (for example, X:\GAMES instead of C:\GAMES), 
  251. Nite Lite will substitute the last used proper disk designator for 
  252. the X.   In other words, if X:\GAMES is called from a menu that is 
  253. on  drive C,  Nite Lite will look for C:\GAMES.   If it is  called 
  254. from a menu on drive D,  Nite Lite will look for  D:\GAMES.   Only 
  255. the one-letter drive designator is substituted.   Folder names are 
  256. not.   However,  if you are writing a game for Nite Lite,  you can 
  257. put  your entire game into one folder and indicate that,  to  call 
  258. it, you call M8X:\MYGAME\START.  Use the X specifier on every file 
  259. specification in your game.   That way, anyone else wanting to use 
  260. your  game  can  put the folder on any disk and call  it  with  M8 
  261. followed   by   the  proper  disk  designator  followed   by   the 
  262. \MYGAME\START  and the correct disk designator will be  used  when 
  263. the BBS runs the game.
  264.  
  265. THE MESSAGE BASES
  266.  
  267. All messages on a Nite Lite BBS are stored in six text files  that 
  268. are  treated  as if they were one file.   Six files  are  used  to 
  269. control  the  message  base  rotation.   All  messages  are  saved 
  270. sequentially, using codes to designate which message base they are 
  271. left  on as well as whether they are public or  private.   Message 
  272. base  files  are  designated as files  A  through  F  (information 
  273. generated by the INIT.TOS program gives them a file stem,  so they 
  274. become  MSGA  through  MSGF unless you change the  .RSC  file  and 
  275. rename  them).   New messages are initially saved to file A  until 
  276. the size of the file exceeds the limit, in bytes, specified in the 
  277. fifth line of the .RSC file.   When that happens, the next message 
  278. saved  is saved to the B file.   This process continues until  all 
  279. six files are full.   At that point,  the next message saved  will 
  280. delete  the  A  file and start a new A file  beginning  with  that 
  281. message.   Effectively,  this  wraps  the base in  sixths  without 
  282. needing message base compression.
  283.  
  284. The code that determines which base a message is on is called  the 
  285. message base designator.   This is either a space character or  an 
  286. upper  case  letter.   The name is taken from the  BASENAME  file, 
  287. which  is read into memory when the BBS  is  initializing.   These 
  288. names can also be changed by using the !SY command.   In the file, 
  289. the  first  line  is  the  open  base,  designated  by  the  space 
  290. character.   This  is followed by 26 lines,  corresponding to  the 
  291. bases  designated by the upper case letters.   These message  base 
  292. designators are the codes used in the J2, J4, J5 and J6 commands.
  293.  
  294. CUSTOM MENU COMMANDS
  295.  
  296. Some functions will be distributed as custom command files.  These 
  297. are  NICS  files called using what looks like  menu  commands.   A 
  298. custom command must be at least two characters long and must begin 
  299. with an upper case letter.   Letters used for standard commands (I 
  300. through N) cannot be used to begin custom menu command names.  The 
  301. second character may be either a letter or a single  digit.   When 
  302. Nite Lite encounters a custom menu command it forms an M8  command 
  303. from it by appending the following information together:   M8, the 
  304. main directory file stem, the first two letters of the command and 
  305. the file extention .NIC.  For example, if your main directory were 
  306. C:\BBS\  and you execute A5,  Nite Lite would try to  execute  the 
  307. command M8C:\BBS\A5.NIC.   Also, if you want to append information 
  308. to a custom command, the entire command is converted to upper case 
  309. and the result is placed into your A string before the M8  command 
  310. is executed,  so you can use interpreter commands to decipher this 
  311. additional information.
  312.  
  313. STANDARD NITE LITE MENU COMMANDS
  314.  
  315. The following is a list of all of the standard menu commands  that 
  316. can be executed directly by this software.   You can add  commands 
  317. to this list by using the custom command forms,  but you will need 
  318. to  add  the NICS file to your main directory for  each  of  these 
  319. custom commands.
  320.  
  321. The standard commands all start with I,  J,  K, L, M or N followed 
  322. by a digit from 0 to 9.  Many of these commands require additional 
  323. information.   Remember that when you append information,  do  not 
  324. add any unnecessary spaces.  Nite Lite reads this information in a 
  325. fixed format,  so a space between the command and,  for example, a 
  326. file  specification appended to it will cause the command  to  not 
  327. properly work.
  328.  
  329. The available standard menu commands, in alphabetical order, are:
  330.  
  331. I0  - Send a telegram.   The caller is prompt for the text of  the 
  332. telegram,  which  may be up to 80 charcters in length  (note  that 
  333. longer telegrams can be sent from either chat room),  then for the 
  334. port to send it to.   A telegram is received by the addressed port 
  335. when  the caller in the chat room,  at a menu or in various  other 
  336. places  on the BBS.   A telegram is not received if  the  telegram 
  337. flag is off (see the !TR interpreter command),  when the caller is 
  338. downloading or uploading,  or when the caller is in the middle  of 
  339. entering  a line of text.   Telegrams are also not received  while 
  340. the  caller  is in the middle of a NICS file except  at  an  input 
  341. statement before starting to type.
  342.  
  343. I1  - Page SysOp.   This sends a telegram to port 0 informing  the 
  344. SysOp that someone has paged.  From port 0, execute I1 followed by 
  345. the port number to call the port into SysOp chat, or from any port 
  346. use the !CH command to call the port into private chat.
  347.  
  348. I2 - Inquire.   This displays one line per active port showing the 
  349. port number,  caller name,  what the caller is doing and what  the 
  350. callers  current time codes are.   Time codes are time on line  on 
  351. this call, slash, time allowed for this call.  These codes display 
  352. from 00 to 99 or show an asterisk (*) if the value is greater than 
  353. 99.   After the list of callers is one line telling the caller  if 
  354. line feeds are off or on on the port calling this  command.   This 
  355. is followed by the time/date line.
  356.  
  357. I3  -  Monitor.   This must be followed by a  port  number.   This 
  358. allows  you  to  monitor any other  port  on  your  system.   When 
  359. monitoring, you see everything the caller sees as well as all keys 
  360. the caller hits.  In some places this will cause you to see double 
  361. characters  -  you  see the character the caller  typed  plus  the 
  362. character the BBS echoed back to the caller.   You can also  type, 
  363. and the characters you type are read as if the caller typed  them.  
  364. In most places in the BBS, the caller will not be able to see that 
  365. you are typing, but will see the results of what you do.
  366.  
  367. I4 - SysOp minimenu.   This command first asks you which port  you 
  368. want to access.   Enter the port number followed by  RETURN.   You 
  369. are  then  presented with a list of functions.   Type  the  letter 
  370. corresponding to the function you want.   Do not hit RETURN  after 
  371. this entry.   If the function requires additional  information,  a 
  372. prompt for the additional information will then appear.
  373.  
  374. I5  -  Terminal  mode  command.   This will  prompt  you  for  the 
  375. port/baud  code.   This  is  a  two-character  entry.   The  first 
  376. character is the port number.   The second is the baud rate  code.  
  377. Codes are 4=300 baud,  5=600 baud,  6=1200 baud, 8=2400 baud and a 
  378. less-than symbol (<) designates 9600 baud.   For example, enter 16 
  379. to call out through port 1 at 1200 baud,  or 4< to call out  using 
  380. port 4 at 9600 baud.  When you hit RETURN at the end of this entry 
  381. you  are in terminal mode.   You can enter a dialing  sequence  to 
  382. call  out.   Press CNTL-X to go to the terminal mode  menu,  which 
  383. allows  you  to  select  various  functions,  including  switching 
  384. duplex,  downloading  or uploading,  dropping carrier on the  port 
  385. you're  using to dial out,  etc.   You can even leave the call  on 
  386. "hold" so that you can return to your BBS for a minute or two, but 
  387. don't forget what port you put on hold or what baud rate you  were 
  388. using because you get back to the call by executing the I5 command 
  389. again and you should enter the same codes.
  390.  
  391. I6  - Nowhere room.   This command can be forced to  a  port.   It 
  392. basically  does  nothing except echo the charcters  typed  by  the 
  393. caller.   The  caller  cannot  escape from  this  room  except  by 
  394. dropping  carrier.   This function has been used as a "prison"  to 
  395. enforce rules of the BBS.   It cannot be executed for port 0,  but 
  396. port 0 can be used,  via the I4 command,  to force any other  port 
  397. into this room.
  398.  
  399. I7 - Chat capture.   Actually,  this captures much more than  just 
  400. what happens in the chat room.  It records everything that happens 
  401. on your BBS.   It will prompt you,  if chat capture is off,  for a 
  402. file  specification.   It will open the file and then append  this 
  403. information to the file until you turn off chat capture.   You can 
  404. have  it  append to a file by putting /A at the end  of  the  file 
  405. specification.   If chat capture is already on it will ask you  if 
  406. you want to turn it off.
  407.  
  408. I8 - SysOp inquire.   This is somewhat like the I2 command  except 
  409. that it gives you much more specific information.   In addition to 
  410. the  port numbers and caller names it also lists information  such 
  411. as the caller's password access code, baud rate and the exact Nite 
  412. Lite command that caller is currently executing.
  413.  
  414. I9 - Save index.   The message base index is stored just in memory 
  415. and is reestablished when you boot the BBS.  Alternately, you can, 
  416. when you return to the desktop,  use this command,  which writes a 
  417. copy  of  the  index to your main directory using  the  file  name 
  418. INDEX.   When you reload your BBS, while the program is being read 
  419. from  disk,  hold down the R key for a second or two and  the  BBS 
  420. will  reread  this saved index.   On systems with  larger  message 
  421. bases,  this  function  can  save you quite a bit  of  time  since 
  422. rereading  a stored index takes far less time than recreating  it.  
  423. Also,  if  this command is executed from port 0,  it provides  the 
  424. only  "legal" exit from the program.   After saving the  index  it 
  425. issues a prompt asking if you want to return to the  desktop.   If 
  426. you  respond by pressing Y it updates your password  access  code, 
  427. reinitializes  the  SP interface,  then requests  that  you  press 
  428. RETURN.  This RETURN must be pressed on the port 0 keyboard.  When 
  429. you  press RETURN you are returned to the  desktop.   All  callers 
  430. will remain connected,  but since the BBS is not running, will not 
  431. be able to do anything until you reload the BBS program.
  432.  
  433. J0 - Linked chat room.   Append A,  B,  C or D to this command for 
  434. the  various functions.   J0A is the normal caller entry into  the 
  435. linked chat room.   J0B is the command used to link a BBS to  your 
  436. BBS,  using  your BBS as the host.   J0C is used to link when  the 
  437. other BBS is the host,  but this command is usually  automatically 
  438. executed by the J option on the terminal mode menu.   J0D controls 
  439. the   linked  chat  room  announcement.    J0D00  turns  off   the 
  440. announcement.   Using a value between 01 and 99 instead of the  00 
  441. will cause the announcement to happen at that interval in minutes.  
  442. The announcement must be in a file called CHATSYS located in  your 
  443. main directory.
  444.  
  445. J1 - Local chat room.   J1 is the normal caller entrance.  Use J1A 
  446. and  your "arrival" and "departure" are not announced.   J1D  will 
  447. trigger  announcements  in  this room in the  same  way  that  J0D 
  448. triggers them in the linked chat room.  The file used in the local 
  449. chat room is LOCSYS.
  450.  
  451. J2  - Dump messages.   This command first asks the caller for  the 
  452. starting message number.   If the caller has a defined new message 
  453. pointer, a RETURN will assume entry of that value and dumping will 
  454. start  at the message following the highest one read on  the  last 
  455. call.  A /T after the entry of a message number (or just /T if the 
  456. caller wishes to start at the new message pointer) will cause this 
  457. command to dump only those messages addressed specifically to that 
  458. caller.   A J2 by itself will dump messages from the open  message 
  459. base (designated by a space character) on all except callers  with 
  460. a B password access code.  If the caller (the main SysOp, usually) 
  461. uses  J2  by  itself,  the dump will consist of  messages  on  all 
  462. message  bases.   To specify a single or a combination  of  bases, 
  463. append  the  message  base designator(s)  to  this  command.   For 
  464. example,  J2ABC will dump messages from the bases designated by A, 
  465. B  and C and J2 A will dump messages from the bases designated  by 
  466. the space character (open base) and the base designated by an A.
  467.  
  468. J3  - Log off.   This offers the caller an opportunity to enter  a 
  469. command, which is saved in the LOGOFF file in your main directory, 
  470. then  logs the caller off,  dropping carrier by dropping  the  DTR 
  471. line to the modem.   J3A is an express logoff command, which skips 
  472. over the option of leaving a logoff comment.
  473.  
  474. J4  - Leave a message.   Append a message  base  designator.   The 
  475. caller can select whether or not the message is  private.   Append 
  476. /N  or /P and the selection of private or non-private is  bypassed 
  477. so you can force a particular base to be either all private or all 
  478. public.   /N forces the message to be non-private and /P forces it 
  479. to be private.
  480.  
  481. J5  - Read messages.   This command operates exactly like  the  J2 
  482. command with two exceptions.  First, the caller is promted between 
  483. each  message.   This  prompt allows the caller to  abort  reading 
  484. messages, to reply to the message or to go on to the next message.  
  485. Other options are offered in certain conditions.   In addition  to 
  486. the  message number entry options and the base designator  options 
  487. available  in  the  J2 command,  the /N and /P  options  are  also 
  488. available,  used to control the private/non-private status of  the 
  489. replies.
  490.  
  491. J6 - Scan messages.   This command is identical to the J2  command 
  492. except that only the heading of each message is displayed.
  493.  
  494. J7  -  Relogon.   The port is returned to where carrier  is  first 
  495. detected.   For  all ports except port 0,  the caller  must  press 
  496. RETURN to reestablish baud rate to log on again.
  497.  
  498. J9  - Dump text file.   Append the file specification of any  text 
  499. file and that file will be displayed.   At the end of the file the 
  500. BBS requests that the caller press RETURN to return to the calling 
  501. menu.   Append  a  slash  (/) character to the  end  of  the  file 
  502. specification and the press RETURN prompt is bypassed.
  503.  
  504. K0 - Enter a text file.   Append a file specification.  The caller 
  505. can enter the text file using the standard editor as if entering a 
  506. message.   When  the caller presses S at the final prompt to  save 
  507. the  text,  the  text  buffer is written to disk  under  the  file 
  508. specification designated.
  509.  
  510. K1 - Change password access code letter.  Append a password access 
  511. code  letter (single upper case letter or a  single  digit).   The 
  512. first  character in the caller's password access code is  changed, 
  513. which changes which main menu the caller will see.
  514.  
  515. K2 - Download.   Append a file specification.   The file specified 
  516. may be downloaded by capturing or by XMODEM (checksum or CRC,  128 
  517. byte blocks).   The exact file specification must be entered  when 
  518. using  K2  for downloading,  so this command is not  intended  for 
  519. general caller file downloading.  Use N6 for download directories.
  520.  
  521. K4 - Enter passwords.  This allows entry of caller names, password 
  522. and password codes.   Append a file specification and you can  use 
  523. this  command  to  enter records into  secondary  password  files, 
  524. entering  the file specification in place of the  password  access 
  525. code.
  526.  
  527. K5 - Upload to file specification.  Append the file specification.  
  528. The  caller  may upload the file using XMODEM (checksum  or  CRC).  
  529. Like  the  K2 command,  this is not intended  for  general  caller 
  530. uploads,  since the exact file is specified.   Instead, use the N7 
  531. command for general uploads.
  532.  
  533. K6 - List disk directory.   Append a wildcard file  specification.  
  534. The  directory  is read according to that file  specification  and 
  535. displayed  to the caller.   For example,  K6C:\*.* will  list  all 
  536. files and folders in the main directory of drive C, but K6C:\*.NIC 
  537. will display only files with the extention .NIC.
  538.  
  539. L0  - Line feed switch.   Normally,  callers toggle line feeds  by 
  540. sending a CNTL-L character.  Alternately, you can use this command 
  541. on  a  menu to allow callers to select line feeds by  answering  a 
  542. question with Y or N.
  543.  
  544. L1 - Special access.   This command uses the last five  characters 
  545. in the password access code.   Append a digit (1 to 5) followed by 
  546. a  file  specification.   If the digit corresponds  to  a  special 
  547. access  code that is "1" the caller will go to the menu  specified 
  548. by  that  file  specification.   For example,  if  the  last  five 
  549. characters in the caller's password code is 01000 an L11C:\SPECIAL 
  550. will  deny  that  caller access to  the  "SPECIAL"  menu,  but  an 
  551. L12C:\SPECIAL will allow access.
  552.  
  553. L4 - Append text to file.   Append a file specification (note  the 
  554. file  must be an existing text file).   The caller may enter  text 
  555. using the standard editor.   When the text is saved,  the caller's 
  556. name and the time/date line are appended to the file,  followed by 
  557. the text entered by the caller.   Append a slash character (/) and 
  558. the command will skip appending the name and the time/date line.
  559.  
  560. L5 - Copy file.   If nothing is appended,  the caller is  prompted 
  561. for the "from" and "to" file.   Appending /A to the "to" file  and 
  562. the "from" file is appended to the "to" file.   Alternatively, the 
  563. from and to files may be specified by appending the from  file,  a 
  564. comma and the to file to the L5 command.
  565.  
  566. L6 - Delete file.   Append the exact file specification.  The file 
  567. is deleted from the disk.
  568.  
  569. L8 - Edit file.   Append the file specification of a text file  of 
  570. 2000  characters  or less.   The standard editor is then  used  to 
  571. alter the text,  which can then be saved,  replacing the  original 
  572. file.
  573.  
  574. L9 - Questionnaire.  This command requires two file specifications 
  575. separated  by a comma.   Each line in the first file specified  is 
  576. used  as a question.   The caller answers each question  with  one 
  577. line  of input.   At the end,  the caller is given the  option  of 
  578. saving the responses.   If the caller presses Y, the caller's name 
  579. followed  by the answers,  in the order they were  presented,  are 
  580. saved to the text file followed by a blank line,  which serves  to 
  581. separate the responses.   Note that both files must exist prior to 
  582. calling this command.
  583.  
  584. M4  - Battle menu.   This calls up a 3-function menu  that  allows 
  585. callers  to  "do battle" when the adventure  flag  is  set.   This 
  586. command is automatically implemented when the M5 command sets  the 
  587. adventure  flag,  but  can  also be specified  explicitly  from  a 
  588. command file.
  589.  
  590. M5 - Toggle adventure flag.   When the adventure flag is on,  each 
  591. secondary  menu automatically gets an extra  function,  using  the 
  592. letter  Z,  which brings up the battle menu.   The caller is  also 
  593. informed when entering the menu if there is another caller on  the 
  594. system who is also at that menu.   Hitting Z automaticaly executes 
  595. an M4 command.  The "battling" uses the remaining time on line for 
  596. this  call  as  the  "energy" and callers who  use  up  energy  by 
  597. "hitting"  too  many times or being hit too many  times  will  get 
  598. timed out.
  599.  
  600. M6   -  Random  load.    Append  a  single  digit  and  two   file 
  601. specifications separated by a comma.  A random digit is generated.  
  602. If  the  generated random digit is greater than the digit  in  the 
  603. command the first file specified is loaded as a  menu.   Otherwise 
  604. the second file specified is loaded as a menu.
  605.  
  606. M8 - Run command file.  Append the file specification of a command 
  607. file  (NICS  file).   You  may also append a  slash  charcter  (/) 
  608. followed  by  two  digits  to skip that  number  of  lines  before 
  609. starting execution.
  610.  
  611. M9 - Secondary password access.   Append the file specification of 
  612. a  secondary password file.   This secondary password file  is  in 
  613. exactly  the  same  format as the main password  file  except  the 
  614. password  access code is replaced by the file specification  of  a 
  615. secondary menu.   If the caller's name is found in this file,  and 
  616. the  caller  enters the correct password,  the file  specified  is 
  617. loaded as a standard menu.
  618.  
  619. N1 - List free space on disk.   Since GEM hogs the computer  while 
  620. this command is executing,  and the command could take a while  on 
  621. hard  drives,  this function was not included in the  K6  command.  
  622. The free space,  expressed in K,  is displayed.   Append the  disk 
  623. designator (one letter) to this command.
  624.  
  625. N2 - XMODEM download listed files.   Callers can add files to  the 
  626. list when using the N6 command.   This command can be executed  at 
  627. the caller's option when exiting the N6 command or you can list it 
  628. on a menu so that the caller may download the list of files  later 
  629. during that session.
  630.  
  631. N3  - Delete empty folder.   Append the folder path,  without  the 
  632. trailing backslash, and if the folder is empty it will be deleted.  
  633. For  example,  to delete the folder "SPECIAL" on  drive  C,  first 
  634. delete all files in the folder, then use N3C:\SPECIAL.
  635.  
  636. N4 - Create a folder.  Append the folder path, as described in the 
  637. N3 command.
  638.  
  639. N5  -  Edit  transfer index.   Append the folder  stem  (the  path 
  640. including  the trailing backslash) of a properly  configured  Nite 
  641. Lite file transfer folder.   This command will allow you to review 
  642. the  uploaded  file names and descriptions from the  UINDEX  file, 
  643. transferring the entries of files that you want callers to be able 
  644. to  download into the DINDEX file.   Note that,  to set up a  Nite 
  645. Lite  file  transfer  folder you  must  create  the  folder,  then 
  646. initialize  (use the !DI command) a file in it called  UINDEX  and 
  647. one  called DINDEX.   Files uploaded using the N6 command will  be 
  648. indexed in the UINDEX file and the N7 command will list the  files 
  649. indexed in the DINDEX file.   Note that the N5 command will create 
  650. a work file,  TINDEX, in that folder.  When not actually executing 
  651. an N5 command, this file is not used and can be deleted.
  652.  
  653. N6 - User upload.  Append the path to the file transfer directory, 
  654. as  described in the N5 command.   The file may be uploaded  using 
  655. XMODEM  (checksum  or CRC).   If the upload is  successful  it  is 
  656. indexed in the UINDEX file.
  657.  
  658. N7  -  User  download.   Append  the path  to  the  file  transfer 
  659. directory,  as described in the N5 command.  The caller is shown a 
  660. list  of files available,  taking this list from the DINDEX  file.  
  661. To  create a system where callers can download anything  uploaded, 
  662. which  eliminates the possibility of checking the files  but  also 
  663. eliminates the need for using the N5 command,  append a slash  (/) 
  664. character  to  the end of the path and this command will  use  the 
  665. UNIDEX file instead of the DINDEX file.
  666.  
  667. N8 - Rename file.  Append the full file specification of the file, 
  668. a comma, and the new file specification of the file.  This command 
  669. will change the name.   Files can be moved to a folder or the main 
  670. directory, from a folder or the main directory providing that both 
  671. file specifications are on the same logical drive.   For  example, 
  672. N8C:\SPEC\FILE1,C:\ZCODE  will  move  the file FILE1  out  of  the 
  673. folder SPEC to the main directory on drive C.
  674.  
  675. N9  - Paged text file read.   Append the file specification  of  a 
  676. text file.   The contents of the file are sent 20 lines at a  time 
  677. with  a prompt at the end of each 20 lines allowing the caller  to 
  678. continue reading or to abort reading.
  679.  
  680. E  -  Immediate mode.   Nothing can be appended to  this  command.  
  681. This must be E on a line by itself.   This is the command used  on 
  682. the main menu to bring up the prompt "Enter command:  " and allows 
  683. entry  of almost any Nite Lite command.   The command  entered  is 
  684. immediately executed.
  685.  
  686. filespec  -  Load menu.   This command is used to  load  secondary 
  687. menus from other menus or from an E command.  Simply list the file 
  688. specification as if it were a command.   Always use the full  file 
  689. specification - Nite Lite identifies this command from all  others 
  690. by  looking  for  the colon (:) as the  second  character  in  the 
  691. command.
  692.  
  693. NITE LITE INTERPRETER COMMAND SET (NICS)
  694.  
  695. All  interpreter  commands  consist of an  exclamation  point  (!) 
  696. followed  by  two  upper  case  letters.   Some  commands  require 
  697. additional information following this.   This is a terse  language 
  698. and is in fixed format,  which means that a space is considered  a 
  699. character and does count as one in the command.   For example, the 
  700. command !STAx and the command !STA x are different.   One will put 
  701. the single character x into the A string and the other will put  a 
  702. space character followed by an x into the A string.   The  command 
  703. !ST Ax is invalid and will not be interpreted properly.
  704.  
  705. Most  NICS  commands can be executed from a menu as if  they  were 
  706. menu commands.  Exceptions to this are the text file commands like 
  707. !DO,  !DR,  etc.,  and  the  obvious ones such as  jump  commands.  
  708. Although  most  of them are executable as menu commands  they  are 
  709. intended for use in interpreter command files.  These files can be 
  710. executed  by  using  an  M8 command on  a  menu  or  from  another 
  711. interpreter  command  file,  by using an automenu,  by  using  the 
  712. alternative LOGON file format,  by using the alternate GREET  file 
  713. format or by using custom command calls.
  714.  
  715. The M8 command executes the file directly.   The form is simply M8 
  716. followed  by  the complete file specification of  the  interpreter 
  717. command file.  If the M8 command is in an interpreter command file 
  718. execution of that file is terminated and the new file takes  over.  
  719. When the end of the command file is encountered,  the system  will 
  720. return  to the most recently executed menu unless that  definition 
  721. is changed by menu calls within the command file.
  722.  
  723. An automenu simply creates an M8 command.   The automenu  consists 
  724. of  only  two  lines  with !!!  on the first  line  and  the  file 
  725. specification on the second line.   The file specification is used 
  726. to  form  the M8 command and no menu is actually  shown.   The  M8 
  727. command  does  have  a / option.   If you  append  a  /  character 
  728. followed  by a two-digit number to the  file  specification,  that 
  729. number  of lines will be skipped before  execution  begins.   This 
  730. option can be used in any function that results in execution of an 
  731. M8 command.
  732.  
  733. The  alternate LOGON sequence is initiated if LOGON begins with  a 
  734. single line containing three exclamation points.   This causes the 
  735. LOGON  file to be interpreted as an automenu,  so the second  line 
  736. must  be a file specification.   This file specification  is  then 
  737. used  to  form an M8 command.   The file must  replace  the  logon 
  738. sequence,  defining the user name,  time on line,  password access 
  739. and everything else you need to define for each user logging  onto 
  740. your BBS.
  741.  
  742. The alternate GREET sequence works differently from the  alternate 
  743. LOGON sequence.   This option must be in place when you boot  your 
  744. BBS initially.   The name of the GREET file must end with "NIC" as 
  745. the last three letters of the file name.   If it does, immediately 
  746. after  verification of the name during the normal logon  sequence, 
  747. this greet file will be executed as a command file.  Note that, at 
  748. this  point,  the  user's time and password access  has  not  been 
  749. defined so the command file must take over those tasks.
  750.  
  751. All defined menu commands consist of the letter I, J, K, L, M or N 
  752. followed  by a single digit.   Alternate menu commands must  start 
  753. with  any  other  upper case letter  followed  by  one  additional 
  754. character that is legal in a disk file name.  These two characters 
  755. are  used  to  form a file specification that  is  executed  as  a 
  756. command file.   Note that this is not formed into an M8 command so 
  757. the   /  option  is  not  available  in  this  form.    The   file 
  758. specification formed is the default disk directory stem (from  the 
  759. .RSC  file)  followed by the two characters followed by  the  file 
  760. extention .NIC.   For example,  executing A5 results in  executing 
  761. the  file  C:\A5.NIC if your main directory is  declared  as  C:\.  
  762. Note  that the second character may not be a colon (:) since  that 
  763. will   cause  Nite  Lite  to  look  at  the  command  as  a   file 
  764. specification and it will attempt to load it as a menu.
  765.  
  766. Interpreter  commands  are  designed to  work  with  string  data.  
  767. Available  to  each  port  are  two  working  strings,   both  255 
  768. characters in length, identified as the A and B string, as well as 
  769. a stored string array of ten elements identified as stored strings 
  770. 0 to 9.   In addition there is one boolean variable that is set by 
  771. various commands and used to branch on the results of comparisons, 
  772. disk commands and error conditions.  In addition there is a set of 
  773. ten  system strings identified as system strings 0 to 9  that  are 
  774. common  to  all ports.   System variables are also  accessible  to 
  775. interpreter commands.  These system variables include the time and 
  776. date line,  caller name,  baud rates being used at various  ports, 
  777. all  lines in the FIFO buffers used in both chat rooms  and  other 
  778. variables  used by the system for control.   Most of these can  be 
  779. read and changed by interpreter command files.
  780.  
  781. Comments  can  be imbedded into the code  in  several  ways.   The 
  782. simplest and most common way to do this is to use the !NO  command 
  783. (no operation).   Anything can be appended to that command and the 
  784. appended line is ignored by the interpreter.  Comments can also be 
  785. appended to many other commands as well.   The only commands where 
  786. comments may not be appended are commands that require a  variable 
  787. amount of information.   For example,  !STA may not have a comment 
  788. appended  because everything between the A and the RETURN  at  the 
  789. end  of the line is transferred to the A  string.   Commands  like 
  790. !DRA (or !DRB) may be followed by a command.   When in doubt as to 
  791. which  commands may be followed by comments,  write a  short  test 
  792. file first to see how the command in question responds to having a 
  793. comment appended to it.
  794.  
  795. There  are  appended functions that can be used  with  interpreter 
  796. commands.   The @ function works with interpreter commands in  the 
  797. same  way  it  does with menu  commands,  placing  all  characters 
  798. following that symbol into the port's input buffer.   The &  sign, 
  799. not  available  to  any  menu  commands  except  M8,   causes  all 
  800. characters  following  the & symbol into the A string  before  the 
  801. command  is executed.   One of the more common places where the  & 
  802. function  is  used  is in the !PLA function so  that  an  explicit 
  803. prompt  line can be placed into the code using a  single  command.  
  804. For  example,  !PLA&What  is your name?  will send "What  is  your 
  805. name?"  to the caller and will leave the cursor on the same  line.  
  806. The last appended function,  the | function,  will also operate on 
  807. all  interpreter  commands in the same manner as it  does  on  the 
  808. standard menu commands.
  809.  
  810. When   using  appended  functions  on  appended   commands   their 
  811. interpretation  may  not  be immediately  obvious.   Many  of  the 
  812. interpreter  command  allow or require that a  second  command  be 
  813. appended.  The appended function will be executed before the first 
  814. of the appended commands is executed.   The !CE command will  also 
  815. operate  on  any  &  sign  appended  in  as  data.   For  example, 
  816. !CE"!STA"+B+S2 will, if S2 contains an & sign, place things in the 
  817. A  string  immediately prior to when the concatonated  command  is 
  818. executed.   This  could  cause  problems if  the  !CE  command  is 
  819. operating   on   data  resulting  from   computations   if   those 
  820. computations could result in generation of a & or @ sign.
  821.  
  822. When  writing  interpreter  files,   remember  that  this  is   an 
  823. interpreter  and is therefore not an impressively  fast  language.  
  824. Therefore, particularly in longer interpreter files, the code must 
  825. be  optimized  as much as possible.   Once you  have  written  and 
  826. tested  an interpreter file,  review the file and look for  places 
  827. where  you  can  make alterations to make  the  file  run  faster.  
  828. Changes  are constantly being made to the program itself  to  help 
  829. these interpreter files operate more quickly,  but with 5, 9 or 11 
  830. partitions competing for CPU time, there is a limit to how quickly 
  831. these interpreter commands can operate.
  832.  
  833. The  name  NICS  is  an acronym  for  (N)ite  Lite  (I)nterpretive 
  834. (C)ommand (S)et.   This is a constantly expanding set of  commands 
  835. that can be used in all interpreter files.   The list that follows 
  836. is a complete list of all NICS commands, in alphabetical order, as 
  837. of May 24, 1989:
  838.  
  839. !AF  -  Append to file.   Append A or B followed by  a  full  file 
  840. specification  to  this command.   The contents of  the  indicated 
  841. string  are appended to the end of the indicated disk  file.   The 
  842. line  is  written with only a RETURN character at the end  but  no 
  843. line  feed making the file incompatible with many word  processors 
  844. and text editors.   For compatibility you can first append a  line 
  845. feed character then use !AP.   The line feed is not required under 
  846. Nite  Lite,  which will read the line properly whether or not  the 
  847. line feed is present.
  848.  
  849. !AP - Append.   No appended information is required.  This command 
  850. appends the B string to the A string,  truncating the result if it 
  851. is longer than 255 characters.   The contents of the B string  are 
  852. not altered by this command.
  853.  
  854. !BC - Binary convert.   The contents of the A string are converted 
  855. to a binary number,  stored as a single byte in the A string.  The 
  856. number to convert must be a 3-digit ASCII formatted number in  the 
  857. range 000 to 255.
  858.  
  859. !BD  - Binary to decimal.   This is the complimentary function  of 
  860. !BC,  converting the first byte of the A string to a 3-digit ASCII 
  861. format  number.   This  3-digit number is stored back into  the  A 
  862. string.
  863.  
  864. !BF  - Blank fill.   Spaces are appended to the A string,  if  the 
  865. length of the A string is less than 80 characters,  to make the  A 
  866. string 80 characters in length.
  867.  
  868. !BL  - Block.   This is actually a series of commands designed  to 
  869. allow direct access to the 2K buffer available to each port.  This 
  870. buffer is used in menu commands for text entry,  file copying  and 
  871. other  functions.   The block commands can be used to act on  data 
  872. that  resulted from these menu commands or it can use  the  buffer 
  873. for  purposes not related to the menu commands.   There  are  also 
  874. other  functions built into the block commands that  allow  direct 
  875. communication with the port, bypassing the normal system character 
  876. masking  functions.   This makes it possible to add file  transfer 
  877. protocols that are not available through the menu  commands.   The 
  878. block access commands, in alphabetical order, are:
  879.  
  880. !BLC - Block close.  This closes any file opened for block access.  
  881. See also the !BLO command.  CAUTION: Close ONLY the files that you 
  882. OPENED.   If  this command is used to close a file when none  were 
  883. opened, some very strange things can happen to your port 0.
  884.  
  885. !BLF  -  Transfer  from A to block.   Append  an  ASCII  formatted 
  886. number.  The contents of the A string are transferred to the block 
  887. starting  at  that  offset.   Note that the command  will  not  be 
  888. executed at all if the total of this number plus the length of the 
  889. A string is greater than 2000.
  890.  
  891. !BLG - Get characters.   This command does not use the 2K block at 
  892. all but instead takes all characters awaiting input at the port to 
  893. be read into the A string without translation (i.e., no masking of 
  894. any of the characters).
  895.  
  896. !BLO - Block open.   This will open any file on your disk.  Append 
  897. a  single digit followed by a file specification.   This  accesses 
  898. the  GEM  f_open command directly,  using the digit  as  the  mode 
  899. number.   Modes  are read only (0),  write only (1) or  read/write 
  900. (2).  The A string is not affected by this command.
  901.  
  902. !BLR - Block read.  This accesses the GEM f_read command directly.  
  903. Append  a one- to four-digit ASCII formatted number  between  0001 
  904. and 2000.  This number is used as the number of characters to read 
  905. from  the  currently opened file.   Characters are read  into  the 
  906. buffer.   The number of characters actually read may be less  than 
  907. the  number  requested if the end of file was encountered  so  the 
  908. number returned by the command is placed into the A string.
  909.  
  910. !BLS - Block seek.   This command can do a number of  things.   It 
  911. directly accesses the GEM f_seek command.   Append a  single-digit 
  912. mode number (0=from the beginning of the file,  1=relative to  the 
  913. current  position  in  the file or 2=from the  end  of  the  file) 
  914. followed by a one- to six-digit ASCII formatted number to be  used 
  915. as the offset.   Note that this number must be a positive  number, 
  916. which does restrict the use of f_seek a little.   The command sets 
  917. the file pointer at the indicated location and returns the current 
  918. offset value, as measured from the beginning of the file, in the A 
  919. string.   This  allows the command to not only position  the  file 
  920. pointer  but  also allows it to return the value  of  the  current 
  921. position or the exact size of the file.
  922.  
  923. !BLT - Transfer to the A string from the block.   Append an  ASCII 
  924. formatted  one-  to  four-digit number to  indicate  the  starting 
  925. position,  within the block.  You can also append a comma followed 
  926. by another ASCII formatted number if desired.  The first number is 
  927. used  as  the starting position and must be in the range  0001  to 
  928. 2000.   Characters are taken from that point in the block.   If no 
  929. second  number  is indicated in the command,  255  characters  are 
  930. copied  from the block into the A string.   If a second number  is 
  931. given in the command,  that second number is used to determine the 
  932. number  of  characters copied into the  A  string.   For  example, 
  933. !BLT0001 will copy the first 255 characters (starting at  position 
  934. 1)  to  the A string,  making the A string  255  characters  long.  
  935. !BLT0001,00200 will copy 200 characters, starting at position 1 in 
  936. the block,  into the A string,  resulting in the A string having a 
  937. length of 200 characters.
  938.  
  939. !BLW  -  Block write.   This is direct access to the  GEM  f_write 
  940. command.   Append  a  one- to four-digit number  to  indicate  the 
  941. number  of characters to write.   The characters are written  from 
  942. the  block,  starting at position 1,  to the current file  pointer 
  943. position in the currently opened block access file.  The number of 
  944. characters actually written is returned in the A string.
  945.  
  946. !BLX  -  Block  transmit.   Append  two  ASCII  formatted  numbers 
  947. separated  by a comma.   The first number is used as the  starting 
  948. position  within  the block and the second number is used  as  the 
  949. ending position (NOTE:  NOT the length,  but the ending position).  
  950. No  more than 200 characters may be sent by this command,  so  you 
  951. need multiple !BLX commands to send longer blocks to a port.   The 
  952. characters are sent without any masking or translation.
  953.  
  954. !BLZ  -  Calculate  CRC.    Append  two  ASCII  formatted  numbers 
  955. separated by a comma.   These are used as the starting and  ending 
  956. locations  for the CRC calculation (NOTE:  Neither is a  length  - 
  957. both   are  positions  within  the  block).    The  two-byte   CRC 
  958. calculation  is  returned in the A string as well as  in  the  two 
  959. bytes in the block following the position indicated by the  second 
  960. number given.   For example,  !BLZ0001,1024 is executed,  the two-
  961. digit  CRC calculation is returned in the A string as well  as  in 
  962. the block in positions 1025 and 1026. 
  963.  
  964. The  block  access  commands are intended to  give  you  low-level 
  965. access to the disk and the modem.  Note that there is no "open new 
  966. file" command.   If you want to open a new file and use the  block 
  967. access  commands to place data within the file,  first use !DI  to 
  968. initialize the file, then !BLO followed by !BLW to write to it.
  969.  
  970. !BU - Blank unfill.   This is the inverse of the !BF command.   It 
  971. will strip off any trailing blanks from the A string.
  972.  
  973. !CC - Set password access code.  This must be followed by at least 
  974. 14 characters.   Whatever is appended to this command becomes  the 
  975. caller's password access code.
  976.  
  977. !CE  -  Concatonate  and execute.   Append a  series  of  elements 
  978. separated by + signs.   The elements are appended together and the 
  979. result  is  executed  as a command.   Elements may be A  or  B  to 
  980. indicate the A or B string,  S0 through S9 to indicate the  stored 
  981. strings,  L  for the selected chat line length,  N for the  caller 
  982. name,  P for the port number,  R for the baud rate, T for the time 
  983. and date line or a literal enclosed in double quotation marks (").  
  984. For  example,  !CE"!PRLLogging on port "+P+" at "+T   inserts  the 
  985. port number and the time/date line, just as it appears before main 
  986. menus,  and sends the resulting string to the caller.   Note  that 
  987. this will not affect the contents of either the A or B strings.
  988.  
  989. !CG  - Compare greater.   The A and B strings are  compared.   The 
  990. compare  flag  is  set true if A>B or false  if  A<=B.   The  full 
  991. strings are compared.
  992.  
  993. !CH - Chat.  Append a port number.  This is a remote chat call and 
  994. will pull the indicated port number into a SysOp chat "room"  that 
  995. operates  much like the chat room accessed using the  I1  command.  
  996. The calling port may terminate chat by sending a  CNTL-X.   Append 
  997. an  A after the port number and either caller may terminate  chat, 
  998. allowing use of the command as a caller-accessible private chat.
  999.  
  1000. !CI  -  Command interface.   Set up the A string  to  contain  the 
  1001. string to send to the interface before executing this command  and 
  1002. append a one-digit number to this command.   The string is sent to 
  1003. the interface and, unless the appended digit is a zero, the system 
  1004. waits  for the number of characters indicated by this digit to  be 
  1005. returned from the interface.  The bytes received are stored in the 
  1006. A string,  replacing the original contents.  Exercise caution when 
  1007. using  this command.   If more characters are indicated  than  the 
  1008. number actually returned by the command sent it could lock the ST.  
  1009. If  fewer  characters  are  indicated  than  the  number  actually 
  1010. returned, very unpredictable results could follow.
  1011.  
  1012. !CK - Checksum.   This calculates a two-byte checksum of the bytes 
  1013. in  the B string (sum of all ASCII values of  the  character,  mod 
  1014. 256) and places the result (in low-high order) into the first  two 
  1015. bytes of the A string.
  1016.  
  1017. !CM - Compare minus.   The A and B strings are compared,  using  a 
  1018. full-string compare.   If A<B the compare flag is set  true.   The 
  1019. compare flag is set false if A>=B.
  1020.  
  1021. !CP  -  Single character compare.   Append A or B  followed  by  a 
  1022. single character.  The first byte of the A or B string is compared 
  1023. to that single character and the compare flag is set true if  they 
  1024. are equal or false if they are not.
  1025.  
  1026. !DC  -  Close text file.   This command will close  any  currently 
  1027. opened text file.  If none are open, this command will do nothing.  
  1028. Note that returning to a main menu, logging off or opening another 
  1029. text file will also close the currently opened text file.
  1030.  
  1031. !DF - Find file.   Append a full file specification.   The file is 
  1032. located on the disk and the file specification given,  followed by 
  1033. the size of the file in K,  is returned in the A string.   If  the 
  1034. file is not located, the A string is returned empty.
  1035.  
  1036. !DI - Initialize file.   Append a full file specification.   A new 
  1037. file  is  opened as indicated,  deleting any file  that  may  have 
  1038. existed under that file specification.
  1039.  
  1040. !DO - Open disk file.  Append a full file specification.  If there 
  1041. is a text file currently opened by the port executing this command 
  1042. it is closed first, then the system attempts to open the indicated 
  1043. file.   There  is  no error message available on  this  statement.  
  1044. After executing this command,  if the first !DR statement  results 
  1045. in  an end-of-file condition either the file does not exist or  is 
  1046. an empty file.
  1047.  
  1048. !DR - Disk read.  Append A or B.  The next text record is read and 
  1049. placed  into the A or B string.   The file pointer is set  as  the 
  1050. beginning of the record read so that it can function to update the 
  1051. text record with no positioning command prior to the !DW command.
  1052.  
  1053. !DS - Disk seek.   Append a full file specification.   The size of 
  1054. the  indicated file,  in bytes,  is returned as an  8-digit  ASCII 
  1055. formatted  number in the A string.   If the file doesn't exist  it 
  1056. returns with A as an empty string.
  1057.  
  1058. !DW - Disk write.   Append A or B.   The contents of the indicated 
  1059. string  are  written  to the currently opened  text  file  at  its 
  1060. current file pointer position.   The record is written with only a 
  1061. RETURN character,  not a line feed followed by RETURN, which could 
  1062. cause  problems  if the file is then read by a word  processor  or 
  1063. text editor.   You can append a line feed before you do the !DW in 
  1064. order  to make the file compatible with word processors  and  text 
  1065. editors  but  the line feed is not required if the file is  to  be 
  1066. used only by Nite Lite.
  1067.  
  1068. !EQ - Equal.   This full-string compare sets the compare flag true 
  1069. if string A is exactly equal to string B or false if they are not.
  1070.  
  1071. !EX  -  Execute  string.   Append A or B.   The  contents  of  the 
  1072. indicated string are executed as a command.
  1073.  
  1074. !FA - Find with AND option.   Append A or B followed by a  string.  
  1075. The indicated string is searched.   If the appended string is  not 
  1076. found  within the indicated string the compare flag is set  false.  
  1077. If it is found the compare flag is not altered.
  1078.  
  1079. !FI - Find.   Append A or B followed by a string.   The  indicated 
  1080. string  is searched.   If the appended string is found within  the 
  1081. indicated  A or B string the compare flag is set true.   If it  is 
  1082. not found the compare flag is set false.
  1083.  
  1084. !FO  - Find with OR option.   Append A or B followed by a  string.  
  1085. The indicated string is searched.  If the appended string is found 
  1086. within the indicated A or B string,  the compare flag is set true.  
  1087. If it is not found, the compare flag is not altered.
  1088.  
  1089. NOTE:   To use !FA or !FO for the AND and OR options,  use !FI for 
  1090. the first compare,  then !FA or !FO for the second  compare.   For 
  1091. example,  to test if either "this" or "that" is contained in the A 
  1092. string,    execute   !FIAthis   then   execute   !FOAthat.    Four 
  1093. possibilities  result  from  whether or not "this"  is  found  and 
  1094. whether  or not "that" is found.   Following the logic of  setting 
  1095. the compare flag through these two commands, the compare flag will 
  1096. be  set  to  true unless both compares fail,  in  which  case  the 
  1097. compare flag will be false.   To test for both (the AND  function) 
  1098. use  !FA  instead of !FO and the compare flag will  be  set  false 
  1099. unless both compares succeed.
  1100.  
  1101. !GT - Get.  This command has several forms:
  1102.  
  1103. !GTA  or  !GTB followed by a stored string number  will  copy  the 
  1104. contents of the stored string to the indicated A or B string.
  1105.  
  1106. !GTC  followed  by a port number sets the A string  equal  to  the 
  1107. command being executed at the indicated port when this command  is 
  1108. executed.
  1109.  
  1110. !GTN followed by a port number sets the A string equal to the name 
  1111. of the caller logged onto the indicated port.
  1112.  
  1113. !GTT followed by a port number sets A equal to the time codes from 
  1114. the  indicated port.   Two bytes are returned and they are  binary 
  1115. values.   The  first byte is the time limit of the caller  at  the 
  1116. indicated  port and the second byte is the number of minutes  that 
  1117. caller  has  been on line.   If either value is  greater  than  99 
  1118. minutes, the byte is set to the binary value 100, so 100 indicates 
  1119. over 99 minutes.
  1120.  
  1121. !GTZ followed by a port number sets the A string equal to the chat 
  1122. name  (name selected by /n in the local chat room) of  the  caller 
  1123. logged onto the indicated port.   If the caller has not used /n to 
  1124. declare a chat name the callers logon name is returned.
  1125.  
  1126. !GV - Get system variable.  Append a single digit and the A string 
  1127. is set to the contents of the indicated system array string.
  1128.  
  1129. !HG - Hog.   Sometimes it is necessary to run several  interpreter 
  1130. commands without allowing any other port to operate,  such as when 
  1131. updating  a  file.   Executing  !HG will give  the  port  complete 
  1132. control  of  the system until a !UG command is  executed.   A  !UG 
  1133. command  is  automatically executed if the port times out  or  the 
  1134. caller drops carrier when !HG is being executed.
  1135.  
  1136. !HR - Input from port.  Append a port number.  This command can be 
  1137. used to control another port.  It will wait for a complete line of 
  1138. input  from  the other port.   This command is intended  for  such 
  1139. things as programmed links and should not be used to wait for user 
  1140. input.   There  is no "escape" from this command if the caller  on 
  1141. the indicated port drops carrier, times out or simply never hits a 
  1142. RETURN character.  The entered line is returned in the A string.
  1143.  
  1144. !HW - Write to port.  Append a port number.  The contents of the A 
  1145. string  are  written to the indicated port.
  1146.  
  1147. !IE  -  If equal.   Append a single character followed by  a  full 
  1148. command.   If the character is equal to the first character of the 
  1149. A string, the appended command is executed.
  1150.  
  1151. !IF - If false.   Append a command.  If the compare flag is false, 
  1152. the appended command is executed.
  1153.  
  1154. !IN - Input.  Append A or B.  The system will wait for a full line 
  1155. of input,  which is stored in the indicated string when the caller 
  1156. presses  RETURN  (or a RETURN is issued automatically  because  of 
  1157. word wrap).
  1158.  
  1159. !IS - Insert string.   Append a single digit.  The contents of the 
  1160. A string are inserted into the B string at the position  following 
  1161. that  indicated  by the appended digit.   For example,  if  the  A 
  1162. string  contains AAA and the B string contains  BBB,  the  command 
  1163. !IS2 results in the B string equalling BBAAAB.
  1164.  
  1165. !IT - If true.   Append a command.   If the compare flag is  true, 
  1166. the appended command is executed.
  1167.  
  1168. !JL - Jump to label.   Append a label.   The search proceeds  from 
  1169. that  point  toward  the  end  of the  file  for  a  matching  !LL 
  1170. statement.   If  the  label  is not found,  an  error  message  is 
  1171. displayed and the caller is returned to the menu.
  1172.  
  1173. !JP - Jump.  Append a digit.  Execution is transferred to the last 
  1174. executed  matching !MK command within the command  file  currently 
  1175. being executed.   The matching !MK command must have been executed 
  1176. for  the  !JP  command to operate properly unless  using  !JP9  to 
  1177. return from a subroutine called from a !JS command.  Note that !JP 
  1178. must NOT be the last statement in a command file.   When the  last 
  1179. statement is read in, the command file is closed and the file must 
  1180. be  open  in order to properly execute !JP.   If !JP is  the  last 
  1181. logical  statement in a command file,  place any other command  on 
  1182. the line following the !JP.
  1183.  
  1184. !JS  -  Jump to subroutine.   This is a  non-recursive  subroutine 
  1185. jump.  The subroutine must exist between the !JS statement and the 
  1186. end of file.  Append a label to this command.  The subroutine must 
  1187. begin  with  a  matching !LL statement and must end  with  a  !JP9 
  1188. command.   This  subroutine  jump command acts like !MK9  and  !JL 
  1189. command all on one line.
  1190.  
  1191. !LA or !LB - Length test.   Append a single digit.   If the length 
  1192. of  the  indicated A or B string is greater than or equal  to  the 
  1193. appended  digit,  the  compare flag is set true.   If  the  string 
  1194. length is less, the compare flag is set false.
  1195.  
  1196. !LL  - Label.   Append a label.   This command is used to  mark  a 
  1197. location  to  be used by a !JL or  !JS  command.   The  characters 
  1198. between the !LL and the RETURN at the end of the command line  are 
  1199. compared to the chararacters between the !JL or !JS and the RETURN 
  1200. at the end of that command line and must be exactly equal.
  1201.  
  1202. !LN  - Length.   The length of the B string is stored as a  single 
  1203. binary digit in the A string.
  1204.  
  1205. !MK  -  Mark.   Append  a single  digit.   When  this  command  is 
  1206. executed,  it  marks  a location that can be branched  to  with  a 
  1207. matching !JP command.
  1208.  
  1209. !MS - Midstring.  This command sets the A string and sets it equal 
  1210. to a portion of the B string.  It has several forms.  At least two 
  1211. digits,  S  followed by a single digit or NN (two upper case  N's) 
  1212. must be appended to indicate a starting location.   Two additional 
  1213. digits  may be appended to indicate a length.   A single S may  be 
  1214. appended,  which causes the extracted characters to be taken  from 
  1215. the B string.   The way these various options are interpreted  are 
  1216. explained in the following examples:
  1217.  
  1218. !MS0203  sets the A string equal to the second,  third and  fourth 
  1219. characters of the B string.  The B string is not altered.
  1220.  
  1221. !MSNN  sets  the A string equal to the B string  starting  at  the 
  1222. location  where the string was found in the last !FI,  !FA or  !FO 
  1223. command.  Since no length is given, all characters from that point 
  1224. to the end of the B string are copied to the A string.
  1225.  
  1226. !MSNNS  is exactly the same as the !MSNN command except  that  the 
  1227. characters  copied  are  also removed  from  the  B  string.   For 
  1228. example,  if  NN indicates that the last !FI,  !FA or !FO  command 
  1229. found the string at position 3 and B were equal to abcdefg,  the A 
  1230. string  would be set equal to cdefg and the B string would be  set 
  1231. equal to ab.
  1232.  
  1233. !MSS203 sets the A string equal to the characters of the B  string 
  1234. starting  at  the  position indicated by the  first  character  of 
  1235. stored string two plus the two characters following that position.
  1236.  
  1237. !PG  - Pointer get.   The position of the first character read  by 
  1238. the  last  executed !DR,  !SE or !SF command is stored  in  the  A 
  1239. string as a six-digit ASCII format number.
  1240.  
  1241. !PI - Push.   This sets up the system strings as a 9-element  FIFO 
  1242. stack using system string 0 as a "head" pointer.  !PI pushes the A 
  1243. string  onto  this "stack" and increments the  pointer  in  system 
  1244. string 0.
  1245.  
  1246. !PL - Prompt line.   Append A or B.   The indicated string is sent 
  1247. to  the port with no RETURN character so that it can be  used  for 
  1248. things like prompts for questions.
  1249.  
  1250. !PR  -  Print.   This  command has  several,  "printing"  what  is 
  1251. indicated  by  sending  the  information,  followed  by  a  RETURN 
  1252. character, to the port.  These various forms are:
  1253.  
  1254. !PRA sends the contents of the A string.
  1255.  
  1256. !PRB sends the contents of the B string.
  1257.  
  1258. !PRL  is  a  "print immediate" form.   Append  the  string  to  be 
  1259. printed.
  1260.  
  1261. !PRN prints the caller's name.
  1262.  
  1263. !PRT prints the time and date line.
  1264.  
  1265. !PS - Pointer set.   This is the inverse of the !PG command.   The 
  1266. contents  of  the A string are interpreted as an  ASCII  formatted 
  1267. number  and is used to set the file pointer in the currently  open 
  1268. text file.
  1269.  
  1270. !PT - Put.  Append A or B and a digit.  The contents of the A or B 
  1271. string  are copied to the indicated stored string.   For  example, 
  1272. !PTA3  will copy the contents of the A string to stored string  3.  
  1273. There are also other forms of the !PT command:
  1274.  
  1275. !PTL copies the A string to the autologoff command.   The A string 
  1276. must contain the command to be executed when a caller times out.
  1277.  
  1278. !PTN  copies  the  A  string  into  the  caller's  name  variable, 
  1279. changing the caller's logon name.
  1280.  
  1281. !PTZ copies the A string into the caller's chat name variable.
  1282.  
  1283. !PV - Put to system array.  Append a single digit and the contents 
  1284. of the A string are copied into the indicated system array string.
  1285.  
  1286. !RD - Random digit.   This puts a random digit (0 to 9) into the A 
  1287. string.
  1288.  
  1289. !RN - Random compare.   Append a single digit.   A random digit is 
  1290. generated.   If  the random digit is less than the appended  digit 
  1291. the compare flag is set true.   Otherwise, the compare flag is set 
  1292. false.
  1293.  
  1294. !SB - Strip byte.   Append a single digit.   The digit is used  to 
  1295. indicate  the  position  of a character in  the  B  string.   That 
  1296. character  is removed from the B string.   For example,  if the  B 
  1297. string  contained abcde,  executing !SB4 would leave the B  string 
  1298. equal to abce.
  1299.  
  1300. !SC  -  Strip character.   Append a character.   The B  string  is 
  1301. searched  for  the  matching character.   If  it  is  found,  that 
  1302. character  is  stripped  from the B  string.   If  that  character 
  1303. appears more than once,  the first occurrence of the character  is 
  1304. the one stripped from the string.   For example, with abcde in the 
  1305. B string, executing !SCc would leave abde in the B string.
  1306.  
  1307. !SE - Search equal.   Append A or B and a full file specification.  
  1308. The  file indicated must be a text file.   It is searched for  the 
  1309. first  occurrence of a string exactly equal to the A or B  string, 
  1310. as indicated.   If it is found,  the file is left open, positioned 
  1311. at the line following the line containing the string exactly as if 
  1312. a !DR command had been executed (i.e.,  a !PG will get the pointer 
  1313. indicating  the beginning of the line containing the  string)  and 
  1314. the  compare flag is set true.   If it is not found,  the  compare 
  1315. flag is set to false and the file is closed.
  1316.  
  1317. !SF - Search for.   Append A or B and a file specification.   This 
  1318. is identical to the !SE command except that,  instead of searching 
  1319. for a line exactly equal to the indicated A or B string,  the A or 
  1320. B  string  is used to search each record in the  text  file.   The 
  1321. search  completes  at the first line in the file that  contains  a 
  1322. match of the contents of the A or B string.
  1323.  
  1324. !SG - Get system variable.   This command reads particular  system 
  1325. variables.   The results of the !SG command are returned in the  A 
  1326. string.  The forms of this command are:
  1327.  
  1328. !SGB gets the baud rate code.  This will be a binary character and 
  1329. will be equal to 4,  5, 6, 8 or C to indicate, in that order, 300, 
  1330. 600, 1200, 2400 or 9600 baud.
  1331.  
  1332. !SGC  gets  the number of characters waiting for  input  from  the 
  1333. modem.  This is returned as a one-digit binary number.
  1334.  
  1335. !SGD  gets the download count.   Each time a file is  successfully 
  1336. downloaded this number is incremented.
  1337.  
  1338. !SGL  sets the A string to a binary 1 if the line feeds are on  at 
  1339. that port or to a binary 0 if the line feeds are off at that port.
  1340.  
  1341. !SGM  sets the A string equal to the highest message  number  that 
  1342. has been read by the caller.   When the caller first logs on, this 
  1343. is  equal to the new message pointer in the password  code.   When 
  1344. the caller logs off, this number is used to update the new message 
  1345. pointer before it is resaved to the password file.
  1346.  
  1347. !SK  - Scan key.   Append A or B.   If a character is waiting  for 
  1348. input it is placed into the A or B string and the compare flag  is 
  1349. set to false.  Another command may be appended to this command and 
  1350. if it is,  that command will be executed if a character is waiting 
  1351. when  the  !SK  command is executed.   If there  is  no  character 
  1352. waiting  for  input the contents of the indicated string  are  not 
  1353. changed  and  the compare flag is set false.   In  this  case  any 
  1354. appended command is ignored.
  1355.  
  1356. !SL - Skip lines.   Append a digit.   The number of lines equal to 
  1357. the  appended  digit  are skipped in  the  file  before  execution 
  1358. resumes.
  1359.  
  1360. !SP  -  System  put.   This is the inverse  of  the  !SG  command.  
  1361. Information in the A string are written to a system variable.  The 
  1362. various forms of this command are:
  1363.  
  1364. !SPD writes to the download count.
  1365.  
  1366. !SPL writes to the line feed flag.
  1367.  
  1368. !SPM writes the number of the highest message read.
  1369.  
  1370. !SPN writes to the upload count.
  1371.  
  1372. See  also the !SG command for the various formats  required.   The 
  1373. information written by the !SP command must be in the same  format 
  1374. as the information read by the !SG command.
  1375.  
  1376. !SS  - Set screen.   There are three formats for this command  all 
  1377. relating to the screen width controls used in the two chat  rooms.  
  1378. The  screen width is used to control the formatting of  the  lines 
  1379. sent back to the caller from the chat rooms.  The three formats of 
  1380. this command are:
  1381.  
  1382. !SS? returns the current screen width to the A string.
  1383.  
  1384. !SS00 turns off the screen width so that no formatting is done  on 
  1385. lines sent to the caller in the chat rooms.
  1386.  
  1387. !SS followed by a 2-digit number between 36 and 99 set the  screen 
  1388. width to that value.   Any number below 36 will be interpreted  as 
  1389. if the number were 00, turning off the screen width.
  1390.  
  1391. !ST - Store.  This command has several forms, which are:
  1392.  
  1393. !STA and !STB requires that a string be appended.   The string  is 
  1394. stored in the indicated A or B string.
  1395.  
  1396. !STD sets the day number in the SP interface's real time clock.  A 
  1397. two digit number must be appended to this command.
  1398.  
  1399. !STF requires an appended port number followed by a  digit.   This 
  1400. command  will  set  the  A  string  equal  to  the  stored  string 
  1401. (indicated by the digit) of the indicated port.   This allows  any 
  1402. port to read any of the stored strings from any port.
  1403.  
  1404. !STH stores the hours into the SP interface real time clock.   The 
  1405. hours are indicated by an appended two-digit number.
  1406.  
  1407. !STM  stores  the minutes into the SP interface real  time  clock.  
  1408. The minutes are indicated by an appended two-digit number.
  1409.  
  1410. !STP  returns the port number.   Append A or B to  indicate  which 
  1411. string is to receive this character.   This will convert the  port 
  1412. number  so  that  ports 10 through 12 will  be  indicated  by  the 
  1413. letters A, B and C.
  1414.  
  1415. !STS  sets  the  seconds  in the SP  interface  real  time  clock.  
  1416. Indicate  the  number of seconds to set by appending  a  two-digit 
  1417. number.
  1418.  
  1419. !STT  stores  the contents of the A string to  any  port's  stored 
  1420. string zero.  Append the number of the port.
  1421.  
  1422. !SW - Swap or Set with.  With nothing appended this command simply 
  1423. swaps  the contents of the A and B strings.   Other forms of  this 
  1424. command are:
  1425.  
  1426. !SWC places the caller's password access code into the A string.
  1427.  
  1428. !SWD  places the time and date as an encoded 8-digit  number  into 
  1429. the A string.  The format is MMDDYYHHMMSS.
  1430.  
  1431. !SWN places the caller's logon name into the A string.
  1432.  
  1433. !SWT places the time/date line into the A string.
  1434.  
  1435. !SX - Set execute description.   Append a description and whenever 
  1436. an  interpreter  command is being executed that  description  will 
  1437. show in the result of the I2 command or the /W executed in  either 
  1438. chat room.  !SX with nothing appended turns this function off.
  1439.  
  1440. !SY - System variable access.   There are many system variables at 
  1441. work  which control or track the functions of the  BBS.   Some  of 
  1442. them  are general variables that control the entire operation  and 
  1443. others  are specific to the various ports.   This  command  allows 
  1444. reading  and writing these variables.   Append R to read or  W  to 
  1445. write,  plus a letter to indicate which variable to read or write.  
  1446. Some  of  the  variables  will  require  additional   information.  
  1447. Information read or written is normally returned to or taken  from 
  1448. teh A string unless otherwise noted.  The variables accessible are 
  1449. listed by the letters used:
  1450.  
  1451. A - background port number.   This variable may not be changed, so 
  1452. this is read only.
  1453.  
  1454. B - Highest message number on line.  
  1455.  
  1456. C - Lowest message number on line.
  1457.  
  1458. D - Maximum number of ports on the interface.
  1459.  
  1460. E - Caller number,  which is the counter that is saved to the STAT 
  1461. file each time a caller logs on.   Since STAT is never read except 
  1462. when  the  BBS is initializing,  this command is the only  way  to 
  1463. change your caller number without taking the BBS down.
  1464.  
  1465. F  - Message base names.   Append a space or upper case letter  to 
  1466. indicate the message base designator.
  1467.  
  1468. G - Non-password access code.
  1469.  
  1470. H  -  Main (default) directory.   This is normall read  in  during 
  1471. initialization of the BBS.   Be careful if you do change it.   The 
  1472. new  directory must contain all of the required system  files  and 
  1473. menus.
  1474.  
  1475. I - Highest message index entry.  The pointers to the message base 
  1476. are kept in an array.   This is the number of the highest  element 
  1477. used  in that array and indicates the number of messages  (public, 
  1478. private and deleted) currently on line.
  1479.  
  1480. J  - Index entry.   This is the array of  message  numbers.   Each 
  1481. entry  contains  the  message  number  plus  the  codes   required 
  1482. (public/private/delete  flag,  message  base  designator  and  the 
  1483. letter  of  the file containing the message).   Append  the  entry 
  1484. number of the element to access.
  1485.  
  1486. K - Locator array.   Each index has an entry in both the index and 
  1487. this  locator array.   The locator is the offset into the  message 
  1488. base  file  of the beginning of the  message.   Append  the  entry 
  1489. number of the element to access.
  1490.  
  1491. L - Chat capture routing.   This will contain zero if remote  chat 
  1492. capture is off (to capture to the port 0 screen use the I7 command 
  1493. and route chat capture to CON:  instead of a disk file).   If  the 
  1494. contents  are  non-zero,  chat  capture is  being  routed  to  the 
  1495. indicated port.
  1496.  
  1497. M  -  Forbidden words array.   Append a digit  to  indicate  which 
  1498. element is to be accessed within this array.
  1499.  
  1500. N - Number of entries in the download list.  Append a port number.
  1501.  
  1502. O  - Download list entries.   Append a port number and a digit  to 
  1503. indicate which port and which of the ten entries to access.
  1504.  
  1505. P - Terminal port.  This will contain the number of the port being 
  1506. used  to  call out.   If no port is being used this  command  will 
  1507. return a slash (/) character.
  1508.  
  1509. Q  - Telegram mask flag.   Append the port  number.   0  indicates 
  1510. telegrams are off and 1 indicates that they are on.
  1511.  
  1512. R - Linked chat forewarding array.   Append a number between 0 and 
  1513. 49.  This is where lines are kept, for sending to the host system, 
  1514. when the BBS is linked to a host system.
  1515.  
  1516. S  - Linked chat room array.   Append a number between 0  and  49.  
  1517. This is where lines are received from callers when the BBS is  the 
  1518. host in a link or when it is not linked and where lines are  taken 
  1519. to send to callers who are in linked chat.
  1520.  
  1521. T  -  Local chat room array.   Append a number between 1  and  20.  
  1522. This  is the array where the lines entered in the local chat  room 
  1523. are kept.
  1524.  
  1525. U - Head pointer for the linked chat forewarding array.
  1526.  
  1527. V - Head pointer for the linked chat room array.
  1528.  
  1529. W - Head pointer for the local chat room array.
  1530.  
  1531. X - Append a port number.  This is the tail pointer for the linked 
  1532. chat room array for the indicated port.
  1533.  
  1534. Y - Append a port number.   This is the tail pointer for the local 
  1535. chat room array for the indicated port.
  1536.  
  1537. Z - This is a 1 if character masking is on or 0 if it is off.
  1538.  
  1539. !TG - Telegram on/off.  Append ON or OFF to turn telegrams to your 
  1540. port on or off.
  1541.  
  1542. !TI - Change time limit.  Append +, - or = followed by a two-digit 
  1543. number.   This  will  alter the number of minutes allowed  on  the 
  1544. current call.
  1545.  
  1546. !TR - Trace.   Append ON or OFF.   This must be executed within  a 
  1547. command file.   Trace is automatically turned off when the  caller 
  1548. returns  to a menu or logs off (whether by  J3,  J3A,  timeout  or 
  1549. dropeed  carrier).   When  trace  is on,  after  each  command  is 
  1550. executed,  the prompt "tr?" appears and the system will wait for a 
  1551. one-character input.  Entries include:
  1552.  
  1553. A or B shows the contents of the indicated working string.
  1554.  
  1555. C  shows  true or false according to the setting  of  the  compare 
  1556. flag.
  1557.  
  1558. a digit (0-9) shows the contents of the indicated stored string.
  1559.  
  1560. x or X exits trace mode and returns to the menu.
  1561.  
  1562. RETURN proceeds to execute the next command.
  1563.  
  1564. Note that all the above functions except x (or X) and RETURN  will 
  1565. return to the "tr?" prompt for the next command without  executing 
  1566. another command until a RETURN character is received.
  1567.  
  1568. !UH - Unhog.  Turns hog mode off.  See also !HG.
  1569.  
  1570. !UP  - Upper.   Append A or B.   All lower case characters in  the 
  1571. indicated string are converted to upper case.
  1572.  
  1573. !WF  -  Wait  for key.   Append A or B followed  by  a  string  of 
  1574. characters.   This  command will stop execution at the port  until 
  1575. one  of the characters in the appended string is  received.   When 
  1576. received, the character is stored in the indicated string.
  1577.  
  1578. !WK - Wait key.   Append A or B.  This command will stop execution 
  1579. at  the port until any character is received.   The  character  is 
  1580. stored in the indicated string.
  1581.  
  1582. !X - Binary calculation mode.   Append A or B,  an operator and an 
  1583. operand.   A one-step operation is computed from this  information 
  1584. using  the  first byte of the indicated A or B string as  the  "x" 
  1585. component  in the desriptions that follow and the operand  as  the 
  1586. "y"  component.   The  operators that yield a  result  place  that 
  1587. result  in  the  A or B string as indicated for  use  as  the  "x" 
  1588. component.   All  computations are done in binary and the  results 
  1589. are mod 256,  so all results are positive one-byte indicators.  If 
  1590. the result of a computation is zero, the compare flag is set false 
  1591. and if the result is not zero the compare flag is set true.
  1592.  
  1593. The operators used are:
  1594.  
  1595. % computes the percentage as x=100*x/y
  1596.  
  1597. = sets x=y
  1598.  
  1599. + computes x+y (addition)
  1600.  
  1601. - computes x-y (subtraction)
  1602.  
  1603. * computes x*y (multiplication)
  1604.  
  1605. / computes x/y (division)
  1606.  
  1607. < sets compare flag according to x<y
  1608.  
  1609. > sets compare flag according to x>y
  1610.  
  1611. # sets compare flag according to x=y
  1612.  
  1613. A logical result of x AND y
  1614.  
  1615. O logical result of x OR y
  1616.  
  1617. I inverts x (actually performs 255-x)
  1618.  
  1619. The operands may be:
  1620.  
  1621. A or B to use the first byte of a working string for "y"
  1622.  
  1623. S0 to S9 to use an element of the string array
  1624.  
  1625. a numeric between 0 and 255 to use a constant
  1626.  
  1627. !X  commands may also be stacked to provide multiple  computations 
  1628. as one statement.   To stack them,  simply append them together in 
  1629. the  order they are to be executed.   They will be  executed  from 
  1630. left to right.
  1631.  
  1632. !Y  -  Integer computations.   This command is similar to  the  !X 
  1633. command, requiring A or B, an operator and an operand.  Instead of 
  1634. operating  using  one-byte values,  the !Y command  uses  positive 
  1635. integers in ASCII format numbers up to six digits in length.   !YA 
  1636. and  !YB  use the same operands as !X but not  all  operators  are 
  1637. allowed.   !Y uses %, =, +, -, *, /, <, > and # but not the binary 
  1638. A,  O and I operators.  For descriptions of the operators and list 
  1639. of operands, see the description for the !X command.
  1640.  
  1641. RANDOM ACCESS FILE COMMANDS
  1642.  
  1643. !ZC - Close random access file.  Note - do not close a file unless 
  1644. there is actually a file open or some rather unpredictable  things 
  1645. can happen to your port 0.
  1646.  
  1647. !ZG - Get.   Append A or B.   The next 80-character record is read 
  1648. from  the  currently opened file and is stored  in  the  indicated 
  1649. string.  When the record has been read, the file pointer is set to 
  1650. the beginning of the next sequential record in the file.
  1651.  
  1652. !ZN  -  Open  new  random  access  file.    Append  a  full   file 
  1653. specification.   Random  access  files  are  opened  assuming  the 
  1654. records  are  80  character long.   !ZN will create  a  new  file, 
  1655. deleting  any  file  that  may have existed  with  the  same  file 
  1656. specification.   Note  that the file pointer is not set  when  you 
  1657. open  a new file so you must use !ZS to point it to record  number 
  1658. zero before writing to the file.
  1659.  
  1660. !ZO - Open random access file.   Append a full file specification.  
  1661. The file must be a random access file organized with  80-character 
  1662. records such as files set up using the !ZN command.  Note that the 
  1663. file pointer is not set when the file is opened so you must use  a 
  1664. !ZS command to point to a record before reading or writing.
  1665.  
  1666. !ZP - Put.   Append A or B.  The indicated string (or the first 80 
  1667. characters  of  the indicated string if the actual length  of  the 
  1668. string  is  greater) is written to the random access file  at  the 
  1669. current pointer position.  After writing the record the pointer is 
  1670. set at the beginning of the next sequential record in the file.
  1671.  
  1672. !ZS - Seek.   Append A or B.  The indicated string must contain an 
  1673. ASCII  format  integer.   The file pointer is set  to  the  record 
  1674. corresponding to the number.   Note that record numbers begin with 
  1675. record  zero and that there is no way to check for end of file  so 
  1676. you must keep track of the number of records in the random  access 
  1677. files you are maintaining.
  1678.  
  1679.  
  1680.  
  1681.