home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 3 / MA_Cover_3.iso / maksiu / extensions / maxsdhext_v0.2.lha / NewFiles.AMOS / NewFiles.amosSourceCode
Encoding:
AMOS Source Code  |  1994-09-13  |  19.4 KB  |  684 lines

  1. '***************************************************************************** 
  2. '***************************************************************************** 
  3. '* AMOS NEW Files Lister, written by Ari Tsironis, 250594, PUBLIC DOMAIN     * 
  4. '***************************************************************************** 
  5. '***************************************************************************** 
  6. '
  7. '
  8. '***************************************************************************** 
  9. '* Increase Variable Space                                                   * 
  10. '***************************************************************************** 
  11. '
  12. Set Buffer 10
  13. '
  14. '
  15. '***************************************************************************** 
  16. '* Important Offsets into File.data                                          *   
  17. '***************************************************************************** 
  18. '
  19. F_HEADER=466
  20. F_ENTRY=202
  21. '
  22. '
  23. '***************************************************************************** 
  24. '* Important Offsets into User.data                                          * 
  25. '***************************************************************************** 
  26. '
  27. U_HEADER=66
  28. U_ENTRY=308
  29. U_DATE=284
  30. '
  31. '
  32. '***************************************************************************** 
  33. '* Important Offsets into MAXsBBS.config                                     * 
  34. '***************************************************************************** 
  35. '
  36. S_HEADER=2496
  37. S_ENTRY=62
  38. S_ENTRIES=100*62
  39. '
  40. '
  41. '***************************************************************************** 
  42. '* Numeric Constants                                                         * 
  43. '***************************************************************************** 
  44. '
  45. BUFFER_ENTRIES=200
  46. NO_OF_SECTIONS=100
  47. NO_OF_FILES=8
  48. NO_OF_MARKS=30
  49. SECTION_NAME_LENGTH=42
  50. FILE_NAME_LENGTH=41
  51. DESCRIPTION_LENGTH=60
  52. USER_NAME_LENGTH=41
  53. DROPPED_CARRIER=20
  54. NO_OF_ROWS=24
  55. DLOAD_FUNC=24
  56. '
  57. '
  58. '***************************************************************************** 
  59. '* String Constants                                                          * 
  60. '***************************************************************************** 
  61. '
  62. FILE_DATA$="BBS:Files/File.data"
  63. BBS_CONFIG$="BBS:MAXSBBS.config"
  64. USER_DATA$="BBS:Userfiles/User.data"
  65. '
  66. '
  67. '***************************************************************************** 
  68. '* Global Arrays                                                             * 
  69. '***************************************************************************** 
  70. '
  71. Dim SECTIONS$(NO_OF_SECTIONS),L_ACCESS(NO_OF_SECTIONS),H_ACCESS(NO_OF_SECTIONS)
  72. Dim SCR_MARKS(NO_OF_FILES),SCR_FILES$(NO_OF_FILES),SCR_SECTIONS(NO_OF_FILES)
  73. Dim MARKED_FILES$(NO_OF_MARKS),MARKED_SECTIONS(NO_OF_MARKS)
  74. '
  75. '
  76. '***************************************************************************** 
  77. '* Global Numerics                                                           * 
  78. '***************************************************************************** 
  79. '
  80. MARKS=0
  81. FILE_DATE=0
  82. FILE_LENGTH=0
  83. DLOADS=0
  84. SECTION=0
  85. '
  86. '
  87. '***************************************************************************** 
  88. '* Global Strings, MUST be Pre-Allocated to Maximum Anticipated Size!!!      * 
  89. '***************************************************************************** 
  90. '
  91. SECTION$=Space$(SECTION_NAME_LENGTH)
  92. FILE_NAME$=Space$(FILE_NAME_LENGTH)
  93. DESCRIPTION$=Space$(DESCRIPTION_LENGTH)
  94. '
  95. '
  96. '***************************************************************************** 
  97. '* Get the Node Number that MAXS sends us, through Command Args              * 
  98. '***************************************************************************** 
  99. '
  100. NODE_NUMBER=Val(Left$(Command Line$,1))
  101. '
  102. '
  103. '***************************************************************************** 
  104. '* Open a MAXS AMOS Door Port                                                * 
  105. '***************************************************************************** 
  106. '
  107. CARRIER= Extension_16_0006(NODE_NUMBER)
  108. '
  109. '
  110. '***************************************************************************** 
  111. '* Draw Initial Screen, and Check for Initial Loss of Carrier                * 
  112. '***************************************************************************** 
  113. '
  114. CARRIER=CARRIER or Extension_16_0072(12)
  115. CARRIER=CARRIER or Extension_16_0152(13,0,"DOORS:AMOS/NewFiles.ansi")
  116. _LOCATE[33,12]
  117. CARRIER=CARRIER or Extension_16_002A(Chr$(27)+"[37;41mSearching....."+Chr$(27)+"[0m")
  118. If CARRIER=DROPPED_CARRIER
  119.     Extension_16_0018 
  120.    End 
  121. End If 
  122. '
  123. '
  124. '***************************************************************************** 
  125. '* Get the User's Access Level                                               * 
  126. '***************************************************************************** 
  127. '
  128. U_ACCESS= Extension_16_0106(1)
  129. '
  130. '
  131. '***************************************************************************** 
  132. '* Allocate Space and then Get the User's Name                               * 
  133. '***************************************************************************** 
  134. '
  135. USER_NAME$=Space$(USER_NAME_LENGTH)
  136. CARRIER=CARRIER or Extension_16_011A(1,USER_NAME$)
  137. '
  138. '
  139. '***************************************************************************** 
  140. '* Get Today's Date                                                          * 
  141. '***************************************************************************** 
  142. '
  143. _GET_DATE
  144. _TODAYS_DATE=Param
  145. '
  146. '
  147. '***************************************************************************** 
  148. '* Get the Date of the User's Last Login                                     * 
  149. '***************************************************************************** 
  150. '
  151. _GET_USER_DATE
  152. USER_DATE=Param
  153. '
  154. '
  155. '***************************************************************************** 
  156. '* Read in ALL the File Sections' Names                                      * 
  157. '***************************************************************************** 
  158. '
  159. _GET_SECTION_NAMES
  160. '
  161. '
  162. '***************************************************************************** 
  163. '* Do the File Showing/Selecting/Downloading                                 * 
  164. '***************************************************************************** 
  165. '
  166. _MAIN
  167. '
  168. '
  169. '
  170. '***************************************************************************** 
  171. '* Close the MAXS AMOS Door Port and Finish                                  * 
  172. '***************************************************************************** 
  173. '
  174.  Extension_16_0018 
  175. '
  176. End 
  177. '
  178. '
  179. '
  180. Procedure _MAIN
  181.    '
  182.    Shared FILE_DATE,FILE_LENGTH,DLOADS,SECTION
  183.    Shared SECTION$,FILE_NAME$,DESCRIPTION$
  184.    Shared FILE_DATA$,F_HEADER,F_ENTRY,BUFFER_ENTRIES
  185.    Shared _TODAYS_DATE,USER_DATE,FILE_NAME_LENGTH
  186.    Shared U_ACCESS,L_ACCESS(),H_ACCESS()
  187.    Shared SCR_FILES$(),SCR_SECTIONS()
  188.    Shared NO_OF_FILES,NO_OF_MARKS,MARKED_FILES$(),MARKED_SECTIONS()
  189.    Shared DLOAD_FUNC,NO_OF_ROWS,CARRIER,DROPPED_CARRIER
  190.    '
  191.    '
  192.    Open In 1,FILE_DATA$
  193.    FLENGTH=Lof(1)
  194.    '
  195.    '
  196.    '*** Reads in BUFFER_ENTRIES, (ie 200), Files at a Time ***    
  197.    '
  198.    NO_OF_ENTRIES=(FLENGTH-F_HEADER)/F_ENTRY
  199.    NO_OF_BUFFERS=NO_OF_ENTRIES/BUFFER_ENTRIES
  200.    ENTRIES_REMAINING=NO_OF_ENTRIES mod BUFFER_ENTRIES
  201.    '
  202.    '  
  203.    '*** Allocate Memory for our BUFFER_ENTRIES Files ***  
  204.    '
  205.    Pof(1)=F_HEADER
  206.    Reserve As Work 15,F_ENTRY*BUFFER_ENTRIES
  207.    '
  208.    ROWS=0
  209.    FOUND_A_FILE=0
  210.    '
  211.    '
  212.    '*** Loop for (Total Number of Files/BUFFER_ENTRIES) *** 
  213.    '
  214.    For I=1 To NO_OF_BUFFERS
  215.       Sload 1 To Start(15),F_ENTRY*BUFFER_ENTRIES
  216.       '
  217.       '
  218.       '*** For BUFFER_ENTRIES Files, Scan in Each File's Data ***
  219.       '
  220.       For J=0 To BUFFER_ENTRIES-1
  221.          _SCAN_FILE_ENTRY[Start(15)+J*F_ENTRY]
  222.          '
  223.          '
  224.          '*** If we Find a File that the User hasn't Seen, then Show it *** 
  225.          '
  226.          If FILE_DATE<=_TODAYS_DATE and FILE_DATE>=USER_DATE and U_ACCESS>=L_ACCESS(SECTION) and U_ACCESS<=H_ACCESS(SECTION)
  227.             If FOUND_A_FILE=0
  228.                _LOCATE[1,12]
  229.                S$=Space$(80)
  230.                CARRIER=CARRIER or Extension_16_002A(S$)
  231.             End If 
  232.             '
  233.             FOUND_A_FILE=1
  234.             '
  235.             _LOCATE[1,ROWS+1+NO_OF_ROWS-NO_OF_FILES*2]
  236.             CARRIER=CARRIER or Extension_16_002A(Chr$(27)+"[0m"+FILE_NAME$)
  237.             _LOCATE[21,ROWS+1+NO_OF_ROWS-NO_OF_FILES*2]
  238.             CARRIER=CARRIER or Extension_16_002A(Chr$(27)+"[33m"+DESCRIPTION$)
  239.             _LOCATE[21,ROWS+2+NO_OF_ROWS-NO_OF_FILES*2]
  240.             CARRIER=CARRIER or Extension_16_002A(Chr$(27)+"[36mSize ="+Str$(FILE_LENGTH))
  241.             _LOCATE[38,ROWS+2+NO_OF_ROWS-NO_OF_FILES*2]
  242.             CARRIER=CARRIER or Extension_16_002A("Downloads ="+Str$(DLOADS))
  243.             _LOCATE[55,ROWS+2+NO_OF_ROWS-NO_OF_FILES*2]
  244.             CARRIER=CARRIER or Extension_16_002A(Chr$(27)+"[32m"+SECTION$)
  245.             '
  246.             If CARRIER=DROPPED_CARRIER
  247.                Pop Proc
  248.             End If 
  249.             '
  250.             '
  251.             '*** Put New File Name into the Screen Display Name Array ***
  252.             '
  253.             SCR_FILES$(ROWS/2)=Space$(FILE_NAME_LENGTH)
  254.             For K=0 To FILE_NAME_LENGTH-1
  255.                Poke Varptr(SCR_FILES$(ROWS/2))+K,Peek(Varptr(FILE_NAME$)+K)
  256.             Next 
  257.             '
  258.             '
  259.             '*** Put New File's Section into the Screen Display Section Array ***
  260.             '
  261.             SCR_SECTIONS(ROWS/2)=SECTION
  262.             '
  263.             Inc ROWS
  264.             Inc ROWS
  265.             '
  266.             '
  267.             '*** If the Maximum Number of Files have been Displayed ***
  268.             '*** Then Allow User to Proceed with File Marking       ***
  269.             '
  270.             If ROWS=NO_OF_FILES*2
  271.                _MARK_FILES[ROWS]
  272.                '
  273.                If CARRIER=DROPPED_CARRIER
  274.                   Pop Proc
  275.                End If 
  276.                '  
  277.                ROWS=0
  278.                _CLEAR_WINDOW
  279.                '
  280.                If CARRIER=DROPPED_CARRIER
  281.                   Pop Proc
  282.                End If 
  283.                '  
  284.             End If 
  285.          End If 
  286.       Next 
  287.    Next 
  288.    '
  289.    '
  290.    '*** Do it ALL Again, but this Time for the Remaining Files ***
  291.    '
  292.    Sload 1 To Start(15),F_ENTRY*ENTRIES_REMAINING
  293.    '
  294.    '
  295.    '*** For ENTRIES_REMAINING Files, Scan in Each File's Data *** 
  296.    '
  297.    For J=0 To ENTRIES_REMAINING-1
  298.       _SCAN_FILE_ENTRY[Start(15)+J*F_ENTRY]
  299.       '
  300.       '
  301.       '*** If we Find a File that the User hasn't Seen, then Show it *** 
  302.       '
  303.       If FILE_DATE<=_TODAYS_DATE and FILE_DATE>=USER_DATE and U_ACCESS>=L_ACCESS(SECTION) and U_ACCESS<=H_ACCESS(SECTION)
  304.          If FOUND_A_FILE=0
  305.             _LOCATE[1,12]
  306.             S$=Space$(80)
  307.             CARRIER=CARRIER or Extension_16_002A(S$)
  308.          End If 
  309.          '
  310.          FOUND_A_FILE=1
  311.          '
  312.          _LOCATE[1,ROWS+1+NO_OF_ROWS-NO_OF_FILES*2]
  313.          CARRIER=CARRIER or Extension_16_002A(Chr$(27)+"[0m"+FILE_NAME$)
  314.          _LOCATE[21,ROWS+1+NO_OF_ROWS-NO_OF_FILES*2]
  315.          CARRIER=CARRIER or Extension_16_002A(Chr$(27)+"[33m"+DESCRIPTION$)
  316.          _LOCATE[21,ROWS+2+NO_OF_ROWS-NO_OF_FILES*2]
  317.          CARRIER=CARRIER or Extension_16_002A(Chr$(27)+"[36mSize ="+Str$(FILE_LENGTH))
  318.          _LOCATE[38,ROWS+2+NO_OF_ROWS-NO_OF_FILES*2]
  319.          CARRIER=CARRIER or Extension_16_002A("Downloads ="+Str$(DLOADS))
  320.          _LOCATE[55,ROWS+2+NO_OF_ROWS-NO_OF_FILES*2]
  321.          CARRIER=CARRIER or Extension_16_002A(Chr$(27)+"[32m"+SECTION$)
  322.          '
  323.          If CARRIER=DROPPED_CARRIER
  324.             Pop Proc
  325.          End If 
  326.          '
  327.          '
  328.          '*** Put New File Name into the Screen Display Name Array ***
  329.          '
  330.          SCR_FILES$(ROWS/2)=Space$(FILE_NAME_LENGTH)
  331.          For K=0 To FILE_NAME_LENGTH-1
  332.             Poke Varptr(SCR_FILES$(ROWS/2))+K,Peek(Varptr(FILE_NAME$)+K)
  333.          Next 
  334.          '
  335.          '
  336.          '*** Put New File's Section into the Screen Display Section Array ***
  337.          '
  338.          SCR_SECTIONS(ROWS/2)=SECTION
  339.          '
  340.          Inc ROWS
  341.          Inc ROWS
  342.          '
  343.          '
  344.          '*** If the Maximum Number of Files have been Displayed ***
  345.          '*** Then Allow User to Proceed with File Marking       ***
  346.          '
  347.          If ROWS=NO_OF_FILES*2
  348.             _MARK_FILES[ROWS]
  349.             '
  350.             If CARRIER=DROPPED_CARRIER
  351.                Pop Proc
  352.             End If 
  353.             '  
  354.             ROWS=0
  355.             _CLEAR_WINDOW
  356.             '
  357.             If CARRIER=DROPPED_CARRIER
  358.                Pop Proc
  359.             End If 
  360.             '  
  361.          End If 
  362.       End If 
  363.    Next 
  364.    '
  365.    If ROWS>0
  366.       _MARK_FILES[ROWS]
  367.    End If 
  368.    '
  369.    Erase 15
  370.    Close 1
  371.    '
  372.    '
  373.    '*** For ALL Marked Files, Download to User ***
  374.    '
  375.    For I=0 To NO_OF_MARKS-1
  376.       If MARKED_SECTIONS(I)>0
  377.          CARRIER=CARRIER or Extension_16_0152(DLOAD_FUNC,MARKED_SECTIONS(I),MARKED_FILES$(I))
  378.          If CARRIER=DROPPED_CARRIER
  379.             Pop Proc
  380.          End If 
  381.       End If 
  382.    Next 
  383.    '
  384.    '
  385.    '*** No New Files were Found!!! ***
  386.    '
  387.    If FOUND_A_FILE=0
  388.       _LOCATE[21,12]
  389.       C= Extension_16_002A(Chr$(27)+"[37;41mNo NEW Files since you were last on!%Y"+Chr$(27)+"[0m")
  390.    End If 
  391.    '
  392. End Proc
  393. '
  394. Procedure _MARK_FILES[NO_OF_ROWS]
  395.    '
  396.    Shared SCR_MARKS(),SCR_FILES$(),SCR_SECTIONS()
  397.    Shared MARKED_FILES$(),MARKED_SECTIONS()
  398.    Shared NO_OF_FILES,MARKS,NO_OF_MARKS
  399.    Shared DLOAD_FUNC,CARRIER,DROPPED_CARRIER
  400.    '  
  401.    '
  402.    '*** First Time in Here there are No Files Marked ***
  403.    '
  404.    LOCAL_MARKS=0
  405.    For I=0 To NO_OF_FILES-1
  406.       SCR_MARKS(I)=0
  407.    Next 
  408.    '
  409.    BASE=NO_OF_ROWS-NO_OF_FILES*2
  410.    ROW=BASE
  411.    '
  412.    '
  413.    '*** Do ALL this Until Space Bar is Hit ***
  414.    '
  415.    Repeat 
  416.       _LOCATE[1,ROW+1]
  417.       Repeat 
  418.          '
  419.          '
  420.          '*** Get a Key Immeadiately and Filter out any Non-ASCII Info ***
  421.          '
  422.          K= Extension_16_0184 
  423.          K=K and $FF
  424.          K$=Chr$(K)
  425.       Until K<>0
  426.       '
  427.       '
  428.       '*** If User has Quit or Dropped Carrier then Exit *** 
  429.       '
  430.       If(K=DROPPED_CARRIER) or(K$="Q") or(K$="q")
  431.          CARRIER=DROPPED_CARRIER
  432.          '
  433.          For I=0 To NO_OF_FILES-1
  434.             If SCR_MARKS(I)=1
  435.                If MARKS=NO_OF_MARKS
  436.                   Exit 
  437.                End If 
  438.                '
  439.                MARKED_FILES$(MARKS)=SCR_FILES$(I)
  440.                MARKED_SECTIONS(MARKS)=SCR_SECTIONS(I)
  441.                Inc MARKS
  442.             End If 
  443.          Next 
  444.          '
  445.          '
  446.          '*** If User is Still Around then Download any Marked Files ***  
  447.          '
  448.          For I=0 To NO_OF_MARKS-1
  449.             If MARKED_SECTIONS(I)>0
  450.                C= Extension_16_0152(DLOAD_FUNC,MARKED_SECTIONS(I),MARKED_FILES$(I))
  451.             End If 
  452.          Next 
  453.          '
  454.          Pop Proc
  455.       End If 
  456.       '
  457.       '
  458.       '*** Down Arrow Key ***
  459.       '
  460.       If K$="2"
  461.          Inc ROW
  462.          Inc ROW
  463.          If ROW=NO_OF_ROWS+BASE
  464.             ROW=BASE
  465.          End If 
  466.       End If 
  467.       '
  468.       '
  469.       '*** Up Arrow Key ***  
  470.       '
  471.       If K$="8"
  472.          Dec ROW
  473.          Dec ROW
  474.          If ROW=BASE-2
  475.             ROW=NO_OF_ROWS+BASE-2
  476.          End If 
  477.       End If 
  478.       '
  479.       '
  480.       '*** Mark File *** 
  481.       '
  482.       If K=13
  483.          _LOCATE[1,ROW+1]
  484.          '
  485.          MARK_INDEX=(ROW-BASE)/2
  486.          '
  487.          SCR_MARKS(MARK_INDEX)=SCR_MARKS(MARK_INDEX) xor 1
  488.          If SCR_MARKS(MARK_INDEX)=1
  489.             C= Extension_16_002A(Chr$(27)+"[37;45m"+SCR_FILES$(MARK_INDEX))
  490.             C= Extension_16_002A(Chr$(27)+"[0m")
  491.             Inc LOCAL_MARKS
  492.             '
  493.             If MARKS+LOCAL_MARKS=NO_OF_MARKS
  494.                SCR_MARKS(MARK_INDEX)=SCR_MARKS(MARK_INDEX) xor 1
  495.                _LOCATE[1,ROW+1]
  496.                C= Extension_16_002A(Chr$(27)+"[37;40m"+SCR_FILES$(MARK_INDEX))
  497.                Dec LOCAL_MARKS
  498.                Bell 
  499.                _LOCATE[21,8]
  500.                C= Extension_16_002A(Chr$(27)+"[37;41mMaximum Files Marked, you LEECH :-)%Y"+Chr$(27)+"[0m")
  501.                S$=Space$(80)
  502.                _LOCATE[1,8]
  503.                C= Extension_16_002A(S$)
  504.             End If 
  505.             '
  506.          Else 
  507.             If SCR_MARKS(MARK_INDEX)=0
  508.                _LOCATE[1,ROW+1]
  509.                C= Extension_16_002A(Chr$(27)+"[37;40m"+SCR_FILES$(MARK_INDEX))
  510.                Dec LOCAL_MARKS
  511.             End If 
  512.          End If 
  513.          '
  514.       End If 
  515.    Until K=32
  516.    '
  517.    '
  518.    '*** Set Marked Arrays with Stuff Selected by the User in the Screen Arrays ***
  519.    '
  520.    For I=0 To NO_OF_FILES-1
  521.       If SCR_MARKS(I)=1
  522.          If MARKS=NO_OF_MARKS
  523.             Exit 
  524.          End If 
  525.          '
  526.          MARKED_FILES$(MARKS)=SCR_FILES$(I)
  527.          MARKED_SECTIONS(MARKS)=SCR_SECTIONS(I)
  528.          Inc MARKS
  529.       End If 
  530.    Next 
  531.    '
  532. End Proc
  533. '
  534. Procedure _SCAN_FILE_ENTRY[BUFFER]
  535.    '
  536.    Shared SECTIONS$(),FILE_NAME_LENGTH,DESCRIPTION_LENGTH
  537.    Shared FILE_DATE,FILE_LENGTH,DLOADS,SECTION
  538.    Shared SECTION$,FILE_NAME$,DESCRIPTION$
  539.    '
  540.    '
  541.    '*** Gets ALL the Relevant Info for a File Entry *** 
  542.    '
  543.    FILE_DATE=Leek(BUFFER)
  544.    FILE_LENGTH=Leek(BUFFER+8)
  545.    DLOADS=Leek(BUFFER+12)
  546.    '
  547.    SECTION=Peek(BUFFER+17)
  548.    SECTION$=SECTIONS$(SECTION)
  549.    '
  550.    For I=0 To FILE_NAME_LENGTH-1
  551.       Poke Varptr(FILE_NAME$)+I,Peek(BUFFER+18+I)
  552.    Next 
  553.    '
  554.    For I=0 To DESCRIPTION_LENGTH-1
  555.       Poke Varptr(DESCRIPTION$)+I,Peek(BUFFER+59+I)
  556.    Next 
  557.    '
  558. End Proc[FOUND]
  559. '
  560. Procedure _GET_SECTION_NAMES
  561.    '
  562.    Shared BBS_CONFIG$,SECTIONS$(),L_ACCESS(),H_ACCESS()
  563.    Shared S_HEADER,S_ENTRIES,S_ENTRY
  564.    Shared NO_OF_SECTIONS,SECTION_NAME_LENGTH
  565.    '
  566.    '
  567.    '*** Reads in ALL the Section Names from MAXsBBS.config ***
  568.    '
  569.    Open In 1,BBS_CONFIG$
  570.    FLENGTH=Lof(1)
  571.    Pof(1)=S_HEADER
  572.    Reserve As Work 15,S_ENTRIES
  573.    Sload 1 To Start(15),S_ENTRIES
  574.    Close 1
  575.    '
  576.    For I=0 To NO_OF_SECTIONS-1
  577.       SECTIONS$(I)=Space$(SECTION_NAME_LENGTH)
  578.    Next 
  579.    '
  580.    For I=0 To NO_OF_SECTIONS-1
  581.       For J=0 To SECTION_NAME_LENGTH-1
  582.          Poke Varptr(SECTIONS$(I))+J,Peek(Start(15)+S_ENTRY*I+J)
  583.       Next 
  584.       '
  585.       L_ACCESS(I)=Leek(Start(15)+S_ENTRY*I+42)
  586.       H_ACCESS(I)=Leek(Start(15)+S_ENTRY*I+46)
  587.    Next 
  588.    '
  589.    Erase(15)
  590.    '
  591. End Proc
  592. '
  593. Procedure _GET_USER_DATE
  594.    '
  595.    Shared USER_DATA$,U_HEADER,U_ENTRY,U_DATE,USER_NAME$
  596.    Shared USER_NAME_LENGTH
  597.    '
  598.    '
  599.    Open In 1,USER_DATA$
  600.    FLENGTH=Lof(1)
  601.    Reserve As Work 15,FLENGTH
  602.    Sload 1 To Start(15),FLENGTH
  603.    Close 1
  604.    '
  605.    NO_OF_USERS=(FLENGTH-U_HEADER)/U_ENTRY
  606.    '
  607.    NAME$=Space$(USER_NAME_LENGTH)
  608.    '
  609.    '
  610.    '*** Search for the Current User's Name ***
  611.    '
  612.    For I=0 To NO_OF_USERS-1
  613.       For J=0 To USER_NAME_LENGTH-1
  614.          Poke Varptr(NAME$)+J,Peek(Start(15)+U_HEADER+U_ENTRY*I+J)
  615.       Next 
  616.       '    
  617.       K=0
  618.       FOUND_NAME=0
  619.       '
  620.       Repeat 
  621.          CH1=Peek(Varptr(USER_NAME$)+K)
  622.          CH2=Peek(Varptr(NAME$)+K)
  623.          If CH1<>CH2
  624.             Exit 
  625.          Else 
  626.             If CH1=0
  627.                FOUND_NAME=1
  628.                Exit 2
  629.             End If 
  630.          End If 
  631.          '  
  632.          Inc K
  633.       Until CH1=0
  634.       '
  635.    Next 
  636.    '
  637.    '
  638.    '*** If Current User is Found, then Get their Last Login Date ***
  639.    '
  640.    If FOUND_NAME=1
  641.       DATE=Leek(Start(15)+U_HEADER+U_ENTRY*I+U_DATE)
  642.    Else 
  643.       DATE=0
  644.    End If 
  645.    '
  646.    Erase 15
  647.    '
  648. End Proc[DATE]
  649. '
  650. Procedure _GET_DATE
  651.    '
  652.    DATE$=Space$(12)
  653.    Dreg(1)=Varptr(DATE$)
  654.    TEMP=Doscall(-192)
  655.    DATE=Leek(Varptr(DATE$))
  656.    '
  657. End Proc[DATE]
  658. '
  659. Procedure _CLEAR_WINDOW
  660.    '
  661.    Shared NO_OF_FILES,NO_OF_ROWS
  662.    Shared CARRIER,DROPPED_CARRIER
  663.    '
  664.    '
  665.    For I=NO_OF_ROWS-NO_OF_FILES*2+1 To NO_OF_ROWS
  666.       _LOCATE[1,I]
  667.       C$=Space$(80)
  668.       CARRIER=CARRIER or Extension_16_002A(C$)
  669.       If CARRIER=DROPPED_CARRIER
  670.          Exit 
  671.       End If 
  672.    Next 
  673.    '
  674. End Proc
  675. '
  676. Procedure _LOCATE[X,Y]
  677.    '
  678.    Shared CARRIER
  679.    '
  680.    '
  681.    A$=Chr$(27)+"["+Mid$(Str$(Y),2)+";"+Mid$(Str$(X),2)+"H"
  682.    CARRIER=CARRIER or Extension_16_002A(A$)
  683.    '
  684. End Proc