home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / C64 / BBS / DTJPROG.ARC / DTJPROG.TXT
Text File  |  2000-06-30  |  45KB  |  1,036 lines

  1.   ─╘╩-┬┬╙ ╨ROGRAMMER'S ╔NFORMATION
  2.  
  3.    2/23/91 - ╨RELIMINARY
  4.  
  5.    ╞OR REVISIONS 910202 AND HIGHER
  6.  
  7.  ------------------------------------------------------------------------------
  8. ╘HE INFORMATION GIVEN IN THIS TEXTFILE IS FOR THE USE OF PROGRAMMERS WHO WISH
  9. TO WRITE THEIR OWN ┼[╪]┼├ MODULES FOR THE ─╘╩-┬┬╙.  ╒SE THIS INFORMATION AT
  10. YOUR OWN RISK!  ─╘╩ ╙OFTWARE ASSUMES NO RESPONSIBILITY FOR ANY DAMAGE CAUSED
  11. BY THE USE OF THIS INFORMATION.  ╘HE INFORMATION IN THIS TEXTFILE IS SUBJECT
  12. TO CHANGE WITHOUT NOTICE!
  13.  ------------------------------------------------------------------------------
  14.  
  15. ╘HIS TEXTFILE CONTAINS A MAP OF MEMORY LOCATIONS USED BY THE ─╘╩-┬┬╙.  ┴LTHOUGH
  16. MOST OF THESE LOCATIONS ARE NOT USABLE BY MODULES YOU MAY PROGRAM, SOME ARE,
  17. AND THE REST ARE INCLUDED SO THAT YOU WILL KNOW WHICH MEMORY LOCATIONS ARE
  18. USED BY THE ┬┬╙.  ╠OCATIONS MARKED FOR FUTURE USE SHOULD NOT BE USED BY YOUR
  19. PROGRAM AS THEY MAY CREATE CONFLICTS IN FUTURE REVISIONS OF THE ┬┬╙.
  20.  
  21. ╘HIS MEMORY MAP ALSO LISTS THE ENTRY POINTS FOR THE VARIOUS MACHINE LANGUAGE
  22. ROUTINES USED BY THE ─╘╩-┬┬╙.  ╘HE MAJORITY OF THESE ROUTINES ARE ╬╧╘ INTENDED
  23. TO BE USED BY YOUR PROGRAMS.  ╚OWEVER, THERE ARE A COUPLE THAT YOU CAN USE, AND
  24. THE USE OF THESE ROUTINES IS DESCRIBED LATER IN THIS TEXTFILE.  ╨LEASE DO NOT
  25. USE ANY ┬┬╙ MACHINE LANGUAGE ROUTINES OTHER THAN THE ONES DESCRIBED AFTER THE
  26. MEMORY MAP!  ═OST ROUTINES ARE SUBJECT TO CHANGE, AND MAY EVEN VARY WITHIN THE
  27. SAME REVISION UNDER DIFFERENT HARDWARE CONDITIONS.
  28.  
  29. ┬ESIDES THE MEMORY LOCATIONS LISTED HERE, THE ┬┴╙╔├ AND ╦ERNAL ROUTINES ALSO
  30. USE THEIR OWN MEMORY LOCATIONS.  ╘HE USE OF THEM ARE DESCRIBED IN MEMORY MAP
  31. BOOKS FOR THE ├OMMODORE 64.
  32.  
  33. ╘HE FOLLOWING ╥┴═ LOCATIONS ARE AVAILABLE FOR YOUR USE:
  34.  
  35. ┌ERO PAGE: 02, 92H, 96H, 9┬-9├H, 9┼-9╞H, ┬┼-┬╞H, ├1-├4H.
  36. ╧THER:     0310-0313H, 032┼-032╞H, 0334-033┬H, 03╞├-03╞╞H, 07╞8H,
  37.    07╞─-07╞╞H, ├000-├11┬H.
  38.  
  39. ╙OME OF THESE ADDRESSES ARE LISTED AS USED IN VARIOUS ├OMMODORE 64 MEMORY
  40. MAPS, BUT YOU SHOULD BE ABLE TO USE THEM WITHOUT CAUSING ANY PROBLEMS.  ╘HE
  41. VALUES STORED IN THESE LOCATIONS WILL NOT BE DESTROYED AFTER YOUR MODULE
  42. RETURNS CONTROL TO THE ┬┬╙ PROGRAM.
  43.  
  44. ┘OU MAY ALSO USE ANY MEMORY LOCATION LISTED BELOW AS USED FOR TEMPORARY
  45. STORAGE, BUT REMEMBER THAT VALUES STORED IN THESE LOCATIONS ARE SUBJECT TO
  46. CHANGE AFTER YOUR MODULE HAS RETURNED CONTROL BACK TO THE ┬┬╙.
  47.  
  48. ┴ ┬┴╙╔├ VARIABLE LIST IS ALSO GIVEN.  ═OST OF THESE VARIABLES WILL NOT BE
  49. USABLE BY YOUR PROGRAM, BUT THEY ARE ALL LISTED ANYWAY JUST TO MAKE THE LISTING
  50. COMPLETE.
  51.  
  52.  ------------------------------------------------------------------------------
  53. ─╘╩-┬┬╙ ═EMORY ═AP (╥EVISION 910119):
  54.  ------------------------------------------------------------------------------
  55. ╙IMPLIFIED (SHOWS ╥┴═ UNDER ╥╧═):
  56.  ------------------------------------------------------------------------------
  57.  
  58. 0000  -  ╙YSTEM/┬┬╙ ╥┴═ VARIABLES
  59. 0400  -  ╓IDEO ═EMORY
  60. 0800  -  ├OMPLIED ┬┴╙╔├ CODE & VARIABLES
  61. 9┼34  -  ═.╠. ═ODULE (╙.5) (╘ERMINAL / ┬AUDRATE TUNING FUNCTIONS)
  62. ┴000  -  ┼DITOR/╨ROTOCOL/┼XEC-MODULE BUFFER
  63. ┬158  -  ─ATA ═ODULE (╙.3) (CONFIGURATION DATA)
  64. ┬┬4┼  -  ═.╠. ═ODULE (╙.4) (┼DITOR & ╞ILESERVER FUNCTIONS)
  65. ├000  -  ┬UFFER AREAS
  66. ├15╞  -  ═.╠. ═ODULE (╙.2) (╔NIT. AND MAIN ═.╠.)
  67. ─000  -  ╔/╧ ╨ORTS (╥┴═ UNUSED - FUTURE USE)
  68. ┼000  -  ┬ASES FILE MESSAGE POINTERS
  69. ╞72├  -  ─ATA ═ODULE (╙.6) (┴WAITING-├ALL ╙CREEN / ╙HAREWARE SCREEN)
  70.  
  71.  ------------------------------------------------------------------------------
  72. ─ETAILED ═EMORY ═AP (SHOWS ─╘╩-┬┬╙ UNIQUE ADDRESSES ONLY):
  73.  ------------------------------------------------------------------------------
  74.  
  75. 0001       -  ┬ANK SWITCH PORT
  76.   ╘HE ─╘╩-┬┬╙ STORES THE EDIT BUFFER, LOADABLE MACHINE LANGUAGE
  77.   MODULES, SOME ADDITIONAL MACHINE LANGUAGE, AND THE S.3 CONFIGURATION
  78.   FILE UNDER THE ┬┴╙╔├ ╥╧═.  ═ESSAGE POINTERS AND TABLES, THE AWAITING-
  79.   CALL SCREEN, SHAREWARE NOTICE SCREEN, AND ╦ERNAL ╥╧═ ╬═╔ ROUTINES ARE
  80.   STORED UNDER THE ╦ERNAL ╥╧═.
  81. 008┬-008├ -  ┴├╔┴ BASE ╔/╧ POINTER (╙WIFTLINK ONLY).
  82. 008─      -  ( FUTURE USE ).
  83. 008┼       -  ═ENU-┴BORT ┼NABLE FLAG
  84.   ╙TORING A NON-ZERO VALUE HERE CAUSES ALL FILE #2 OUTPUT (THE ┬┬╙
  85.   OUTPUT CHANNEL) TO BE DISCARDED WHEN THERE IS DATA IN THE ╥╙-232
  86.   INPUT BUFFER.  ╘HIS LOCATION IS ZEROED WHEN THE ┬┬╙ REQUESTS INPUT
  87.   FROM THE USER.  ╘HIS LOCATION IS USED TO IMPLIMENT THE ┬┬╙
  88.   "QUICK-KEYS".
  89. 008╞      -  ( FUTURE USE ).
  90. 00┴0-00┴2 -  ╩IFFY CLOCK - USED FOR PROTOCOL TIMING AND TIMEOUT CHECKS.
  91. 00┴5/00┴6 -  ╒SED BY ╔╥╤ ROUTINE.
  92. 00┬0/00┬1 -  ╘EMPORARY WORK POINTER.
  93. 00┬2/00┬3 -  ╘EMPORARY WORK POINTER.
  94. 00╞┬/00╞├ -  ╒SED BY ╧╨┼╬ ROUTINE.
  95. 00╞─/00╞┼ -  ╘EMPORARY WORK POINTER.
  96.  
  97. 02┴7      -  ┬┬╙ ╔NPUT/╧UTPUT ├ONTROL.
  98.   ├ONTROLS ╔/╧ THROUGH THE ┬┬╙ ╔/╧ CHANNEL (FILE #2).  ╓ALID VALUES
  99.   ARE:
  100. ┬IT 0 - 0 = ┴╙├╔╔ TRANSLATION OFF
  101. 1 = ┴╙├╔╔ TRANSLATION ON
  102. ┬IT 1 - 0 = ╥╙-232 ╔/╧ ONLY
  103. 1 = ╥╙-232 AND CONSOLE ╔/╧
  104.   (┬OTH BITS ZERO ALLOWS RAW ╥╙-232 ╔/╧, OTHERWISE LINEFEED AND
  105.   XON/XOFF FLOW CONTROL ARE ACTIVE.)
  106. 02┴8      -  ═ODEM DEVICE NUMBER.
  107.   ╬ORMALLY 2, HOWEVER MAY BE CHANGED TO 4 TO ROUTE OUTPUT TO PRINTER.
  108.   ╙INCE THIS SHOULD ONLY BE DONE ON CONSOLE MODE, DO NOT CHANGE THIS
  109.   LOCATION IN YOUR MODULES.
  110. 02┴9      -  ├ARRIER-DETECT MASK.
  111.   ┴LLOWS FOR CARRIER-DETECT TO BE TURNED ON OR OFF.  ╘HIS IS USED TO
  112.   PREVENT DROPPED CARRIER CONDITIONS DURING CONSOLE MODE WHILE IN
  113.   MACHINE LANGUAGE ROUTINES.  (┬┴╙╔├ HAS IT'S OWN CARRIER-DETECT
  114.   MASK VARIABLE.)  ╓ALID VALUES ARE:
  115. #$00  -  ┬┬╙ IGNORES CARRIER
  116. #$10  -  ┬┬╙ DETECTS CARRIER
  117. 02┴┴      -  ╠INEFEED FLAG.
  118.   ┴ NON-ZERO VALUE WILL SEND A LINEFEED AFTER EACH #$0─ CODE SENT TO THE
  119.   MODEM IF THE ┬┬╙ INPUT/OUTPUT CONTROL IS NON-ZERO.
  120. 02┴┬      -  ╪╧╞╞ FLAG.
  121.   ┴ NON-ZERO VALUE WILL PAUSE OUTPUT VIA THE ┬┬╙ OUTPUT CHANNEL IF THE
  122.   ┬┬╙ INPUT/OUTPUT CONTROL IS NON-ZERO.
  123. 02┴├      -  ╓IDEO WIDTH.
  124.   ├URRENT VIDEO WIDTH (MUST BE BETWEEN 20 AND 80).
  125. 02┴─      -  ╠AST KEY PRESSED WHILE IN FILE SERVER.
  126.   ╒SED BY ┬┴╙╔├ PORTION OF ┬┬╙ TO DETERMINE IF USER [┴]BORTED,
  127.   [╙]KIPPED, OR [╬]EXT'ED THE FILE OUTPUT.
  128. 02┴┼      -  ┴BORT FLAG.
  129.   ╒SED BY FILE SERVER.  ╬ON-ZERO VALUE ABORTS FILE OUTPUT.
  130. 02┴╞      -  ┬UFFER FILE NUMBER.
  131.   ╒SED BY BUFFER LOAD/SAVE ROUTINES.
  132. 02┬0      -  ┬AUD-RATE INDEX.
  133.   #$00 = ╙WIFTLINK BAUD #1 OR 300 BPS ON ╦ERNAL ╥╙-232
  134.   #$01 = ╙WIFTLINK BAUD #2 OR 1200 BPS ON ╦ERNAL ╥╙-232
  135.   #$02 = ╙WIFTLINK BAUD #3 OR 2400 BPS ON ╦ERNAL ╥╙-232
  136.   #$03 = ╙WIFTLINK BAUD #4 ONLY
  137.   #$04 = ╙WIFTLINK BAUD #5 ONLY
  138.   #$05 = ╙WIFTLINK BAUD #6 ONLY
  139.   ╫HEN THE ┬┬╙ CHANGES THE BAUD, IT POKES THE BAUD RATE INDEX HERE,
  140.   THEN CALLS THE BAUD-RATE CHANGE ROUTINE.  ╔F THE BAUD-RATE VALUE IS
  141.   ╧╥'ED WITH #$08, THEN THE ┬┬╙ WILL ALWAYS CHANGE THE BAUD-RATE,
  142.   OTHERWISE IT WILL ONLY CHANGE IT IF CARRIER IS NOT PRESENT. ┴FTER
  143.   RETURNING FROM THE BAUD-RATE CHANGE ROUTINE, THIS LOCATION CONTAINS
  144.   THE CURRENT BAUD-RATE INDEX VALUE WHICH CAN BE USED TO VERIFY IF THE
  145.   BAUD RATE WAS CHANGED.
  146. 02┬1      -  ╫INDOW FLAG.
  147.   ╔F THIS LOCATION IS GREATER THAN ZERO, THEN THE ┬┬╙ WILL DISPLAY A
  148.   BLUE WINDOW AT THE TOP OF THE SCREEN.  ╘HE NUMBER STORED HERE SHOULD
  149.   BE THE NUMBER OF CHARACTERS IN THE WINDOW.  (├URRENTLY, THIS NUMBER IS
  150.   80.)
  151. 02┬2/02┬3 -  ═AXIMUM NUMBER OF ├┬═ DISK BLOCKS ALLOWED IN FILE UPLOAD.
  152. 02┬4/02┬5 -  ═ESSAGE NUMBER ( ═ESSAGE DATABASE ROUTINES ).
  153. 02┬6/02┬7 -  ╧LDEST MESSAGE INDEX ( ═ESSAGE DATABASE ROUTINES ).
  154. 02┬8/02┬9 -  ╬EW MESSAGE NUMBER ( ═ESSAGE DATABASE ROUTINES ).
  155. 02┬┴      -  ╥OOM NUMBER + #$40 ( ═ESSAGE DATABASE ROUTINES ).
  156. 02┬┬      -  ═AXIMUM NUMBER OF ROOMS ( ═ESSAGE DATABASE ROUTINES).
  157.   ═UST ALWAYS EQUAL 50!  ─O NOT CHANGE!
  158. 02┬├      -  ├╧╬╘╥╧╠-├ MASK.
  159.   #$00 = ─ISABLE ├╧╬╘╥╧╠-├ DETECT
  160.   #$╞╞ = ┼NABLE ├╧╬╘╥╧╠-├ DETECT
  161. 02┬─      -  ╥╙-232 STATUS REGISTER ╪╧╥ VALUE.
  162. 02┬┼      -  ╙YSTEM ├ONTROL ┬LOCK.
  163.   ┬ITS ARE ARRANGED AS FOLLOWS:
  164. ┬IT 0 = ├╚╘
  165. ┬IT 1 = ├┼╬
  166. ┬IT 2 = ═╧╬
  167. ┬IT 3 = ╬┼╫
  168. ┬IT 4 = ╨┴╙
  169. ┬IT 5 = ├╥┼
  170. ┬IT 6 = ╞╒╠
  171. ┬IT 7 = ╙┘╙
  172. 02┬╞      -  ╨RINTER TYPE.
  173.   ╬ON-ZERO VALUE HERE TURNS ├┬═-┴╙├╔╔ TRANSLATION ON FOR PRINTER.
  174. 02├0      -  ┼DIT BUFFER SIZE.
  175.   ╙IZE IN 256-BYTE BLOCKS PLUS ┴0H.
  176. 02├1-02├6 - ╘WIT DETECTOR THRESHOLD VALUES.
  177. 02├7-02─1 - ╘WIT DETECTOR TRIGGER VALUES.
  178. 02─2      -  ├ENSOR MODE FLAG.
  179.   ╔NDICATES TO CENSOR ROUTINE IF CENSOR ROUTINE IS BEING CALLED FROM
  180.   THE FILE SERVER OR THE TWIT DETECTOR.  ╔F THE CENSOR ROUTINE IS
  181.   BEING CALLED FROM THE FILE SERVER, THEN ANY WORDS BLANKED OUT WILL
  182.   NOT TRIGGER THE TWIT DETECTOR.
  183. 02─3      -  ├ENSOR WORD COUNTER ( ╘WIT DETECTOR ).
  184. 02─4      -  ═INUTE STORAGE ( ╔╥╤ ╫INDOW ROUTINE ).
  185.   ╘HIS LOCATION IS USED TO MAKE SURE THE WINDOW IS UPDATED AT LEAST
  186.   ONCE A MINUTE.
  187. 02─5       -  ╔NPUT INTERRUPT FLAG.
  188.   ╘HIS LOCATION INDICATES TO THE ┬┴╙╔├ PORTION OF THE ┬┬╙ IF THE INPUT
  189.   ROUTINE OR FILE SERVER ROUTINE WAS INTERRUPTED ABNORMALLY.  ╘HIS
  190.   OCCURS WHEN CERTAIN FUNCTION KEYS OR ├╧╬╘╥╧╠-├ ARE PRESSED, IF
  191.   CARRIER IS DROPPED, OR A TIMEOUT ERROR OCCURS.  ╓ALID VALUES ARE:
  192. #$00 = ╬ORMAL (NO INTERRUPT OCCURRED)
  193. #$08 = ╞4 KEY PRESSED
  194. #$09 = ├╘╥╠-├ KEY PRESSED
  195. #$0┴ = ╞2 KEY PRESSED
  196. #$0┬ = ╞6 KEY PRESSED
  197. #$0├ = ╞8 KEY PRESSED
  198. #$0─ = ├ARRIER DROP
  199. #$0┼ = ╘IMEOUT ERROR
  200.   ┴PPROPRIATE ACTION IS TAKEN WHEN CONTROL RETURNS TO THE ┬┴╙╔├ PORTION
  201.   OF THE PROGRAM.
  202. 02─6      -  ├ONTROL-KEY FLAG.
  203.   ╒SED WHEN ENTERING CONTROL CODES VIA THE ├╘╥╠-╨ SEQUENCE TO TELL THE
  204.   ┬┬╙ NOT TO INTERPRET THE CODE AS A COMMAND, BUT TO ACCEPT IT AS
  205.   NORMAL DATA.
  206. 02─7-02┼┴ -  ( FOR FUTURE USE ).
  207. 02┼┬      -  ╘EMPORARY WORK SPACE ( ├╘╥╠-╨ HEXADECIMAL-BINARY CONVERSION ).
  208. 02┼├      -  ╘EMPORARY WORK SPACE ( ├╘╥╠-╨ HEXADECIMAL-BINARY CONVERSION ).
  209. 02┼─      -  ╘EMPORARY WORK SPACE ( ═ESSAGE DATABASE ROUTINES ).
  210. 02┼┼/02┼╞ -  ╘EMPORARY WORK SPACE ( ═ESSAGE DATABASE ROUTINES ).
  211. 02╞0/02╞1 -  ╘EMPORARY WORK SPACE ( ═ESSAGE DATABASE ROUTINES ).
  212. 02╞2      -  ╘EMPORARY WORK SPACE ( ╙┘╙ STATEMENT ARGUMENT VALUES ).
  213. 02╞3      -  ╘EMPORARY WORK SPACE ( ╞ILE SERVER ROUTINE ).
  214. 02╞6      -  ╘EMPORARY WORK SPACE ( ╞ILE SERVER ROUTINE ).
  215. 02╞7      -  ╥╙-232 INTERRUPT STATUS SAVE.
  216.   ╘HIS IS USED BY THE PAUSE ROUTINE.
  217. 02╞8-02╞┴ - ( FOR FUTURE USE ).
  218. 02╞┬      -  ─ISABLE REMOTE-ENABLE FLAG (I.E. DATE = "999999").
  219. 02╞├      -  ╘EMPORARY WORK SPACE ( HOURS SAVE / DIRECTORY BLOCKS FREE ).
  220. 02╞─      -  ╘EMPORARY WORK SPACE ( MINUTES SAVE / DIRECTORY BLOCKS FREE ).
  221. 02╞┼      -  ╨═-TO-┴═ TRACKER (USED FOR MIDNIGHT HOUSEKEEPING).
  222. 02╞╞      -  ╘EMPORARY WORK SPACE ( [╙]AVE [╦]EEP FLAG ).
  223.  
  224. 033├      -  ├URRENT DRIVE LETTER
  225.   ╘HIS LOCATION STORES THE ┴╙├╔╔ VALUE OF THE CURRENT DRIVE LETTER.
  226. 033─-0354 - ├URRENT PARTITION TABLE
  227.   24 MEMORY LOCATIONS, ONE FOR EACH POSSIBLE PHYSICAL DRIVE (DEVICES
  228.   8-31).  ┼ACH LOCATION CONTAINS THE ┴╙├╔╔ VALUE OF THE LAST DRIVE
  229.   LETTER THAT ACCESSED THAT PHYSICAL DRIVE.  ╘HIS IS USED TO DETERMINE
  230.   IF THE KERNAL OVERLAY SHOULD SEND THE COMMAND CHANNEL STRING WHEN
  231.   OPENING A FILE.  ╘O FORCE THE ┬┬╙ TO SEND THE COMMAND CHANNEL STRING,
  232.   SET THE APPROPIATE LOCATION (OR ALL LOCATIONS) TO ZERO.
  233. 0355-035─ -   300 BPS ╥╙-232 DATA (╦ERNAL ╥╙-232 ONLY)
  234.   ─ATA IS ORGANIZED AS FOLLOWS:
  235. ┬YTES 1-4 = ─ATA STORED IN MOCK ╥╙-232 CONTROL REGISTERS
  236. ┬YTES 5-6 = ╥ECEIVER HALF-BIT TIME
  237. ┬YTES 7-8 = ╘RANSMITTER FULL-BIT TIME
  238. 035┼-0365 -  1200 BPS ╥╙-232 DATA (╦ERNAL ╥╙-232 ONLY)
  239. (╙EE ABOVE.)
  240. 0366-036─ -  2400 BPS ╥╙-232 DATA (╦ERNAL ╥╙-232 ONLY)
  241. (╙EE ABOVE.)
  242. 036┼-0373 -  ╚AYES ╥ESPONSE ├ODE ╘ABLE (╙WIFTLINK ╥╙-232 ONLY)
  243.   ╙IX BYTES, ONE FOR EACH POSSIBLE BAUDRATE.  ╘HIS TABLE CONTAINS THE
  244.   RESPONSE CODES THAT THE ┬┬╙ LOOKS FOR TO DETERMINE THE BAUDRATE OF
  245.   THE INCOMING CALL.  ╙ETABLE USING PROGRAM ╙╫-╙┼╘.
  246. 0374-0379 -  ┴├╔┴ ├ONTROL ╥EGISTER ╘ABLE (╙WIFTLINK ╥╙-232 ONLY)
  247.   ╙IX BYTES, ONE FOR EACH POSSIBLE BAUDRATE.  ╘HIS TABLE CONTAINS THE
  248.   VALUE TO BE STORED IN THE ┴├╔┴ COMMAND REGISTER FOR A PARTICULAR
  249.   BAUDRATE.  ╙ETABLE USING PROGRAM ╙╫-╙┼╘.
  250. 037┴-037╞ -  ┬AUDRATE ╓ALUE ╘ABLE (╙WIFTLINK ╥╙-232 ONLY)
  251.   ╙IX BYTES, ONE FOR EACH POSSIBLE BAUDRATE.  ╘HIS TABLE CONTAINS THE
  252.   DISPLAYED BAUDRATE VALUE FOR EACH BAUDRATE.  ╙ETABLE USING PROGRAM
  253.   ╙╫-╙┼╘.
  254. 0380-0383 -  ( FOR FUTURE USE ).
  255. 0384-03─3 -  ╫INDOW DATA.
  256.   ╘HESE LOCATIONS CONTAINS THE DATA TO BE DISPLAYED IN THE BLUE WINDOW
  257.   IN THE FORM OF SCREEN CODES.  ╘HIS DATA SHOULD NOT BE MODIFIED SINCE
  258.   THE ┬┬╙ NOT ONLY WRITES TO THIS BUFFER, BUT IT ALSO READS THE DATA
  259.   BACK SINCE SOME OF THE ┬┬╙'S MACHINE LANGUAGE ROUTINES MAY MODIFY THE
  260.   WINDOW DATA.
  261. 03─4-03╞┬ -  ( FOR FUTURE WINDOW EXPANSION ).
  262. 03╞├-03╞╞ -  ╞REE ╥┴═.
  263.  
  264. 07╞9      -  ─ATE ╨RESET FLAG
  265.   ┴ VALUE OF #$7┬ HERE INDICATES THE NEXT THREE BYTES CONTAIN A VALID
  266.   DATE.  ╘HIS AND THE NEXT THREE BYTES ARE USED ONLY WHEN REBOOTING THE
  267.   ┬┬╙.
  268. 07╞┴      -  ─ECIMAL YEAR  (0-99)
  269. 07╞┬      -  ─ECIMAL MONTH (1-12)
  270. 07╞├      -  ─ECIMAL DAY (1-31)
  271.  
  272. 0800-9┼33 - ├OMPILED ┬┴╙╔├ PORTION OF ┬┬╙ & VARIABLE AREA.
  273.  
  274. 9┼34      =  ╙.5 ═ACHINE ╠ANGUAGE ═ODULE (├╚┴╬╟┼ ┬┴╒─ ┼NTRY)
  275. 9┼37      =  ╘┼╥═╔╬┴╠ ┼NTRY
  276. 9┼3┴      =  ╘╧╟╟╠┼ ─╘╥ ┼NTRY
  277. 9┼3┴-9╞┼5 =  ─╘╥/╘┼╥═╔╬┴╠/┬┴╒─ ╘╒╬╔╬╟ ╥OUTINES
  278.  
  279. 9╞┼7      -  ╥╙-232 STATUS REGISTER ( ╪╧╥'ED )
  280.   ╘HE ╔╥╤ ROUTINE CHECKS THE ╥╙-232 STATUS EVERY 1/60TH OF A SECOND,
  281.   ╪╧╥'S THE VALUE FOUND THERE WITH ╪╧╥ VALUE (@ 02┬─H), AND STORES THE
  282.   RESULT HERE.  ┴LL CHECKS FOR CARRIER SHOULD BE CHECKED HERE.  ├ARRIER
  283.   IS PRESENT WHEN BIT 4 (VALUE = 10H) IS 0.  ├ARRIER SHOULD BE CHECKED
  284.   AS FOLLOWS:
  285.  
  286. LDA $9FE7     ; GET RS-232 STATUS
  287. AND #$10      ; MASK ALL BITS EXCEPT CARRIER
  288. AND $02A9     ; MASK WITH CARRIER-DETECT MASK
  289. BNE -NO CARRIER-
  290. -CARRIER-
  291.  
  292. ┴000-┬157 -  ┼DITOR, ╞ILE COPIER, ╨ROTOCOL AND ┼XEC MODULE BUFFER
  293.   ╠OCATION $┴000 NORMALLY CONTAINS A #$0─ (├╥), FOLLOWED BY THE
  294.   EDIT BUFFER TEXT, WITH A ╬╒╠╠ BYTE USED AS AN ┼╧╘ CHARACTER.
  295.   ╘HE ┬┬╙'S FILE COPIER AND LOADABLE MACHINE LANGUAGE MODULES WILL
  296.   OVERWRITE ANY EDIT BUFFER TEXT.  ╔F THE EDIT BUFFER TEXT IS OVER-
  297.   WRITTEN, THEN THE ┬┬╙ WILL CLEAR THE EDIT BUFFER BEFORE THE NEXT
  298.   ├╧══┴╬─ PROMPT SO THAT THE USER WILL NOT SEE ANY GARBAGE CHARACTERS
  299.   IN THE BUFFER.  ┴ FUTURE REVISION OF THE ┬┬╙ MAY COPY THE EDIT
  300.   BUFFER CONTENTS TO THE ╔/╧ AREA ╥┴═ (WHICH IS CURRENTLY UNUSED)
  301.   BEFORE THE EDIT BUFFER IS OVERWRITTEN.
  302. ┬158-┬┬4─ -  ╙.3 CONFIGURATION FILE BUFFER
  303.   ├ONTAINS THE CENSOR VOCABULARY, A ╬╒╠╠, ╦ERNAL OVERLAY (EACH ENTRY
  304.   FOLLOWED BY A ╬╒╠╠), AND THE EDITABLE PHRASES (EACH ENTRY FOLLOWED BY
  305.   A ╬╒╠╠).
  306. ┬┬4┼      =  ┼─╔╘╧╥/╞╔╠┼ ╙┼╥╓┼╥ ┼NTRY.
  307.   ┴LL MACHINE LANGUAGE FUNCTIONS OF THE EDITOR (WRITING, LISTING,
  308.   EDITTING, LOADING AND SAVING), AS WELL AS THE FILE SERVER ROUTINE
  309.   (USED TO DISPLAY ALL TEXT FROM DISK SUCH AS MESSAGES, EMAIL,
  310.   ╙╔╟FILES, ETC), ARE CALLED THROUGH THIS LOCATION.
  311. ┬┬51      =  ├┼╬╙╧╥ ┼NTRY.
  312.   ╘HIS IS ┬┴╙╔├'S ENTRY INTO THE CENSOR ROUTINE.  ╘HIS ENTRY IS USED
  313.   BY THE TWIT DETECTOR.
  314. ┬┬54-┬╞╞╞ =  ╙.4 ═ACHINE ╠ANGUAGE ═ODULE
  315. ├000-├11┬ -  ╘EMPORARY STORAGE BUFFERS.
  316.   ╘HIS AREA IS USED BY THE ┬┬╙ AS BUFFERS FOR THE EDITOR SEARCH AND
  317.   REPLACE ROUTINES, LIST ROUTINES, AND THE ┬┬╙ LINE EDITOR.  ╘HIS AREA
  318.   MAY BE USED BY MODULES IN ANY MANNER.  ╘HERE IS ENOUGH ROOM HERE FOR
  319.   ONE 256-BYTE OR TWO 128-BYTE FILE TRANSFER BUFFERS.  ┘OU CAN ALSO
  320.   USE IT TO STORE SHORT MACHINE LANGUAGE ROUTINES SUCH AS A ROUTINE TO
  321.   SWITCH IN THE ┬┴╙╔├ ╥╧═ TEMPORARILY, CALL A SUBROUTINE, AND SWITCH
  322.   ┬┴╙╔├ BACK OUT.
  323. ├11├-├15┬ -  ├ENSOR VOCABULARY INDEX (ALLOWS FOR UP TO 64 ENTRIES).
  324.   ╘HIS INDEX IS USED TO HELP SPEED THINGS UP FOR THE NASTY-WORD-
  325.   CHECKER.  ╔T CONTAINS THE LENGTH OF EACH WORD IN THE VOCABULARY.
  326. ├15├      =  (FUTURE USE)
  327. ├15╞      =  ┼─╔╘╧╥/╞╔╠┼ ╙┼╥╓┼╥ ╙ETUP ┼NTRY.
  328.   ╙WITCHES ┬┴╙╔├ OUT AND JUMPS TO ┬┬4┼ (THE S.4 MODULE).
  329. ├162      =  ├╧╬╙╧╠┼/├╧╬╘╥╧╠ ╔╬╘┼╥╥╒╨╘ ├╚┼├╦┼╥ ┼NTRY.
  330.   ┴LSO CALLED BY THE ╠╔╬┼ ┼─╔╘╧╥ ROUTINE.
  331. ├165      =  ─╔╥┼├╘╧╥┘ ╥┼┴─┼╥ ┼NTRY
  332.   ─ISPLAYS DISK DIRECTORY.  ═UST HAVE DIRECTORY FILE OPEN AND ┬┴╙╔├
  333.   SWITCHED IN.
  334. ═EM-LOC (02╞2)  = #$00 - ╬ORMAL DISK DIRECTORY FORMAT
  335. = #$01 - ╙╔╟FILE DISK DIRECTORY FORMAT
  336. ├168      =  ╙╘┴├╦ ╥┼╙┼╘ ┼NTRY
  337.   ╒SED TO RESET THE STACK AT ├╧══┴╬─ PROMPTS.  ─O NOT USE!
  338. ├16┬      =  ─╔╙╨╠┴┘ ╧╞╞-╠╔╬┼ ╙├╥┼┼╬ ┼NTRY.
  339.   ─ISPLAYS THE BACKGROUND FOR AWAITING-CALL SCREEN.
  340. ├16┼      =  ─╔╙╨╠┴┘ ╙╚┴╥┼╫┴╥┼ ╙├╥┼┼╬ ┼NTRY.
  341.   ─ISPLAYS THE SHAREWARE SCREEN (╙╚╔╞╘/├╘╥╠ SCREEN).
  342. ├171      =  ─╔╙╨╠┴┘ ╙.3 ╞╔╠┼ ┼─╔╘┴┬╠┼ ╨╚╥┴╙┼ ┼NTRY.
  343.   ╘HIS ROUTINE EITHER DISPLAYS THE EDITABLE PHRASE FROM THE S.3 FILE
  344.   DATA, OR OPENS A FILE AND DISPLAYS THE FILE.
  345. ├174      =  ╬╧╬-├┴╙┼-╙┼╬╙╔╘╔╓┼ ╙╘╥╔╬╟ ├╧═╨┴╥┼ ┼NTRY.
  346.   ├OMPARES TWO STRING VARIABLES.  ╘HIS ROUTINE COMPARES ONLY
  347.   CHARACTERS UP TO THE LENGTH OF THE SECOND STRING.
  348. ├177      =  ╞╔╠┼-├╧╨╔┼╥ ─╔╙╦ ╥┼┴─ ┼NTRY.
  349.   ╥EADS BLOCKS INTO THE EDIT BUFFER.
  350. ├17┴      =  ─╔╙╦ ╠╔╬┼-╔╬╨╒╘ ┼NTRY.
  351.   ╒SED TO INPUT A STRING INTO ONE OR MORE VARIABLES.
  352. ├17─      =  ╟┼╘ ├╚┴╥┴├╘┼╥ ┼NTRY.
  353.   ┴LL ┬┬╙ INPUTS USE THIS ROUTINE TO ACCEPT DATA FROM THE USER.  ╘HIS
  354.   ROUTINE WILL RETURN WITH CARRY SET IF AN INTERRUPT REQUEST OCCURS
  355.   DUE TO CARRIER DROP, ├╘╥╠-├, AND CERTAIN FUNCTION KEYS ARE PRESSED.
  356.   ╔F CARRIER IS SET, THEN THE MODULE SHOULD EXIT TO RETURN CONTROL TO
  357.   THE ┬┬╙ SO IT CAN HANDLE THE INTERRUPT REQUEST.
  358. ├180      =  ╟┴╥┬┴╟┼ ├╧╠╠┼├╘╧╥ ┼NTRY.
  359.   ╘HIS ROUTINE ERASES CERTAIN STRING VARIABLES TO PROVIDE FOR A FASTER
  360.   GARBAGE COLLECTION.  ╟ARBAGE COLLECTION OCCURS BEFORE THE ├╧══┴╬─
  361.   PROMPT.
  362. ├183      =  ╞╔╠┼-├╧╨╔┼╥ ─╔╙╦ ╫╥╔╘┼ ┼NTRY.
  363.   ╫RITES DISK BLOCK INFO FROM THE EDIT BUFFER TO THE DISK.
  364. ├186      =  ─╔╙╨╠┴┘-╘╥┴╬╙╠┴╘┼ ┼NTRY.
  365.   ╒SED INTERNALLY TO MAP SOME OF THE ┴╙├╔╔ CODES TO THEIR CLOSEST
  366.   VISUAL EQUIVALENT.
  367. ├189      =  ╙╦╔╨ ┬┴═ ┼NTRY.
  368.   ╒SED TO SKIP THE ┬┴═ ENTRY WHEN READING A TRACK & SECTOR DIRECTORY.
  369. ├18├      =  ╦╔╠╠ ╥╧╧═ ┼NTRY.
  370.   ├LEARS ALL OCCURANCES OF A SPECIFIC MESSAGE INDEX CODE.
  371. ├18╞      =  ╞╔╬─ ╔╬─┼╪ ╞╥╧═ ═┼╙╙┴╟┼ ╬╒═┬┼╥ ┼NTRY
  372.   ╞INDS THE POSITION IN THE MESSAGE INDEX OF THE MESSAGE NUMBER
  373.   GIVEN BASED ON WHAT THE CURRENT ROOM IS.
  374. ├192      =  ╙┼╘ ╒╨ ╥╧╧═ ┼NTRY
  375.   ╞INDS INFORMATION ABOUT ROOM.
  376. ├195      =  ╥╧╧═ ╚╧╒╙┼╦┼┼╨╔╬╟ ┼NTRY
  377.   ├HECKS FOR UNUSED ROOMS.
  378. ├198      =  ═┼╙╙┴╟┼-╔╬─┼╪ ╠╧┴─
  379.   ╠OADS THE MESSAGE INDEX FROM THE ┬┴╙┼╙ FILE INTO MEMORY.
  380. ├19┬      =  ═┼╙╙┴╟┼-╔╬─┼╪ ╙┴╓┼
  381.   ╙AVES THE MESSAGE INDEX FROM MEMORY TO THE ┬┴╙┼╙ FILE.
  382. ├19┼      =  ╥╧╧═ ╙╧╥╘
  383.   ├REATES A SORTING INDEX FOR THE SIG/ROOM LIST.
  384. ├1┬┴-├╞╞╞ =  ╙.2 ═ACHINE ╠ANGUAGE ═ODULE
  385.  
  386. ─├08-─├0┬ - ╘╧─ ├LOCK #1 - ╒SED FOR TIME-OF-DAY.
  387. ──08-──0┬ - ╘╧─ ├LOCK #2 - ╒SED FOR USER'S SESSION TIMER
  388.  
  389. ┼000-┼─┴┬ -  ═ESSAGE INDEX.
  390.    ┼ACH POSITION INDICATES THE ROOM NUMBER + #$40 OF EACH MESSAGE.
  391. ╞72├-╞─01 -  ╙.6 ═ODULE (┴WAITING-CALL & SHAREWARE SCREEN DATA BUFFER).
  392.  
  393. ╞─15-╞─46 -  ╬EW ═ESSAGE ╨OINTERS (LOW BYTES)
  394. ╞─47-╞─78 -  ╬EW ═ESSAGE ╨OINTERS (HI BYTES)
  395.    ╘HESE LOCATIONS CONTAIN POINTERS TO THE NEWEST MESSAGES THAT
  396.    THE USER HAS READ FOR EACH ROOM.  ╘HESE POINTERS ARE USED TO
  397.    COMPUTE THE NUMBER OF OLD AND NEW MESSAGES THE USER HAS.
  398. ╞─79-╞─┴┴ -  ╬UMBER OF ═ESSAGES (LOW BYTES)
  399. ╞─┴┬-╞──├ -  ╬UMBER OF ═ESSAGES (HI BYTES)
  400.    ╘HESE LOCATIONS CONTAIN THE NUMBER OF MESSAGES IN EACH ROOM.
  401.    ╫HEN THE USER ENTERS A DIFFERENT ROOM, A MACHINE LANGUAGE ROUTINE
  402.    LOOKS UP THE NUMBER AND STORES IT AT $02┼┼/02┼╞.
  403. ╞───-╞┼0┼ -  ╬UMBER OF ╧LD ═ESSAGES (LOW BYTES)
  404. ╞┼0╞-╞┼40 -  ╬UMBER OF ╧LD ═ESSAGES (HI BYTES)
  405.    ╘HESE LOCATIONS CONTAIN THE NUMBER OF OLD MESSAGES IN EACH ROOM.
  406.    ╫HEN THE USER ENTERS A DIFFERENT ROOM, A MACHINE LANGUAGE ROUTINE
  407.    LOOKS UP THE NUMBER, ADDS 1 TO IT (SO IT BECOMES THE MESSAGE NUMBER
  408.    OF THE FIRST NEW MESSAGE), AND STORES IT AT $02┬8/02┬9.
  409.  
  410. (┴LL OTHER ╥┴═ UNDER THE ╦ERNAL ╥╧═ IS AND MUST REMAIN A COPY OF THE ╦ERNAL
  411. ╥╧═.  ╘HIS ALLOWS FOR THE USE OF THE ╬═╔ INTERRUPT ROUTINES WHEN THE ╥╧═ IS
  412. SWITCHED OUT.)
  413.  
  414.  ------------------------------------------------------------------------------
  415. ╘HE FOLLOWING ╥╧═ VECTORS HAVE BEEN CHANGED:
  416.  
  417. 0308/0309 - ╔╟╧╬┼  - ╘O ALLOW EXECUTION OF ┬┴╙╔├ EXTENSIONS.
  418. 0314/0315 - ╔╥╤    - ╘O ENABLE THE ┬┬╙ WINDOW AND CARRIER-DETECT ROUTINES.
  419. 0318/0319 - ╬═╔    - ╘O LESSEN THE CHANCE OF LOCKING UP THE COMPUTER IF THE
  420.   ╥┼╙╘╧╥┼ KEY IS PRESSED, AND ALSO TO DISPLAY THE
  421.   DIAGNOSTIC SCREEN WITH ╥╒╬/╙╘╧╨ & ╥┼╙╘╧╥┼.  ┴LSO HANDLES
  422.   ╙WIFTLINK ╬═╔ ROUTINES IF ╙WIFTLINK IS ACTIVE.
  423. 031┴/031┬ - ╧╨┼╬   - ╘O ENABLE THE KERNAL OVERLAY.
  424. 031┼/031╞ - ├╚╦╔╬  - ╘O ALLOW THE USE OF DEVICE 4 TO READ THE EDIT BUFFER.
  425.   ╒SED ONLY BY THE FILE SERVER WHEN LISTING THE EDIT
  426.   BUFFER.
  427. 0320/0321 - ├╚╦╧╒╘ - ╘O HANDLE THE PROPER CHANNEL NUMBER FOR THE ┬┬╙ OUTPUT
  428.   CHANNEL DEPENDING ON THE CARRIER MASK.
  429. 0326/0327 - ├╚╥╧╒╘ - ┬┬╙ OUTPUT DRIVER.  ╚ANDLES ALL MODEM/DISPLAY OUTPUT.
  430. 032┴/032┬ - ╟┼╘╔╬  - ┬┬╙ INPUT DRIVER.  ╚ANDLES ALL MODEM/KEYBOARD INPUT.
  431.   (┬┬╙ DOES NOT USE ├╚╥╔╬ FOR KEYBOARD OR ╥╙-232 INPUT!)
  432.  
  433. ╨LEASE DO NOT CHANGE ANY VECTORS!
  434.  
  435.  ------------------------------------------------------------------------------
  436. ┬┴╙╔├ ╓ARIABLE ╠ISTING:
  437.  ------------------------------------------------------------------------------
  438.  
  439. (╙INCE THE ┬┴╙╔├ ╥╧═ IS SWITCHED OUT WHEN EXECUTING A MODULE, YOU MUST DEVISE
  440. YOUR OWN ROUTINE FOR ACCESSING VARIABLES IF YOU NEED TO.)
  441.  
  442. A      - ├ONSTANT = 56577
  443. A$     - ╘EMP - ╚AYES COMMAND TO SEND
  444. A%     - ┴CCOUNT - ╙╔╟-BULLETIN READ FLAGS
  445. A0     - ╘EMP
  446. AA     - ╘EMP
  447. AA$    - ┴CCOUNT - ┴CCESS
  448. AC     - ┴CCOUNT - ╬UMBER OF CALLS
  449. AD     - ┴CCOUNT - ╬UMBER OF DOWNLOADS
  450. AD$    - ┴CCOUNT - ─ATE OF LAST CALL
  451. AE     - ┼DITOR MODE FLAG (USED TO DETERMINE WHERE EDITOR IS CALLED FROM)
  452. AF     - ┴CCOUNT - ┼MAIL FORWARDING ACCOUNT NUMBER
  453. AH$    - ┴CCOUNT - ╬EW MESSAGE POINTERS (ENCODED)
  454. AI     - ┴CCOUNT - ╬UMBER OF MESSAGES POSTED (SYSTEM TOTAL)
  455. AL     - ┴CCOUNT - ╬UMBER OF BAD LOGOFFS.
  456. AM     - ┴CCOUNT - ╬UMBER OF MESSAGES POSTED (USER'S TOTAL)
  457. AN$    - ┴CCOUNT - ╬AME
  458. AN%    - ┴CCOUNT - ╙AVED MESSAGES AS OLD OR NEW FLAG
  459. AP$    - ┴CCOUNT - ╨ASSWORD
  460. AS$    - ┴CCOUNT - ╙TATUS
  461. AT     - ┴CCOUNT - ─AILY TIME LIMIT
  462. AT%    - ┴CCOUNT - ╘IME USED TODAY (PREVIOUS SESSIONS ONLY)
  463. AU     - ┴CCOUNT - ╬UMBER OF UPLOADS
  464. AV     - ┴CCOUNT - ╓IDEO ╫IDTH
  465. AX     - ╘EMP
  466. AX$    - ┴CCOUNT - ╨ROTOCOL
  467. B      = ┬AUDRATE ╓ALUE
  468. (╘HE NUMERIC VALUE OF THE BAUDRATE.)
  469. B$(*)  = ╥OOM ╬AME ┴RRAY
  470. (╓ALID INDEX IS 1 TO 50.  ╒NUSED ROOMS ARE NULL.)
  471. B(*)   = ╥OOM ╙TATUS ┴RRAY
  472. (╓ALID INDEX IS 1 TO 50.  ╘HE VALUE RETURNED IS AS FOLLOWS:
  473. BITS 0-3 = ╙╔╟ ROOM IS ASSIGNED TO (0 MEANS ROOM NOT IN USE),
  474. BIT 4    =
  475. BIT 5    = ╠OGOFF MESSAGE ROOM FLAG,
  476. BIT 6    = ╥EAD-ONLY FLAG,
  477. BIT 7    = ╠OCKED ROOM FLAG.
  478. ╬OTE THAT AN UNUSED ROOM MAY BE LOCKED SO THAT IT CANNOT BE
  479. CREATED.)
  480. BN     = ├URRENT ROOM INDEX NUMBER
  481. (╓ALID NUMBER IS 1 TO 50.  0 MEANS USER IS NOT IN A ROOM.)
  482. C$     - ╠AST COMMAND SEQUENCE ENTERED.
  483. CA     - ├ARRIER STATUS (USED IN ├╚┴╘ MODE)
  484. CC     - ├ARRIER ─ETECT ┬IT ═ASK
  485. CM     - ├OMMAND-ENTERED FLAG (OTHER THAN CHAT OR DOWNLOAD)
  486. CN     = ╬UMBER OF CALLS RECEIVED.
  487. D      - ╘EMP - ─RIVE
  488. D$     - ╘EMP - ─ATE STRING (INCLUDES DAY OF WEEK)
  489. D$(*)  = ╙╔╟ ┬ULLETIN ─ATE-LAST-MODIFIED ┴RRAY
  490. (╙TRING IN ┘┘══── FORMAT.)
  491. D%     = ╒SER - ╙╔╟-BULLETIN READ FLAGS
  492. (┼ACH BIT REPRESENTS A ╙╔╟ BULLETIN THAT THE USER HAS READ.)
  493. D%(*)  = ═ESSAGE/DRIVE ┴LLOCATION ┴RRAY
  494. (╓ALID INDEX IS 0 TO 25 FOR DRIVES A TO Z.  ┼ACH ENTRY INDICATES
  495. THE NUMBER OF MESSAGES ON THAT DRIVE.)
  496. DB     - ─EFAULT BAUDRATE
  497. DD     = ─AY ╧F ═ONTH
  498. (┬ETWEEN 1 AND 7, STARTING AT ╞RIDAY.)
  499. DW     = ─AY ╧F ╫EEK
  500. (1 TO 31.)
  501. E      - ╘EMP - ─╧╙ ┼RROR ╬UMBER
  502. E$     - ╘EMP
  503. E(*)   = ┼MAIL ╘YPE/╥ECEIVER ─ATA ┴RRAY
  504. (╓ALID INDEX FROM 1 TO VARIABLE ME.  ╓ALUE IS ACCOUNT NUMBER
  505. PLUS 1024 IF CERTIFIED, PLUS 3072 IF URGENT.  0 INDICATES AN
  506. AVAILABLE EMAIL SLOT.)
  507. E2$    - ╘EMP - ─╧╙ ┼RROR ├HANNEL ┬UFFER
  508. ED(*)  = ┼MAIL ─ATE-SENT ┴RRAY
  509. (╓ALID INDEX FROM 1 TO VARIABLE ME.  ╓ALUE IS DATE IN ┘┘┘┘══──
  510. FORMAT.  0 INDICATES AN AVAILABLE EMAIL SLOT.)
  511. EN$    - ├ONSTANT = "┼NTER "
  512. EU     - ┼MAIL ┴CCOUNT TO ╥EAD
  513. F$     - ╘EMP - ╞ILENAME
  514. F1$    - ╘EMP - ╞ILENAME
  515. F2$    - ╘EMP - ╞ILENAME
  516. FA     = ╞IRST ┴VAILABLE ┴CCOUNT ╬UMBER
  517. FD     - ╠AST ═ESSAGE ┼DITTED (┼ITHER DRIVE OR BASE INDEX NUMBER)
  518. G$     - ╘EMP - ├URRENT ╙╔╟ ╠ETTER
  519. H$     = ╚AYES ┼SCAPE ╙EQUENCE ┴╙├╔╔ ├HARACTER
  520. (╘HE CHARACTER MUST BE SENT 3 TIMES FOR THE ╚AYES ESCAPE
  521. SEQUENCE.)
  522. HH$    = ╚AYES ╚ANGUP ╙EQUENCE
  523. (╚AYES COMMAND TO SEND AFTER SENDING THE ESCAPE SEQUENCE.)
  524. HI     = ╔NDEX TO ╬EXT ═ESSAGE TO ╙AVE
  525. (╒SED TO DETERMINE THE START/END POINTS OF THE MESSAGE INDEX
  526. BUFFER.  ╘HIS IS A POINTER TO THE NEXT MESSAGE TO BE SAVED.  ╔T
  527. ALSO POINTS TO THE OLDEST MESSAGE IN THE SYSTEM ONCE THE MESSAGES
  528. HAVE STARTED CYCLING.)
  529. HL     = ═AX ╬UMBER OF ═ESSAGES ├ONFIGURED ╞OR
  530. I      - ╘EMP
  531. I$     - ╘EMP - ╠INE ┼DITOR ╔NPUT ╙TRING
  532. I1     - ╘EMP
  533. I2     - ╘EMP
  534. I3     - ╘EMP
  535. ID     - ╞ILE ╙ERVER & ┼DITOR ╔NTERRUPT ╘YPE
  536. II$    - ╘EMP - ╠INE ┼DITOR ╔NPUT ╙TRING (╒PPERCASE)
  537. J      - ╘EMP
  538. J$     - ╘EMP - ╫INDOW ┬UILDER
  539. K$     - ├ONSTANT = "------"
  540. L      - ╘EMP - ╠INE ┼DITOR ═AXIMUM ╠ENGTH
  541. L$     - ╘EMP
  542. LB$    - ├ONSTANT = ":A.╠╧╟┬╧╧╦"
  543. LC$    = ╠AST ├ALLER'S ╬AME
  544. LG     = ╠OGOFF ═ESSAGES ┴VAILABLE FLAG
  545. (┴NY NON-ZERO VALUE MEANS LOGOFF MESSAGES ARE AVAILABLE.)
  546. LM$    - ├ONSTANT = ":E-SYS"
  547. LS     - ╘EMP
  548. LT     = ╠T╦ERNAL ╥╧═ FLAG
  549. (┴NY NON-ZERO VALUE INDICATES THE PRESENCE OF A ╠T╦ERNAL
  550. HARD DRIVE.  ╞OR FUTURE USE OF ╠T╦ERNAL HARD DRIVES.)
  551. M$     - ├ONSTANT - ├╚╥$(13)
  552. M0$    = ╚AYES ┬┬╙ ╔NITIALIZATION ╙EQUENCE
  553. (┼ACH COMMAND SENT IS SEPARATED WITH A SPACE.)
  554. M1$    = ╚AYES ╘ERMINAL ╔NITIALIZATION ╙EQUENCE
  555. (┼ACH COMMAND SENT IS SEPARATED WITH A SPACE.)
  556. M3$    = ╚AYES ═ODEM ╧FF-HOOK ╙EQUENCE
  557. ME     = ═AXIMUM ╨IECES ╧F ┼MAIL
  558. MM     = ═ONTH
  559. (1 TO 12.  0 INDICATES ┬┬╙ IS DISABLED.)
  560. MN     = ╬UMBER ╧F ═ESSAGES ╔N ╥OOM
  561. MP     = ╬UMBER ╧F ═ESSAGES ╨OSTED
  562. (╘HIS IS THE SYSTEM TOTAL.  ╓ARIABLE HI IS DERIVED FROM THIS
  563. VARIABLE.)
  564. MS$    - ├ONSTANT = "ESSAGE"
  565. N$
  566. N%     = ╒SER - ╙AVED MESSAGES AS OLD OR NEW FLAG
  567. (┴NY NON-ZERO VALUE WILL MAKE SAVED MESSAGES AS NEW.)
  568. N(*)   = ╒SER - ╬EW MESSAGE POINTERS
  569. (╓ALID INDEX IS 1 TO 50 REPRESENTING ROOM NUMBERS.  ┼ACH ARRAY
  570. ELEMENT IS A POINTER TO THE LAST MESSAGE READ IN THE ROOM.  ╘HIS
  571. ARRAY IN CONJUNCTION WITH VARIABLES MP AND UI TELL THE ┬┬╙ WHICH
  572. MESSAGES ARE NEW.)
  573. NA$    - ├ONSTANT = "╬╬╬╬╬╬╬╬╬╬╬╬╬╬" (USED TO CHECK FOR MINIMUM ACCESS)
  574. NB     - ═ESSAGE ╬UMBER
  575. NM     = ╬UMBER ╧F ╬EW ═ESSAGES ╔N ╥OOM
  576. (╔F 0, THEN ROOM IS EMPTY.)
  577. NM$    = ╬EW ╒SER ╤UESTIONAIRE ╬AME ╨ROMPT
  578. (I.E. "╬AME:", "╚ANDLE:", ETC.)
  579. O$     - ├ONSTANT - ├╚╥$(0)
  580. P$     - ├ONSTANT - "RESS ╥┼╘╒╥╬"
  581. PS     - ═ESSAGE ╔NDEX
  582. Q      - ╘EMP
  583. Q$     - ╘EMP
  584. Q$(*)  - ┴NSWERS TO ╤UESTIONAIRE
  585. Q0     - ╘EMP - ├URRENT ╤UESTION ╨OINTER
  586. QA$(*) - ╬EW ╒SER ╤UESTIONAIRE
  587. QB(*)  - ═AXIMUM ╬UMBER OF ├HARACTERS ┴LLOWED IN ╤UESTIONAIRE
  588. QQ     - ╬UMBER OF ╤UESTIONS IN ╤UESTIONAIRE
  589. R      - ├ONSTANT = 50 (═AXIMUM ╬UMBER OF ╥OOMS - DO ╬╧╘ CHANGE)
  590. R1     - ╘EMP - ╙TARTING ═ESSAGE IN ╙EQUENCE
  591. R2     - ╘EMP - ┼NDING ═ESSAGE IN ╙EQUENCE
  592. S$     - ╥OOM/╙╔╟ ╙ORT ╔NDEX
  593. S$(*)  = ╙╔╟ ╬AME ┴RRAY
  594. (╓ALID INDEX IS 0 TO 14.  ╘HIS ARRAY CONTAINS THE NAMES OF EACH
  595. ╙╔╟.  ┴ NULL SIGNAME IS A HIDDEN ("DELETED") ╙╔╟.
  596. S1     = ─EFAULT ╓IDEO ╫IDTH
  597. (╓ALID VIDEO WIDTH IS 20 TO 80.  ╨LEASE DO NOT EXCEED THIS RANGE.)
  598. S1$    = ╥ECOVERY ╨ASSWORD
  599. (╒SED FOR REMOTE ENABLING.)
  600. S2     = ═AXIMUM ╬UMBER OF ╒SERS
  601. (╓ALID NUMBER IS FROM 1 TO 999.  ─O NOT EXCEED 999.)
  602. S2$    = ╬EW ╒SER ┴CCESS
  603. S3     = ─EFAULT ╘IME ╠IMIT
  604. (─EFAULT DAILY TIME LIMIT.)
  605. S3$    = ╒NLOGGED-ON ╒SER ┴CCESS
  606. S4     = ┴CCOUNT DRIVE
  607. (┴╙├╔╔ VALUE OF DRIVE LETTER.)
  608. S5     = ┼MAIL DRIVE
  609. (┴╙├╔╔ VALUE OF DRIVE LETTER.)
  610. S6$    = ╙╔╟ ─OWNLOAD DRIVES
  611. (15 DRIVE LETTERS.)
  612. S8     = ├URRENT UPLOAD DRIVE
  613. (┴╙├╔╔ VALUE OF DRIVE LETTER.)
  614. S8$    = ╙╔╟ ╒PLOAD DRIVES
  615. (15 DRIVE LETTERS.)
  616. S9     = ═ODEM TYPE
  617. (1 = 1650 OR COMPATABLE,
  618.  2 = 1670/╚AYES OR COMPATABLE,
  619.  3 = 1660 OR COMPATABLE.)
  620. SC$    - ├ONSTANT = "├╚╘├┼╬═╧╬╬┼╫╨┴╙├╥┼╞╒╠╙┘╙" (╙YSTEM ├ONTROL ┬LOCK TEXT)
  621. SF     = ╠OGOFF ═ESSAGE DRIVE
  622. (┴╙├╔╔ VALUE OF DRIVE LETTER.)
  623. SL     = ╠OGOFF ═ESSAGE ROOM
  624. (├ONTAINS THE ROOM NUMBER OF THE ROOM THAT LOGOFF MESSAGES ARE TO
  625. BE SAVED TO.  ╠OGOFF MESSAGES ARE SAVED TO "E.SYS" FILE IF THIS
  626. VARIABLE IS 0.  ╘HE ┬┬╙ SCANS THE ROOM STATUS ARRAY AND STORES THE
  627. APPROPRIATE VALUE HERE.)
  628. T      - ╘EMP / ╬UMBER OF TRIES LEFT / ╠OGOFF TYPE
  629. T0     - ╘EMP
  630. T1     - ╘EMP
  631. T2     = ╒SER - ╘IME ╧NLINE ╘ODAY (╘OTAL)
  632. (├URRENT AMOUNT OF TIME, IN MINUTES, THAT THE USER HAS BEEN ONLINE
  633. TODAY.  ╒SED IN CONJUNCTION WITH VARIABLE UD$ (TO DETERMINE IF USER
  634. HAS BEEN ONLINE TODAY OR IF USER'S TIMELIMIT CAN BE RESET).)
  635. TW     = ╒SER - ╘WIT ╠EVEL
  636. (╓ALID RANGE BETWEEN 0 AND 255.)
  637. U      = ╒SER - ┴CCOUNT ╬UMBER
  638. (╓ALID RANGE BETWEEN 0 AND 999.  ╔F ZERO, THEN USER IS NOT LOGGED
  639. ON.)
  640. U$     - "╙YSOP" OR "╙╔╟OP" (─ISPLAYED WHEN [.] COMMAND IS SELECTED.)
  641. UA     = ┴CCESS LEVEL IN CURRENT ROOM
  642. (├URRENT ACCESS VALUE DERIVED FROM VARIABLES UA$ AND B(BN).
  643.  1 = ╬O ACCESS,
  644.  2 = ╥EAD-ONLY ACCESS,
  645.  3 = ╫RITE ACCESS,
  646.  4 = ├REATE ACCESS,
  647.  5 = ╙╔╟OP ACCESS.)
  648. UA$    = ╒SER - ┴CCESS
  649. UC     = ╒SER - ╬UMBER OF CALLS
  650. UD     = ╒SER - ╬UMBER OF DOWNLOADS
  651. UD$    = ╒SER - ─ATE LAST CALLED
  652. (─ATE IN ┘┘══── FORMAT.  ╒SED IN CONJUNCTION WITH ARRAY N .)
  653. UF     = ╒SER - ┼MAIL FORWARDING ACCOUNT NUMBER
  654. (╓ALID RANGE BETWEEN 0 AND 999.)
  655. UI     = ╒SER - ╬UMBER OF MESSAGES POSTED AT LAST CALL (SYSTEM TOTAL)
  656. (├ONTAINS VALUE OF VARIABLE MP AT TIME OF USER'S LAST LOGOFF.
  657. ╒SED TO DETERMINE IF ALL MESSAGES ARE NEW.)
  658. UL     = ╒SER - ╬UMBER OF BAD LOGOFFS.
  659. UM     = ╒SER - ╬UMBER OF MESSAGES POSTED (USER'S TOTAL)
  660. UN$    = ╒SER - ╬AME
  661. UP$    = ╒SER - ╨ASSWORD
  662. US$    = ╒SER - ╙TATUS
  663. UT     = ╒SER - ─AILY ╘IME ╠IMIT
  664. UT%    = ╒SER - ╘IME ╒SED ╘ODAY (PREVIOUS SESSIONS ONLY)
  665. (├ONTAINS THE VALUE OF VARIABLE T2 AT TIME OF USER'S LAST
  666. LOGOFF.)
  667. UU     = ╒SER - ╬UMBER OF UPLOADS
  668. UX$    = ╒SER - ╨ROTOCOL
  669. (═UST CONTAIN THE NAME OF A PROTOCOL, EVEN IF PROTOCOL DOES NOT
  670. EXIST.)
  671. X      - ╘EMP - ─ISK ╙PACE ┴VAILABLE
  672. X$     = ─ATE AND ╘IME / ╘EMP
  673. (─ATE AND TIME IN FORMAT "┘┘══── AT ╚╚:══?═".)
  674. XM$    - ╠AST ═ESSAGE ┼DITTED (╞ILENAME OF MESSAGE)
  675. YY     = ┘EAR
  676. (╓ALID RANGE IS 0 TO 99.  ┴NY VALUE LESS THAN 81 IS IN THE 21ST
  677. CENTURY.)
  678. Z$     - ╘EMP
  679. ZR$    - ├ONSTANT = "000000" (USED TO CHECK IF ┬┬╙ DISABLED)
  680.  
  681. ╔F THE ┬┬╙ CRASHES WITH AN ERROR, OR DOES A WARM START, YOU MAY DISPLAY THE
  682. VALUE OF ANY VARIABLE WITH THE ╨╥╔╬╘ COMMAND.
  683.  
  684.  ------------------------------------------------------------------------------
  685.  
  686. ═ODULE ╨ROGRAMMING ╟UIDE:
  687.  
  688. ═ODULE FILES ARE LOCATED ON A ╙╔╟-FILE DRIVE SO THAT EACH ╙╔╟ CAN HAVE IT'S
  689. OWN SET OF MODULES.  ┼ACH MODULE MAY BE WRITTEN USING ANY ├64 ASSEMBLER.  ╘HE
  690. MODULES MUST BE GIVEN A FILENAME CONSISTING OF A ╙╔╟ LETTER, A PERCENT SIGN,
  691. AND THE NAME OF THE MODULE IN UPPERCASE LETTER, I.E. "A%╓╧╘┼".  ╘HE ┬┬╙ WILL
  692. LOAD A MODULE OF ANY SEQUENTIAL FILE TYPE (╨╥╟, ╙┼╤, OR ╒╙╥).
  693.  
  694. ═ODULES ARE RUN ONLINE BY USING THE COMMAND
  695.  
  696. ┼[╪]EC: <MODULENAME>
  697.  
  698. AT THE ├╧══┴╬─ PROMPT.  ┬Y LEAVING OUT THE MODULENAME, A DESCRIPTION FILE WILL
  699. BE DISPLAYED.  ╘HE FILENAME OF THIS FILE CONSISTS OF THE ╙╔╟ LETTER AND A
  700. PERCENT SIGN.  ╘HIS FILE SHOULD BE LOCATED ON THE ╙╔╟FILE DRIVE AND IT SHOULD
  701. CONTAIN A LIST OF AVAILABLE MODULES.
  702.  
  703. ╫HEN WRITING MODULES FOR THE ─╘╩-┬┬╙, YOU SHOULD OBSERVE THE FOLLOWING
  704. GUIDELINES:
  705.  
  706. 1.  ╘O HELP MAINTAIN COMPATABILITY WITH FUTURE REVISIONS OF THE ─╘╩-┬┬╙, TRY
  707. NOT TO READ OR MODIFY ANY MEMORY LOCATIONS MENTIONED IN THE MEMORY MAP
  708. EXCEPT FOR THE ONES LABEL "╘EMPORARY WORK SPACE", "╘EMPORARY WORK
  709. POINTER", OR THOSE MEMORY LOCATIONS MENTIONED BELOW.  ╔F THE MEMORY
  710. LOCATIONS OTHER THAN THE TEMPORARY LOCATIONS ARE CHANGED, THEY MUST BE
  711. RESTORED TO THEIR ORIGINAL VALUES UPON EXITING THE MODULE.
  712.  
  713. 2.  ╘HE ┬┬╙ KEEPS THE FOLLOWING FILES OPEN AT ALL TIMES:
  714. ╞ILE 2 = ┬┬╙ ╔NPUT/╧UTPUT ├HANNEL
  715. ╞ILE 4 = ╨RINTER ╧UTPUT/┼DIT-┬UFFER ╔NPUT
  716. ─O NOT CLOSE THESE FILES! ┴LL OTHER FILE NUMBERS ARE AVAILABLE FOR YOUR
  717. USE.  ╚OWEVER, IF YOU OPEN A FILE, CLOSE IT BEFORE EXITING YOUR MODULE.
  718.  
  719. 3.  ═ODULES ARE LOADED INTO THE EDIT BUFFER MEMORY.  ═ODULES MUST LOAD AND
  720. EXECUTE AT $┴001.  ═ODULE SIZE MAY BE LARGER THAN THE CONFIGURED SIZE OF
  721. THE EDIT BUFFER (IN THE S.1 FILE), BUT IT MAY NOT EXCEED THE MAXIMUM SIZE
  722. OF THE EDIT BUFFER (4095 BYTES).  ╙INCE MODULES ARE LOCATED UNDER ┬┴╙╔├
  723. ╥╧═, YOU CANNOT ACCESS ANY ┬┴╙╔├ ╥╧═ ROUTINES WITHOUT BRANCHING OUT FROM
  724. UNDER THE ┬┴╙╔├ ╥╧═ AND THEN SWITCHING THE ┬┴╙╔├ ╥╧═ IN TEMPORARILY.  ┴LL
  725. MODULES MUST EXIT WITH AN ╥╘╙ INSTRUCTION.
  726.  
  727. 4.  ╒SE THE DOCUMENTED ╦ERNAL ╥╧═ VECTORS AS MUCH AS POSSIBLE.  ╘HIS APPLIES
  728. ESPECIALLY TO THE ╥╙-232 ╔/╧ ROUTINES.
  729.  
  730. 5.  ┴NY DISK ACCESS SHOULD OPEN FILES USING DEVICE NUMBERS COORESPONDING TO
  731. THE ┴╙├╔╔ VALUES OF THE DRIVE LETTERS (┴=65, ┬=66, ETC).  ╧NCE THE FILE
  732. HAS BEEN OPEN, THE ┬┬╙'S KERNAL OVERLAY WILL CONVERT THE LOGICAL DRIVE
  733. NUMBER INTO A PHYSICAL DEVICE NUMBER SO THAT LOCATION $┬┴ WILL CONTAIN
  734. THE ACTUAL DEVICE NUMBER AS IT USUALLY DOES.
  735.  
  736. 6.  ╘HE SOFTWARE ╩IFFY CLOCK VALUES MAY BE CHANGED AND DO NOT HAVE TO BE
  737. RESTORED WHEN RETURNING CONTROL TO THE ┬┬╙.
  738.  
  739. 7.  ─O NOT TURN INTERRUPTS OFF, OR MODIFY INTERRUPT ROUTINES.  ╘HE ┬┬╙ USES THE
  740. ╔╥╤ ROUTINE TO DISPLAY THE WINDOW AT THE TOP OF THE SCREEN AND TO CHECK FOR
  741. CARRIER.  ╘HE ╬═╔ ROUTINE IS USED FOR ╥╙-232 COMMUNICATIONS.
  742.  
  743. 8.  ╘O PREVENT LOCKUP PROBLEMS, ALWAYS CHECK FOR CARRIER IN ALL LOOPS THAT DO
  744. NOT EXIT IN A SHORT PERIOD OF TIME.  ├ARRIER MAY BE CHECKED BY CALLING THE
  745. FOLLOWING SUBROUTINE:
  746.  
  747. CARRIER
  748.   ; GET RS-232 STATUS.
  749.   LDA $9FE7
  750.   ; MASK ALL BITS EXCEPT THE CARRIER BIT.
  751.   AND #$10
  752.   ; MASK RESULT WITH CARRIER-DETECT MASK (FORCE CARRIER IF IN
  753.   ; CONSOLE MODE).  SINCE DOING A FILE TRANSFER WHILE IN CONSOLE
  754.   ; MODE IS USELESS (RS-232 I/O IS DISABLED), LEAVE THIS INSTRUCTION
  755.   ; OUT IF YOU ARE WRITING A PROTOCOL MODULE.
  756.   AND $02A9
  757.   ; EXIT SUBROUTINE.
  758.   RTS
  759.  
  760. ╘HIS SUBROUTINE WILL RETURN ZERO SET (REGISTER ┴=0) IF CARRIER IS PRESENT,
  761. OR ZERO CLEARED (REGISTER ┴=16) IF CARRIER IS NOT PRESENT.  ╔F CARRIER IS
  762. NOT PRESENT, THE MODULE SHOULD CLOSE ALL FILES AND EXIT.  ╘HE ┬┬╙ WILL THEN
  763. HANDLE THE CARRIER-DROP.  ─O NOT CHECK CARRIER AT LOCATION $──01 AS SOME
  764. MODEMS/INTERFACES MAY USE REVERSE CARRIER AND ALSO THIS LOCATION IS NOT
  765. USED WITH THE ╙WIFTLINK-232 CARTRIDGE.
  766.  
  767. 9.  ╘HE ─╘╩-┬┬╙ DOES NOT USE A FULL 256-BYTE ╥╙-232 OUTPUT BUFFER.  ╘HIS IS TO
  768. HELP PREVENT GARBLING PROBLEMS WITH THE SOFTWARE ╥╙-232 ROUTINES.  ╘HE
  769. ╙WIFTLINK MODE ALSO DOES NOT USE AN OUTPUT BUFFER.  ╘HIS KEEPS THE ╬═╔
  770. ROUTINE AS SHORT AS POSSIBLE AND ALLOWS FOR MORE COMPATABLITY WITH THE
  771. SOFTWARE ╥╙-232 ROUTINES.  ╘HE FULL 256-BYTE INPUT BUFFER IS USED HOWEVER,
  772. WITH BOTH SOFTWARE AND ╙WIFTLINK ╥╙-232 MODES.  ╨LEASE DO NOT MANIPULATE
  773. THE ╔/╧ BUFFERS DIRECTLY.  ╒SE THE ╦ERNAL ╔/╧ ROUTINES.
  774.  
  775. 10. ╘HE ╙WIFTLINK'S RECEIVER SECTION IS DISABLED DURING ALL SERIAL PORT ACCESS
  776. TO PREVENT SERIAL PORT TIMING PROBLEMS.  ╘HE RECEIVER IS ENABLED VIA THE
  777. ╦ERNAL ├╠╥├╚╬ ROUTINE.  ┴LWAYS REMEMBER TO CALL ├╠╥├╚╬ AFTER A DISK ACCESS
  778. IF YOU WANT TO BE ABLE TO RECEIVE CHARACTERS FROM THE MODEM.
  779.  
  780. 11. ╘HE ╙WIFTLINK ╬═╔ ROUTINE STORES BITS 0 THROUGH 3 OF THE STATUS REGISTER TO
  781. LOCATION $0297 SO YOU CAN USE THIS LOCATION AS YOU WOULD NORMALLY.
  782. ╠OCATION $02┴1 IS NOT USED IN ╙WIFTLINK MODE.
  783.  
  784. 12. ╒SE ╟┼╘╔╬, NOT ├╚╦╔╬, FOR ALL FILE #2 (MODEM/KEYBOARD) INPUT.
  785.  
  786. 13. ┘OU MAY FIND THE ┬┴╙╔├ VARIABLES LISTED ABOVE WITH A "=" AFTER THE
  787. VARIABLE NAME USEFUL.  ╙INCE THE ┬┴╙╔├ ╥╧═ IS SWITCHED OUT, YOU WILL HAVE
  788. TO DEVISE YOUR OWN METHOD OF ACCESS THE VARIABLE YOU WANT TO USE.  ╓ARIABLE
  789. POSITIONS MAY VARY SO YOU SHOULD ALWAYS SEARCH FOR A VARIABLE BY NAME.
  790. ─O NOT ASSUME THAT A GIVEN VARIABLE WILL ALWAYS BE IN THE SAME LOCATION
  791. IN THE VARIABLE AREA IN FUTURE REVISIONS.  ╔N MOST CASES, YOU SHOULD NOT
  792. CHANGE THE VALUE OF A VARIABLE.
  793.  
  794. 14. ─O NOT CALL ┬┴╙╔├'S RANDOM NUMBER GENERATOR.  ╘HE MEMORY LOCATION USED TO
  795. STORE THE SEED VALUE IS BEING USED FOR OTHER PURPOSES.
  796.  
  797.  ------------------------------------------------------------------------------
  798.  
  799. ╨ROTOCOL ═ODULE ╨ROGRAMMING ╟UIDE:
  800.  
  801. ╨ROTOCOL FILES ARE A MORE SPECIALIZED FORM OF MODULE.  ╘HE FILENAME OF A
  802. PROTOCOL MODULE CONSISTS OF "P-" FOLLOWED BY THE PROTOCOL NAME IN UPPERCASE
  803. LETTERS.  ╘HESE FILES ARE LOCATED ON DRIVE ┴.
  804.  
  805. ╔N ADDITION TO THE ABOVE GUIDELINES, THE FOLLOWING APPLIES TO PROTOCOL FILES:
  806.  
  807. 15. ╘HE ─╘╩-┬┬╙ OPENS THE FILE TO BE RECEIVED OR SENT BEFORE CALLING THE
  808. PROTOCOL MODULE ROUTINE.  ╘HE FILE NUMBER IS 8.  ╘HE COMMAND CHANNEL IS
  809. ALSO OPEN USING FILE NUMBER 1.
  810.  
  811. (╔N THE FUTURE, THIS WILL CHANGE IF/WHEN MULTI-FILE TRANSFERS ARE
  812. IMPLIMENTED.  ╞ILE 8 WILL BE A ╨╥╟-FORMAT DIRECTORY FILE AND FILE 1
  813. WILL BE CLOSED.  ╘HE LOADING ADDRESS MAY CHANGE TO $┴000 OR $┴002 TO
  814. FORCE INCOMPATABILITY WITH THE OLD MODULES.  ╘HIS IS TO PREVENT PROBLEMS
  815. WITH RUNNING MULTI-FILE TRANSFERS ON AN OLDER ┬┬╙ THAT CAN'T HANDLE THEM.)
  816.  
  817. 16. ╘HE PROTOCOL MODULE MUST CONTAIN BOTH SEND AND RECEIVE ROUTINES.  ╘HE
  818. RECEIVE ROUTINE MUST START AT $┴001 AND THE SEND ROUTINE MUST START AT
  819. $┴004.
  820.  
  821. 17. ╒NLESS THE PROTOCOL IS AN ┴╙├╔╔ TRANSFER, BOTH THE SEND AND RECEIVE ROUTINES
  822. MUST TURN ┴╙├╔╔ TRANSLATION OFF.  ┼CHO SHOULD ALSO BE TURNED OFF.  ═AKE
  823. SURE YOU TURN TRANSLATION AND ECHO BACK ON WHEN THE TRANSFER IS FINISHED.
  824. ╘RANSLATION AND ECHO CONTROL IS AT $02┴7.
  825.  
  826. 18. ┬OTH SEND AND RECEIVE ROUTINES USE THE ┴ REGISTER TO INDICATE THE SUCCESS
  827. OF THE TRANSFER UPON EXITING THE MODULE:
  828.   #$00 = FILE TRANSFER COMPLETE - NO ERROR
  829.   #$01 = ERROR - TIMEOUT
  830.   #$02 = ERROR - CANCELLED BY USER
  831.   #$03 = ERROR - CANCELLED BY SYSOP
  832.   #$04 = ERROR - OTHER (UNUSED)
  833.   #$05 = ERROR - DISK FULL
  834.   #$10 = ERROR - CARRIER DROP
  835.  
  836. ┴NY NON-ZERO STATUS ON A FILE RECEIVE WILL CAUSE THE ┬┬╙ TO SCRATCH THE
  837. FILE.
  838.  
  839. ╬OTE THAT THE ROUTINE DESCRIBED EARLIER TO CHECK FOR CARRIER WILL SET ┴ TO
  840. #$10 FOR YOU IF CARRIER IS DROPPED.  ╥EMEMBER TO LEAVE THE  "AND $02A9"
  841. INSTRUCTION OUT OF YOUR CARRIER DETECT ROUTINE WHEN WRITING A PROTOCOL
  842. MODULE.
  843.  
  844. 19. ═AKE SURE YOU CHECK FOR CARRIER AND IMPLIMENT TIMEOUTS IN ALL LOOPS TO
  845. PREVENT TOO MUCH IDLE TIME BEING WASTED.
  846.  
  847. 20. ╒SE THE SOFTWARE JIFFY CLOCK FOR TIMING.
  848.  
  849. 21. ╘RY NOT TO BUFFER TOO MANY BLOCKS IN MEMORY AT A TIME.  ┴LOT OF FILE
  850. TRANSFER PROTOCOLS WRITTEN FOR THE ├OMMODORE BUFFER UP TO 16 BLOCKS OR MORE
  851. IN MEMORY BEFORE WRITING TO DISK OR SENDING TO THE MODEM.  ╘HIS SLOWS DOWN
  852. THE FILE TRANSFER.  ╔NSTEAD, WHEN SENDING DATA, READ ONE OR TWO BLOCKS OF
  853. DATA FROM THE DISK AS YOU NEED IT.  ╫HEN RECEIVING DATA, WRITE IT TO DISK
  854. AS SOON AS IT HAS BEEN VERIFIED CORRECT.
  855.  
  856. 22. ┘OUR PROTOCOL MODULE SHOULD DISPLAY THE STATUS OF THE TRANSFER ON THE
  857. SCREEN AS IT GOES.  ╘RY NOT TO USE THE WHOLE SCREEN.  ┴T A MINIMUM, YOU
  858. SHOULD DISPLAY THE NUMBER OF BLOCKS SENT OR RECEIVED.
  859.  
  860. 23. ╨ROVIDE SOME WAY FOR THE SYSOP AND USER TO ABORT THE TRANSFER.  ┴ ├╧╬╘╥╧╠-╪
  861. WOULD CONFORM TO THE ORIGINAL ─╘╩ XMODEM'S WAY OF ABORTING THE TRANSFER.
  862. ╔F YOU THINK A ├╧╬╘╥╧╠-╪ IS TOO EASY TO ABORT THE TRANSFER BY ACCIDENT, THEN
  863. TRY TWO ├╧╬╘╥╧╠-╪'S IN A ROW WITHIN A LIMITTED AMOUNT OF TIME.  ╥EMEMBER TO
  864. SET REGISTER ┴ TO THE APPROPRIATE VALUE WHEN EXITING.
  865.  
  866. 24. ╘HE MAXIMUM NUMBER OF 254-BYTE DISK BLOCKS THAT CAN BE SAVED TO DISK WHEN
  867. RECEIVING A FILE IS STORED AT LOCATIONS $02┬2 AND $02┬3 (IN LOW/HIGH BYTE
  868. ORDER).  ┼XCEEDING THIS LIMIT BY ABOUT 12 BLOCKS MAY RESULT IN A CORRUPTED
  869. DISK.  (12 BLOCKS WAS CHOSEN TO PROVIDE A SAFETY ZONE.)  ╘HE PROTOCOL
  870. SHOULD ABORT WHEN THIS LIMIT HAS BEEN REACHED.  ┬EFORE THE TRANSFER BEGINS,
  871. YOU CAN MULTIPLY OR DIVIDE THIS MEMORY LOCATION TO GET THE NUMBER OF FILE
  872. TRANSFER BLOCKS (I.E. MULTIPLY BY 2 TO GET THE APPROXIMATE NUMBER OF 128-
  873. BYTE XMODEM BLOCKS).
  874.  
  875. 25. ╫HEN THE TRANSFER IS COMPLETE, YOU SHOULD CLOSE FILES 8 AND 1.  ╔F THE
  876. TRANSFER WAS NOT A SUCCESS, YOU DON'T HAVE TO DELETE THE FILE.  ╘HE ┬┬╙
  877. WILL DO THAT FOR YOU IF THE PROTOCOL MODULE EXITS WITH THE ┴ REGISTER
  878. HOLDING A NON-ZERO VALUE.
  879.  
  880.  ------------------------------------------------------------------------------
  881.  
  882. ═ODULE ╨ROGRAMMING ┼XAMPLES:
  883.  
  884. ; ----------------------------------------------------------------------------
  885. ;   ╘URNING ┴╙├╔╔ TRANSLATION AND SCREEN ECHO OFF AND ON.  (╒SED WHEN
  886. ;   WRITING A FILE TRANSFER PROTOCOL.)
  887.  
  888. LDA $02┴7       ; GET CURRENT ┬┬╙ ╔/╧ STATUS
  889. PHA             ; SAVE IT ON STACK FOR LATER RESTORAL
  890. LDA #$00        ; VALUE TO TURN TRANSLATION AND ECHO OFF
  891. STA $02┴7       ; STORE BACK INTO ┬┬╙ ╔/╧ STATUS
  892. STA $008┼       ; TURN "QUICK-KEYS" OFF.
  893.  
  894. :               ; YOUR CODE GOES HERE
  895.  
  896. PLA             ; RESTORE OLD ┬┬╙ ╔/╧ STATUS
  897. STA $02┴7       ;
  898.  
  899. ;   ╘HE ┬┬╙ WILL RESTORE THE VALUE OF $008┼ WHEN IT EXITS THE MODULE; YOU DON'T
  900. ;   HAVE TO SAVE IT.
  901. ; ----------------------------------------------------------------------------
  902. ;   ╟ETTING TYPED-IN INPUT FROM A USER.  (╒SED WHEN WRITING AN INTERACTIVE
  903. ;   MODULE SUCH AS A VOTING BOOTH, QUESTIONAIRE, ETC.)
  904.  
  905. BUFFER      =   $├000
  906. _╟┼╘├╚┴╥    =   $├17─
  907. ├╠╥├╚╬      =   $╞╞├├
  908. ├╚╦╔╬       =   $╞╞├6
  909. ├╚╦╧╒╘      =   $╞╞├9
  910. ├╚╥╧╒╘      =   $╞╞─2
  911.  
  912. ╒╔╬╨╒╘
  913. JSR ├╠╥├╚╬      ; CLEAR ╔/╧ CHANNELS IF NEEDED
  914. LDX #$02        ; SETUP ┬┬╙ ╔/╧
  915. JSR ├╚╦╔╬
  916. LDX #$02
  917. JSR ├╚╦╧╒╘
  918. LDY #$00        ; RESET BUFFER POINTER
  919. ╠╧╧╨
  920. JSR _╟┼╘├╚┴╥   ; GET A CHARACTER FROM THE USER
  921. BCS ┼╪╔╘        ; EXIT MODULE IF CARRY IS SET
  922. CMP #$0─        ; ╥┼╘╒╥╬ KEY?
  923. BEQ ├╥          ; EXIT INPUT ROUTINE IF YES
  924. CMP #$14        ; ─┼╠ KEY?
  925. BEQ ─┼╠
  926. CMP #$20        ; INVALID CONTROL CHARACTER?
  927. BCC ╠╧╧╨        ; IGNORE AND GET ANOTHER CHARACTER IF YES
  928. CPY #40         ; 40 CHARACTERS ENTERED ALREADY?  (┘OU MAY CHANGE
  929. ; THIS VALUE IF DESIRED.)
  930. BCS ╠╧╧╨        ; IGNORE AND GET ANOTHER CHARACTER IF YES
  931. JSR ├╚╥╧╒╘      ; ECHO CHARACTER TO USER
  932. STA BUFFER,Y    ; STORE CHARACTER IN INPUT BUFFER
  933. INY             ; INCREMENT BUFFER POINTER
  934. BNE ╠╧╧╨        ; GET ANOTHER CHARACTER
  935. ─┼╠
  936. CPY 0           ; IS BUFFER EMPTY?
  937. BEQ ╠╧╧╨        ; INGORE AND GET ANOTHER CHARACTER IF YES
  938. JSR ├╚╥╧╒╘      ; ECHO ─┼╠ CHARACTER TO USER
  939. DEY             ; DECREMENT BUFFER POINTER
  940. BPL ╠╧╧╨        ; GET ANOTHER CHARACTER
  941. ├╥
  942. JSR ├╚╥╧╒╘      ; ECHO CARRIAGE RETURN TO USER
  943. LDA #$00        ; STORE A NULL AFTER BUFFER CHARACTERS (OPTIONAL)
  944. STA BUFFER,Y
  945. ┼╪╔╘
  946. RTS             ; EXIT INPUT SUBROUTINE
  947.  
  948. ;   ╘HIS SUBROUTINE ASSUMES ┬┬╙ ╔/╧ CONTROL ($02┴7) IS SET FOR TRANSLATION AND
  949. ;   ECHO ON.  "BUFFER" POINTS TO AN AREA OF MEMORY SUFFICIENTLY LARGE ENOUGH
  950. ;   TO CONTAIN ALL THE CHARACTERS THE USER CAN TYPE IN.  ╒PON EXITING THIS
  951. ;   SUBROUTINE, REGISTER ┴ CONTAINS #$0─, ┘ CONTAINS THE NUMBER OF CHARACTERS
  952. ;   TYPED IN, AND THE CHARACTERS THEMSELVES ARE STORED AT "BUFFER".  ╔F THIS
  953. ;   SUBROUTINE EXITS WITH CARRY SET, THEN YOU SHOULD EXIT THE MODULE AS SOON
  954. ;   AS POSSIBLE.  ╬OTE THAT CALLS TO _╟┼╘├╚┴╥ WILL RESET THE JIFFY CLOCK.  ╔F
  955. ;   CARRIER IS DROPPED WHILE IN THIS ROUTINE, CARRY WILL BE SET, SO THERE IS
  956. ;   NO NEED TO ADD CARRIER DETECT TO THIS ROUTINE.  ╘HIS ROUTINE WILL ALSO
  957. ;   HANDLE ALL STANDARD CONSOLE INTERRUPTS SUCH AS SYSOP-PAGE, ├= STATUS
  958. ;   CHANGE, ETC IF YOU EXIT YOUR MODULE WHEN THIS ROUTINE RETURNS WITH CARRIER
  959. ;   SET.
  960. ; ----------------------------------------------------------------------------
  961. ;   ╟ETTING THE VALUE OF A STRING VARIABLE.  (╒SED WHEN YOU WANT TO USE OR
  962. ;   DISPLAY THE VALUE OF A ┬┴╙╔├ STRING VARIABLE SUCH AS THE DATE, USER'S NAME,
  963. ;   ETC.)
  964.  
  965. ADRS        =   $0019   ; ╒SED TO STORE ADDRESS OF STRING DATA
  966. VAR         =   $0021   ; ╒SED TO STORE ADDRESS OF VARIABLE DESCRIPTOR
  967. LENGTH      =   $0023   ; ╒SED TO STORE LENGTH OF STRING DATA
  968.  
  969. ╞╔╬─╓┴╥
  970. PLA             ; GET ADDRESS OF JSR INSTRUCTION USED TO CALL THIS
  971. STA ADRS        ;  THIS SUBROUTINE (VARIABLE NAME IS STORED
  972. PLA             ;  IMMEDIATELY AFTER THE JSR INSTRUCTION)
  973. STA ADRS+1
  974. INC ADRS
  975. BNE ╞╓00
  976. INC ADRS+1
  977. ╞╓00
  978. LDA #$02        ; SET UP JMP INSTRUCTION AT END OF THIS SUBROUTINE
  979. CLC             ;  TO JUMP BACK INTO THE CALLING ROUTINE JUST AFTER
  980. ADC ADRS        ;  THE VARIABLE NAME
  981. STA ╩╒═╨
  982. LDA #$00
  983. ADC ADRS+1
  984. STA ╩╒═╨+1
  985. LDA $2D         ; FIND START OF VARIABLE STORAGE AREA
  986. STA VAR
  987. LDA $2E
  988. STA VAR+1
  989. ╞╓01
  990. LDY #$00        ; (VAR) POINTING TO DESIRED VARIABLE?
  991. LDA (VAR),Y
  992. CMP (ADRS),Y
  993. BNE ╞╓02
  994. INY
  995. LDA (VAR),Y
  996. EOR #$80
  997. CMP (ADRS),Y
  998. BEQ ╞╓03        ; JUMP IF VARIABLE FOUND
  999. ╞╓02
  1000. LDA #$07        ; OTHERWISE GO TO NEXT VARIABLE
  1001. CLC
  1002. ADC VAR
  1003. STA VAR
  1004. BCC ╞╓01
  1005. INC VAR+1
  1006. BNE ╞╓01
  1007. ╞╓03
  1008. LDY #$02        ; VARIABLE FOUND (VAR POINTS TO VARIABLE NAME
  1009. LDA (VAR),Y     ;  IN VARIABLE TABLE
  1010. STA (LENGTH)    ; STORE LENGTH
  1011. INY
  1012. LDA (VAR),Y
  1013. STA ADRS        ; STORE ADDRESS
  1014. INY
  1015. LDA (VAR),Y
  1016. STA ADRS+1
  1017. JMP             ; RETURN TO CALLING ROUTINE
  1018. ╩╒═╨    $0000
  1019.  
  1020. ;   ╘HIS SUBROUTINE MUST BE CALLED WITH THE NAME OF THE VARIABLE STORED IN
  1021. ;   THE TWO BYTES FOLLOWING THE JSR STATEMENT.  ╘HE VARIABLE NAME MUST START
  1022. ;   WITH A LOWERCASE LETTER, AND END WITH A LOWERCASE LETTER, A DIGIT, OR A
  1023. ;   SPACE.  ╘HE VARIABLE MUST ALREADY EXIST, OTHERWISE THE ROUTINE WILL LOCKUP.
  1024. ;   ╒PON EXITING, "VAR" POINTS TO THE VARIABLE NAME IN THE VARIABLE TABLE,
  1025. ;   "LENGTH" CONTAINS THE NUMBER OF CHARACTERS IN THE STRING VARIABLE, AND
  1026. ;   "ADRS" POINTS TO THE FIRST CHARACTER OF THE STRING.  ╥EGISTERS ┴ AND ┘ ARE
  1027. ;   MODIFIED.
  1028.  
  1029. ;   ╔F YOU WISH TO READ A NUMERIC VARIABLE, YOU MUST DEVISE YOUR OWN METHOD
  1030. ;   OF USING THE FLOATING POINT INFORMATION IN THE VARIABLE.  ╧NCE YOU DEVISE
  1031. ;   A WAY TO ACCESS THE ┬┴╙╔├ ╥╧═, YOU CAN USE THE ╔NTEGER/╞LOATING ╨OINT
  1032. ;   CONVERSION ROUTINES AVAILABLE THROUGH VECTORS $3/$4 AND $5/$6.
  1033.  
  1034. ;   ┘OU CAN ALSO TRY SWITCHING IN ┬┴╙╔├ AT TIMES WHEN YOU NEED TO.  ╩UST
  1035. ;   REMEMBER NOT TO SWITCH ┬┴╙╔├ IN WHILE YOU ARE STILL UNDER THE ┬┴╙╔├ ╥╧═.
  1036.