home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128BBS / DTJPGUIDE.ARC / DTJPROGRAMMING < prev   
Encoding:
Text File  |  2019-04-13  |  51.6 KB  |  1,174 lines

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