home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PCBOARD / DWNLD20A.ZIP / DWNLD.PPS < prev    next >
Text File  |  1994-03-03  |  16KB  |  390 lines

  1. ;┌───────────────────────────────────────────────────────────────────────────┐
  2. ;│                              DWNLD.PPE v2.0                               │
  3. ;│                       PCBOARD 15.1 Download Counter                       │ 
  4. ;│                                                                           │ 
  5. ;│                        Written by Steven Hauswirth                        │ 
  6. ;│                  Written in PCBoard Programming Language                  │
  7. ;│                                                                           │
  8. ;│                          "The Power Palace BBS"                           │
  9. ;│                 Node 1 - 312-594-0643 - [28.8] - 80386/40                 │
  10. ;│                                                                           │
  11. ;│   This PPE is a full screen download counter that informs the user how    │
  12. ;│   many files, bytes, et cetera they have flagged for download.            │
  13. ;└───────────────────────────────────────────────────────────────────────────┘
  14. IF (!ANSION()) THEN
  15.         PRINT "Enter the filename to Download (Enter)=none"
  16.         GOTO EXIT
  17. ENDIF
  18.  
  19. ;┌───────────────────────────────────────────────────────────────────────────┐
  20. ;│ Declare Variable Types                                                    │
  21. ;└───────────────────────────────────────────────────────────────────────────┘
  22. STRING TEMP, Y, FILE_NAME, FLAG_FILE, NO_TIME, FREE_FILE, TEMP_FILE
  23. STRING FLIST_TIME, TEMP_TIME, CONFIG_FILE, HEADER, FOOTER, SPACES
  24. STRING BORDER_COLOR, TITLE_COLOR, BAR_COLOR, CENTER_SPACES
  25. STRING SHOW_NUM, SHOW_SIZE, SHOW_DATE, SHOW_TIME, SHOW_FREE, SHOW_NOTIME
  26. INTEGER COUNT, LOOP, BAT_MIN, BAT_SEC, BAT_TIME, FILE_SEC, FILE_MIN
  27. INTEGER TEMP1, TEMP2, TEMP3, FILE_SIZE, FILE_NUM, AMOUNT_SPACES, SHOW_AMOUNT
  28. INTEGER CONSTANT1, CONSTANT2, FLIST_TOTAL_DATE, FLIST_TOTAL_TIME
  29. INTEGER TEMP_TOTAL_DATE, TEMP_TOTAL_TIME, SKIP_FLAG, EXTRA
  30. DATE FILE_DATE, FLIST_DATE, TEMP_DATE
  31.  
  32. ;┌───────────────────────────────────────────────────────────────────────────┐
  33. ;│ Initialize the variables and get the temp and flagged file names          │
  34. ;└───────────────────────────────────────────────────────────────────────────┘
  35. IF (PCBNODE() = 0) THEN
  36.     LET FLAG_FILE = GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST."
  37. ELSE
  38.     LET FLAG_FILE = GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST."+STRING(PCBNODE())
  39. ENDIF
  40. LET TEMP_FILE = GETENV("PCBDRIVE")+GETENV("PCBDIR")+"\FLIST.TMP"
  41. LET CONFIG_FILE = PPEPATH()+PPENAME()+".CFG"
  42. LET SPACES = "                                         "
  43. LET FILE_NUM = 0
  44. BAT_TIME = 0
  45. TEMP1 = 0
  46. TEMP2 = 0
  47. TEMP3 = 0
  48. EXTRA = 0
  49. LET Y = 1
  50. LET CONSTANT1 = 10000
  51. LET CONSTANT2 = 100
  52. LET AMOUNT_SPACES = 16
  53. LET SHOW_AMOUNT = 2
  54. LET LOOP = 1
  55.  
  56. ;┌───────────────────────────────────────────────────────────────────────────┐
  57. ;│ Calculate the time and date of the flagged file list                      │
  58. ;└───────────────────────────────────────────────────────────────────────────┘
  59. :BACK_TO_TOP
  60. FLIST_DATE = FILEINF(FLAG_FILE,2)
  61. LET FLIST_TOTAL_DATE = LEFT(FLIST_DATE,2)*CONSTANT2 + MID(FLIST_DATE,4,2)
  62. FLIST_TIME = FILEINF(FLAG_FILE,3)
  63. LET FLIST_TOTAL_TIME = LEFT(FLIST_TIME,2)*CONSTANT1 + MID(FLIST_TIME,4,2)*CONSTANT2 + RIGHT(FLIST_TIME,2)
  64.  
  65. ;┌───────────────────────────────────────────────────────────────────────────┐
  66. ;│ Check to see if they have NOT flagged any files yet for download, or if   │
  67. ;│ the user has decided not to download the flagged files.                   │
  68. ;└───────────────────────────────────────────────────────────────────────────┘
  69. FOPEN 1,FLAG_FILE,O_RD,S_DN
  70. FDEFIN 1
  71. FSEEK 1,0,SEEK_SET(0)
  72. FOR LOOP = 1 TO 100000
  73.    FSEEK 1,66,SEEK_CUR(1)
  74.    FDREAD FILE_NAME,13
  75.    IF (FERR(1)) BREAK
  76.    FSEEK 1,50,SEEK_CUR(1)
  77. NEXT
  78.  
  79. ;┌───────────────────────────────────────────────────────────────────────────┐
  80. ;│ If the temp file exists then calculate the time and date of it. Then      │
  81. ;│ compare it to the flagged file list to see if which is older              │
  82. ;└───────────────────────────────────────────────────────────────────────────┘
  83. IF (EXIST(TEMP_FILE)) THEN
  84.     TEMP_DATE = FILEINF(TEMP_FILE,2)
  85.     LET TEMP_TOTAL_DATE = LEFT(TEMP_DATE,2)*CONSTANT2 + MID(TEMP_DATE,4,2)
  86.     IF (TEMP_TOTAL_DATE < FLIST_TOTAL_DATE) GOTO SKIP
  87.     TEMP_TIME = FILEINF(TEMP_FILE,3)
  88.     LET TEMP_TOTAL_TIME = LEFT(TEMP_TIME,2)*CONSTANT1 + MID(TEMP_TIME,4,2)*CONSTANT2 + RIGHT(TEMP_TIME,2)
  89.     IF (TEMP_TOTAL_TIME < FLIST_TOTAL_TIME) GOTO SKIP
  90.     FOPEN 2, TEMP_FILE, O_RD, S_DN
  91.     FGET 2,TEMP1
  92.     FCLOSE 2
  93. ELSE GOTO SKIP
  94. ENDIF
  95. IF (TEMP1 > LOOP) THEN
  96.    DELETE TEMP_FILE
  97.    FOPEN 2, TEMP_FILE, O_WR, S_DN
  98.    FPUT 1, LOOP
  99.    FCLOSE 2
  100.    GOTO SKIP
  101. ENDIF
  102. IF (TEMP1 = LOOP) WAIT
  103. :SKIP
  104.  
  105. ;┌───────────────────────────────────────────────────────────────────────────┐
  106. ;│ Create a temp file that will hold the number of files that are flagged    │
  107. ;│ for download.                                                             │
  108. ;└───────────────────────────────────────────────────────────────────────────┘
  109. FOPEN 2, TEMP_FILE, O_WR, S_DN
  110. FPUT 2, LOOP
  111. FCLOSE 2
  112. COUNT = LOOP
  113. TEMP1 = 0
  114. TEMP = SCRTEXT(7,17,6,FALSE)
  115.  
  116. ;┌───────────────────────────────────────────────────────────────────────────┐
  117. ;│ Read Config File to see if file numbers are to be displayed               │
  118. ;└───────────────────────────────────────────────────────────────────────────┘
  119. TEMP = TRIM(TEMP," ")
  120. FOPEN 2, CONFIG_FILE, O_RD, S_DN
  121. FGET 2, SHOW_NUM
  122. LET SHOW_NUM = UPPER(SHOW_NUM)
  123. IF (SHOW_NUM = "Y") THEN
  124.    SHOW_AMOUNT = SHOW_AMOUNT + 1
  125. ELSE 
  126.    AMOUNT_SPACES = AMOUNT_SPACES + 4
  127. ENDIF
  128.  
  129. ;┌───────────────────────────────────────────────────────────────────────────┐
  130. ;│ Read Config file to see if File Size is to be displayed                   │
  131. ;└───────────────────────────────────────────────────────────────────────────┘
  132. FGET 2, SHOW_SIZE
  133. LET SHOW_SIZE = UPPER(SHOW_SIZE)
  134. IF (SHOW_SIZE = "Y" ) THEN
  135.    SHOW_AMOUNT = SHOW_AMOUNT + 1
  136. ELSE 
  137.    AMOUNT_SPACES = AMOUNT_SPACES + 10
  138. ENDIF
  139.  
  140. ;┌───────────────────────────────────────────────────────────────────────────┐
  141. ;│ Read Config File to see if File Date is to be Displayed                   │
  142. ;└───────────────────────────────────────────────────────────────────────────┘
  143. FGET 2, SHOW_DATE
  144. LET SHOW_DATE = UPPER(SHOW_DATE)
  145. IF (SHOW_DATE = "Y" ) THEN
  146.    SHOW_AMOUNT = SHOW_AMOUNT + 1
  147. ELSE 
  148.    AMOUNT_SPACES = AMOUNT_SPACES + 8
  149. ENDIF
  150.  
  151. ;┌───────────────────────────────────────────────────────────────────────────┐
  152. ;│ Read Config File to see if File Transfer Time is to be Displayed          │
  153. ;└───────────────────────────────────────────────────────────────────────────┘
  154. FGET 2, SHOW_TIME
  155. LET SHOW_TIME = UPPER(SHOW_TIME)
  156. IF (SHOW_TIME = "Y" ) THEN
  157.    SHOW_AMOUNT = SHOW_AMOUNT + 1
  158. ELSE 
  159.    AMOUNT_SPACES = AMOUNT_SPACES + 15
  160. ENDIF
  161.  
  162. ;┌───────────────────────────────────────────────────────────────────────────┐
  163. ;│ Read Config File to see if Free File Check is to be Displayed             │
  164. ;└───────────────────────────────────────────────────────────────────────────┘
  165. FGET 2, SHOW_FREE
  166. LET SHOW_FREE = UPPER(SHOW_FREE)
  167. IF (SHOW_FREE = "Y" ) THEN
  168.    SHOW_AMOUNT = SHOW_AMOUNT + 1
  169. ELSE 
  170.    AMOUNT_SPACES = AMOUNT_SPACES + 4
  171. ENDIF
  172.  
  173. ;┌───────────────────────────────────────────────────────────────────────────┐
  174. ;│ Read Config File to see if No Time check is to be Displayed               │
  175. ;└───────────────────────────────────────────────────────────────────────────┘
  176. FGET 2, SHOW_NOTIME
  177. LET SHOW_NOTIME = UPPER(SHOW_NOTIME)
  178. IF (SHOW_NOTIME = "Y" ) THEN
  179.    SHOW_AMOUNT = SHOW_AMOUNT + 1
  180. ELSE 
  181.    AMOUNT_SPACES = AMOUNT_SPACES + 7
  182. ENDIF
  183. LET AMOUNT_SPACES = AMOUNT_SPACES / SHOW_AMOUNT
  184. LET CENTER_SPACES = LEFT(SPACES,AMOUNT_SPACES)
  185.  
  186. ;┌───────────────────────────────────────────────────────────────────────────┐
  187. ;│ Check to see if the PPE is already "running", if so then skip header disp │
  188. ;└───────────────────────────────────────────────────────────────────────────┘
  189. FGET 2, BORDER_COLOR
  190. IF (TEMP = "Files:") THEN
  191.      SKIP_FLAG = 1
  192.      ANSIPOS 1,5
  193.      GOTO SKIP_HEADER
  194. ENDIF
  195. FGET 2, TITLE_COLOR
  196. FGET 2, BAR_COLOR
  197. FGET 2, HEADER
  198. FGET 2, FOOTER
  199.  
  200. ;┌───────────────────────────────────────────────────────────────────────────┐
  201. ;│ Display the header                                                        │
  202. ;└───────────────────────────────────────────────────────────────────────────┘
  203. IF (GRAFMODE()="R") THEN
  204.     PRINTLN " "
  205.     PRINTLN "!|1K|*"
  206. ENDIF
  207. PRINTLN "@CLS@"+BORDER_COLOR+"  ┌──────────────────────────────────────────────────────────────────────────┐"
  208. LET TEMP = STRIPATX(HEADER)
  209. PRINTLN "  │"+LEFT(SPACES,37-(LEN(TEMP)/2))+HEADER+RIGHT(SPACES,37-(LEN(TEMP)/2))+BORDER_COLOR+"│"
  210. PRINT "  │"+TITLE_COLOR
  211.  
  212. ;┌───────────────────────────────────────────────────────────────────────────┐
  213. ;│ Display the sysop configurable file info                                  │
  214. ;└───────────────────────────────────────────────────────────────────────────┘
  215. IF (SHOW_NUM = "Y" ) PRINT CENTER_SPACES+"@X0FNum"
  216. PRINT CENTER_SPACES+"  @X0FFilename  "+CENTER_SPACES
  217. IF (SHOW_SIZE = "Y") PRINT "   Size   "+CENTER_SPACES
  218. IF (SHOW_DATE = "Y") PRINT "  Date  "+CENTER_SPACES
  219. IF (SHOW_TIME = "Y") PRINT " Transfer Time "+CENTER_SPACES
  220. IF (SHOW_FREE = "Y") PRINT "Free"+CENTER_SPACES
  221. IF (SHOW_NOTIME = "Y") PRINT "No Time"
  222. ANSIPOS 78,3
  223. PRINTLN BORDER_COLOR+"│"
  224.  
  225. ;┌───────────────────────────────────────────────────────────────────────────┐
  226. ;│ Display the bullet bar                                                    │
  227. ;└───────────────────────────────────────────────────────────────────────────┘
  228. PRINT "  │"+BAR_COLOR
  229. IF (SHOW_NUM = "Y" ) PRINT LEFT(SPACES,AMOUNT_SPACES-1)+"────"
  230. PRINT CENTER_SPACES+"────────────"+CENTER_SPACES
  231. IF (SHOW_SIZE = "Y") PRINT "──────────"+CENTER_SPACES
  232. IF (SHOW_DATE = "Y") PRINT "────────"+CENTER_SPACES
  233. IF (SHOW_TIME = "Y") PRINT "───────────────"+CENTER_SPACES
  234. IF (SHOW_FREE = "Y") PRINT "────"+CENTER_SPACES
  235. IF (SHOW_NOTIME = "Y") PRINT "───────"
  236. ANSIPOS 78,4
  237. PRINTLN BORDER_COLOR+"│"
  238.  
  239. ;┌───────────────────────────────────────────────────────────────────────────┐
  240. ;│ Since there are files already flagged for download. Find out how many.    │
  241. ;│ If there are more then 10 then position display to only display the last  │
  242. ;│ ten of them.                                                              │
  243. ;└───────────────────────────────────────────────────────────────────────────┘
  244. :SKIP_HEADER
  245. FCLOSE 2
  246. FSEEK 1,0,SEEK_SET(0)
  247. IF (COUNT>10) THEN
  248.    FOR LOOP = 1 TO (COUNT-10)
  249.       FSEEK 1,83,SEEK_CUR(1)
  250.       FDREAD TEMP,1
  251.       IF (ASC(TEMP)!=0) TEMP1 = ASC(TEMP)
  252.       FDREAD TEMP,1
  253.       IF (ASC(TEMP)!=0) TEMP2 = 256*ASC(TEMP)
  254.       FDREAD TEMP,1
  255.       IF (ASC(TEMP)!=0) TEMP3 =65536*ASC(TEMP)
  256.       BAT_TIME = BAT_TIME + TEMP1 + TEMP2 + TEMP3
  257.       FSEEK 1,43,SEEK_CUR(1)
  258.    NEXT
  259. ELSE COUNT = 10
  260. ENDIF
  261. LET Y = COUNT-9
  262.  
  263. ;┌───────────────────────────────────────────────────────────────────────────┐
  264. ;│ Display the file name, bytes, and transfer time for all the files flagged │
  265. ;└───────────────────────────────────────────────────────────────────────────┘
  266. FOR LOOP= 1 TO COUNT
  267.    TEMP1 = 0
  268.    TEMP2 = 0
  269.    TEMP3 = 0
  270.    FDREAD TEMP,66
  271.    IF (FERR(1)) BREAK
  272.    TEMP = TRIM(TEMP," ")
  273.    FILE_DATE = FILEINF(TEMP,2)
  274.    FDREAD FILE_NAME,13
  275.    FDREAD TEMP,1
  276.    IF (ASC(TEMP)!=0) TEMP1 = ASC(TEMP)
  277.    FDREAD TEMP,1
  278.    IF (ASC(TEMP)!=0) TEMP2 = 256*ASC(TEMP)
  279.    FDREAD TEMP,1
  280.    IF (ASC(TEMP)!=0) TEMP3 =65536*ASC(TEMP)
  281.    FILE_SIZE = TEMP1+TEMP2+TEMP3
  282.    TEMP1 = 0
  283.    TEMP2 = 0
  284.    TEMP3 = 0
  285.    FSEEK 1,1,SEEK_CUR(1)
  286.    FDREAD TEMP,1
  287.    IF (ASC(TEMP)!=0) TEMP1 = ASC(TEMP)
  288.    FDREAD TEMP,1
  289.    IF (ASC(TEMP)!=0) TEMP2 = 256*ASC(TEMP)
  290.    FDREAD TEMP,1
  291.    IF (ASC(TEMP)!=0) TEMP3 =65536*ASC(TEMP)
  292.    FILE_SEC = TEMP1 + TEMP2 + TEMP3
  293.    BAT_TIME = BAT_TIME + FILE_SEC
  294.    FSEEK 1,9,SEEK_CUR(1)
  295.    FDREAD FREE_FILE,1
  296.    FDREAD NO_TIME,1
  297.    FSEEK 1,32,SEEK_CUR(1)
  298.    FILE_MIN = FILE_SEC/60
  299.    FILE_SEC = FILE_SEC - FILE_MIN*60
  300.    PRINT BORDER_COLOR+"  │@X0B"
  301.    IF (SHOW_NUM = "Y" ) PRINT CENTER_SPACES+LEFT(SPACES,2-LEN(STRING(Y)))+STRING(Y)+" "
  302.    PRINT CENTER_SPACES+"@X0F"+LEFT(SPACES,12-LEN(FILE_NAME))+FILE_NAME+CENTER_SPACES
  303.    IF (SHOW_SIZE = "Y") PRINT LEFT(SPACES,10-LEN(STRING(FILE_SIZE)))+STRING(FILE_SIZE)+CENTER_SPACES
  304.    IF (SHOW_DATE = "Y") PRINT STRING(FILE_DATE)+CENTER_SPACES
  305.    IF (SHOW_TIME = "Y") PRINT LEFT(SPACES,4-LEN(STRING(FILE_MIN)))+STRING(FILE_MIN)+" @X07min@X0F"+LEFT("    ",3-LEN(STRING(FILE_SEC)))+STRING(FILE_SEC)+" @X07sec"+CENTER_SPACES
  306.    IF (SHOW_FREE = "Y") THEN
  307.       IF (ASC(FREE_FILE)=1) THEN
  308.          PRINT "  @X0CY"
  309.       ELSE PRINT "  @X0EN"
  310.       ENDIF
  311.       PRINT CENTER_SPACES
  312.    ENDIF
  313.    IF (SHOW_NOTIME = "Y") THEN
  314.       IF (ASC(NO_TIME)=1) THEN
  315.           PRINT "    @X0CY"
  316.       ELSE PRINT "    @X0EN"
  317.       ENDIF
  318.    ENDIF
  319.    ANSIPOS 78,4+LOOP
  320.    PRINTLN BORDER_COLOR+"│"
  321.    ANSIPOS 1,5+LOOP
  322.    INC Y
  323. NEXT
  324.  
  325. ;┌────────────────────────────────────────────────────────────────────────────┐
  326. ;│ Display with blank lines to fill the screen to ten file placements listed  │
  327. ;└────────────────────────────────────────────────────────────────────────────┘
  328.     FOR LOOP = LOOP TO 10
  329.     PRINT BORDER_COLOR+"  │@X0B"
  330.     IF (SHOW_NUM = "Y" ) PRINT CENTER_SPACES+LEFT(SPACES,2-LEN(STRING(Y)))+STRING(Y)+" "
  331.     PRINT CENTER_SPACES+"            @X0F"
  332.     IF (SHOW_SIZE = "Y") PRINT CENTER_SPACES+"         0"
  333.     IF (SHOW_DATE = "Y") PRINT CENTER_SPACES+"00-00-00"
  334.     IF (SHOW_TIME = "Y") PRINT CENTER_SPACES+"   0 @X07min@X0F  0 @X07sec"
  335.     ANSIPOS 78,4+LOOP
  336.     PRINTLN BORDER_COLOR+"│"
  337.     INC Y
  338.     IF (SKIP_FLAG = 1) THEN
  339.          ANSIPOS 1,17
  340.          GOTO SKIP_FOOTER
  341.     ENDIF
  342.     NEXT
  343.  
  344. ;┌───────────────────────────────────────────────────────────────────────────┐
  345. ;│ Display the footer of the dispay                                          │
  346. ;└───────────────────────────────────────────────────────────────────────────┘
  347. PRINTLN "  │                                                                          │"
  348. LET TEMP = STRIPATX(FOOTER)
  349. PRINTLN "  │"+LEFT(SPACES,37-(LEN(TEMP)/2))+FOOTER+RIGHT(SPACES,37-(LEN(TEMP)/2))+"│"
  350. :SKIP_FOOTER
  351. PRINT "  │   @X07Files: @X0F@FFILES:3@  @X07Size (bytes): @X0F@FBYTES:12@  @X07Estimated time: @X0F"
  352.  
  353. ;┌───────────────────────────────────────────────────────────────────────────┐
  354. ;│ Calculate the BATCH transfer time from the BATCH bytes listed on screen   │
  355. ;│ taking into account local logons and error correcting modems.             │
  356. ;└───────────────────────────────────────────────────────────────────────────┘
  357. LET FILE_NUM = S2I(TRIM(SCRTEXT(14,17,2,FALSE)," "),10)
  358. BAT_MIN = BAT_TIME/60
  359. BAT_SEC = BAT_TIME - BAT_MIN*60
  360. PRINT STRING(BAT_MIN)+" @X07min"+" @X0F"+STRING(BAT_SEC)+" @X07sec"+BORDER_COLOR
  361. ANSIPOS 78,17
  362. PRINTLN "│"
  363. IF (SKIP_FLAG = 1) THEN
  364.     ANSIPOS 1,19
  365.     GOTO SKIP_BOTTOM
  366. ENDIF
  367. PRINTLN "  └──────────────────────────────────────────────────────────────────────────┘"
  368. :SKIP_BOTTOM
  369. PRINTLN "                 @X0FEnter the filename to Download (Enter)=none               @X082.0"
  370. CLREOL
  371. PRINTLN
  372. PRINTLN
  373. CLREOL
  374. ;┌───────────────────────────────────────────────────────────────────────────┐
  375. ;│ Position cursor on the screen and ask for file name. Then stuff it into   │
  376. ;│ keyboard buffer and exit                                                  │
  377. ;└───────────────────────────────────────────────────────────────────────────┘
  378. IF (FILE_NUM > 9) FILE_NUM = 9
  379. IF (SHOW_NUM = "Y") EXTRA = 3 + AMOUNT_SPACES 
  380. ANSIPOS 4+AMOUNT_SPACES+EXTRA,5+FILE_NUM
  381. PRINT "             "
  382. ANSIPOS 4+AMOUNT_SPACES+EXTRA,5+FILE_NUM
  383. LET FILE_NAME = ""
  384. INPUTSTR "_",file_name,@X07,12,MASK_FILE()+"*?",UPCASE
  385. ANSIPOS 1,19
  386. FILE_NAME=TRIM(FILE_NAME," ")
  387. IF (LEN(file_name) = 0) file_name = CHR(13)
  388. KBDSTUFF file_name
  389. :EXIT
  390. END