home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / MISC / VUPLD11.ZIP / VUPLOAD.BAS < prev    next >
BASIC Source File  |  2004-12-14  |  11KB  |  419 lines

  1. ' ──────────────────────────────────────────────────────────────────────────
  2. ' Aspect Technologies 2k                                         12/14/2004
  3. ' VUpload v1.1.0                                                File 1 of 1
  4. ' áetaX Tested [û]
  5. '
  6. ' Refer to the program documentation for installation procedures.
  7. ' Filename: VUPLOAD.DOC
  8. '
  9. ' VUpload v1.1          Copyright (c) 2004
  10. ' All Rights Reserved
  11. '
  12. ' ── Notice ────────────────────────────────────────────────────────────────
  13. '
  14. ' This script is property of Aspect Technologies and may not be changed in a
  15. '    manner that eliminates its possession.  You may modify the script to
  16. '    customize it for the sysop's needs as long as references to Aspect and
  17. '    its affiliates are not changed or destroyed.  This script may be freely
  18. '    distributed WITHOUT charge.
  19. '
  20. ' Aspect Technologies expresses no warranties of any kind.  In no case will
  21. '    Aspect Technologies be held liable for direct, indirect or incidental
  22. '    damages resulting from any defect in this software.  Use at your own
  23. '    risk.
  24. '
  25. ' ── History ───────────────────────────────────────────────────────────────
  26. '
  27. ' Version 1.0   - First public release.
  28. '  12/04/2004   - A VADV utility to upload local files into a database.
  29. '
  30. ' Version 1.1   - Fixed major database issue.
  31. '  12/14/2004
  32. '
  33. ' ──────────────────────────────────────────────────────────────────────────
  34.  
  35. DECLARE SUB ErrorCmdLine ()
  36. DECLARE FUNCTION TRIM$ (text$)
  37. DECLARE FUNCTION CalcDayNumber& (m AS LONG, d AS LONG, y AS LONG)
  38. DECLARE FUNCTION CalcAge& (m AS LONG, d AS LONG, y AS LONG)
  39. DECLARE FUNCTION UnixTime& (tz AS LONG)
  40. DECLARE FUNCTION LongDate$ (tz AS STRING)
  41.  
  42. DEFINT A-Z
  43.  
  44. '$INCLUDE: 'vadvcfg.bas'
  45.  
  46. cr$ = CHR$(13): lf$ = CHR$(10): es$ = CHR$(27)
  47. version$ = "1.1"
  48.  
  49. DIM cfgMain AS cfgMain
  50. DIM cfgSysPaths AS cfgSysPaths
  51. DIM datDB AS datDB
  52. DIM datStats AS datStats
  53. DIM sysop AS datUserfile
  54. DIM dbInfo AS cfgDatabase
  55. DIM newDB AS datDB
  56. DIM datDBSeq AS datDBSeq
  57.  
  58. ' Print program information.
  59. CLS
  60. PRINT
  61. PRINT "VUpload v" + version$
  62. PRINT "(c) Aspect Technologies"
  63. PRINT "-----------------------"
  64. PRINT
  65.  
  66. ' Examine the command line.
  67. ' VUPLOAD.EXE [/M|/C] FILENAME.EXT DATABASE <DESCRIPTION>
  68. cmdline$ = TRIM$(COMMAND$)
  69. fileopt$ = "C"
  70. opt$ = UCASE$(LEFT$(cmdline$, 2))
  71. p = INSTR(opt$, "/M")
  72. IF (p > 0) THEN
  73.     fileopt$ = "M"
  74.     l$ = TRIM$(LEFT$(cmdline$, p - 1))
  75.     r$ = TRIM$(MID$(cmdline$, p + 3))
  76.     cmdline$ = l$ + r$
  77. END IF
  78. p = INSTR(opt$, "/C")
  79. IF (p > 0) THEN
  80.     fileopt$ = "C"
  81.     l$ = TRIM$(LEFT$(cmdline$, p - 1))
  82.     r$ = TRIM$(MID$(cmdline$, p + 3))
  83.     cmdline$ = l$ + r$
  84. END IF
  85. p = INSTR(cmdline$, " ")
  86. IF (p = 0) THEN ErrorCmdLine
  87. filename$ = TRIM$(LEFT$(cmdline$, p - 1))
  88. cmdline$ = TRIM$(MID$(cmdline$, p + 1))
  89. IF (LEN(cmdline$) = 0) THEN ErrorCmdLine
  90. p = INSTR(cmdline$, " ")
  91. IF (p = 0) THEN
  92.     database$ = TRIM$(cmdline$)
  93.     filedesc$ = ""
  94. ELSE
  95.     database$ = TRIM$(LEFT$(cmdline$, p - 1))
  96.     filedesc$ = TRIM$(MID$(cmdline$, p + 1))
  97. END IF
  98. IF (INSTR(filename$, "*") > 0 OR INSTR(filename$, "?") > 0) THEN
  99.     PRINT "Filenames cannot contain * or ?"
  100.     END
  101. END IF
  102. IF (LEN(filedesc$) > 64) THEN
  103.     filedesc$ = LEFT$(filedesc$, 64)
  104. END IF
  105.  
  106. ' Get the main configuration.
  107. OPEN "MAIN.CFG" FOR RANDOM ACCESS READ SHARED AS #1 LEN = LEN(cfgMain)
  108. IF (LOF(1) = 0) THEN
  109.     CLOSE #1
  110.     KILL "MAIN.CFG"
  111.     PRINT "Error - MAIN.CFG is missing."
  112.     END
  113. END IF
  114. GET #1, 1, cfgMain
  115. CLOSE #1
  116.  
  117. ' Get the system paths.
  118. OPEN "SYSPATHS.CFG" FOR RANDOM ACCESS READ SHARED AS #1 LEN = LEN(cfgSysPaths)
  119. IF (LOF(1) = 0) THEN
  120.     CLOSE #1
  121.     KILL "SYSPATHS.CFG"
  122.     PRINT "Error - SYSPATHS.CFG is missing."
  123.     END
  124. END IF
  125. GET #1, 1, cfgSysPaths
  126. CLOSE #1
  127.  
  128. ' Get the sysop's user account.
  129. f$ = TRIM$(cfgSysPaths.dat) + "\USERFILE.DAT"
  130. OPEN f$ FOR RANDOM ACCESS READ SHARED AS #1 LEN = LEN(sysop)
  131. IF (LOF(1) = 0) THEN
  132.     CLOSE #1
  133.     KILL f$
  134.     PRINT "Error - USERFILE.DAT is missing."
  135.     END
  136. END IF
  137. GET #1, 1, sysop
  138. CLOSE #1
  139.  
  140. ' Check the file to see if it exists.
  141. OPEN filename$ FOR RANDOM ACCESS READ SHARED AS #1
  142. IF (LOF(1) = 0) THEN
  143.     CLOSE #1
  144.     KILL filename$
  145.     PRINT "Error - File: " + filename$ + ", not found."
  146.     END
  147. END IF
  148. filesize = LOF(1)
  149. CLOSE #1
  150.  
  151. ' Get the database information.
  152. OPEN "DATABASE.CFG" FOR RANDOM ACCESS READ SHARED AS #1 LEN = LEN(dbInfo)
  153. IF (LOF(1) = 0) THEN
  154.     CLOSE #1
  155.     KILL "DATABASE.CFG"
  156.     PRINT "Error - DATABASE.CFG is missing."
  157.     END
  158. END IF
  159. db = 0
  160. n = LOF(1) \ LEN(dbInfo)
  161. FOR i = 1 TO n
  162.     GET #1, i, dbInfo
  163.     IF (TRIM$(dbInfo.filename) = database$) THEN
  164.         db = 1
  165.         EXIT FOR
  166.     END IF
  167. NEXT i
  168. CLOSE #1
  169. IF (db = 0) THEN
  170.     PRINT "Error - Specified Database is not configured in VConfig."
  171.     END
  172. END IF
  173.  
  174.  
  175. ' Try to extract file_id.diz for extended description.
  176. longdesc$ = filedesc$ + cr$ + lf$ + cr$ + lf$
  177. longdesc$ = longdesc$ + "Uploaded by VUpload v" + version$
  178.  
  179.  
  180. ' Copy the file to the directory.
  181. IF (TRIM$(dbInfo.filepath) = "") THEN
  182.     PRINT "Error - Database has no path configured."
  183.     END
  184. END IF
  185. f$ = filename$
  186. p = INSTR(filename$, "\")
  187. IF (p > 0) THEN
  188.     DO WHILE (p > 0)
  189.         f$ = TRIM$(MID$(f$, p + 1))
  190.         p = INSTR(f$, "\")
  191.     LOOP
  192. END IF
  193. file$ = f$
  194. f$ = TRIM$(dbInfo.filepath) + "\" + f$
  195.  
  196. OPEN f$ FOR RANDOM ACCESS READ SHARED AS #1
  197. IF (LOF(1) > 0) THEN
  198.     CLOSE #1
  199.     PRINT "Error - Specified filename already exists."
  200.     END
  201. END IF
  202. CLOSE #1
  203.  
  204. s$ = "COPY " + filename$ + " " + TRIM$(dbInfo.filepath) + " > nul."
  205. SHELL s$
  206.  
  207. OPEN f$ FOR RANDOM ACCESS READ SHARED AS #1
  208. IF LOF(1) = 0 THEN
  209.     CLOSE #1
  210.     KILL f$
  211.     PRINT "Error - Destination directory does not exist."
  212.     END
  213. END IF
  214. CLOSE #1
  215. IF (fileopt$ = "M") THEN
  216.     KILL filename$
  217. END IF
  218.  
  219.  
  220. ' Create the DB information.
  221. f$ = TRIM$(cfgSysPaths.db) + "\" + database$ + ".BIN"
  222. OPEN f$ FOR RANDOM ACCESS READ SHARED AS #1
  223. msgpos = LOF(1) + 1
  224. CLOSE #1
  225.  
  226. f$ = TRIM$(cfgSysPaths.dat) + "\DBSEQ.DAT"
  227. OPEN f$ FOR RANDOM ACCESS READ WRITE SHARED AS #1 LEN = LEN(datDBSeq)
  228. IF LOF(1) = 0 THEN
  229.     datDBSeq.msgcnt = 0
  230. ELSE
  231.     GET #1, 1, datDBSeq
  232. END IF
  233. datDBSeq.msgcnt = datDBSeq.msgcnt + 1
  234. PUT #1, 1, datDBSeq
  235. CLOSE #1
  236.  
  237. newDB.fromuserno = 1
  238. newDB.touserno = 0
  239. newDB.fromhandle = sysop.handle
  240. newDB.tohandle = ""
  241. newDB.fromnetnode = "0"
  242. newDB.tonetnode = ""
  243. newDB.fromnetid = 1
  244. newDB.tonetid = 1
  245. newDB.timestamp = UnixTime(0)
  246. newDB.sysmsgno = datDBSeq.msgcnt
  247. newDB.threadbk = 0
  248. newDB.threadbkn = 0
  249. newDB.subject = filedesc$
  250. newDB.deleted = 0
  251. newDB.creation = LongDate(cfgMain.timezone)
  252. newDB.offline = 0
  253. newDB.attfilesize = filesize
  254. newDB.attfilename = file$
  255. newDB.attfilepath = ""
  256. newDB.lib = 0
  257. newDB.downloadno = 0
  258. newDB.dbid = 0
  259. newDB.filename = dbInfo.filename
  260. newDB.msgpos = msgpos
  261. newDB.msglength = LEN(longdesc$) + 2
  262. newDB.originnet = 0
  263. newDB.fidoflags = 0
  264. newDB.originnode = 0
  265. newDB.reserved = ""
  266. newDB.extra = ""
  267.  
  268. ' Add the entry to the DAT file.
  269. f$ = TRIM$(cfgSysPaths.db) + "\" + database$ + ".DAT"
  270. OPEN f$ FOR RANDOM ACCESS WRITE SHARED AS #1 LEN = LEN(newDB)
  271. r = LOF(1) \ LEN(newDB) + 1
  272. PUT #1, r, newDB
  273. CLOSE #1
  274.  
  275. ' Add the entry to the BIN file.
  276. IF (filesize > 0) THEN
  277.     f$ = TRIM$(cfgSysPaths.db) + "\" + database$ + ".BIN"
  278.     OPEN f$ FOR APPEND ACCESS READ WRITE SHARED AS #1
  279.     PRINT #1, longdesc$
  280.     CLOSE #1
  281. END IF
  282.  
  283. ' Increase the upload statistics.
  284. f$ = TRIM$(cfgSysPaths.dat) + "\STATVBBS.DAT"
  285. OPEN f$ FOR RANDOM ACCESS READ WRITE AS #1 LEN = LEN(datStats)
  286. GET #1, 1, datStats
  287. datStats.uploadstotal = datStats.uploadstotal + 1
  288. datStats.uploadstoday = datStats.uploadstoday + 1
  289. PUT #1, 1, datStats
  290. CLOSE #1
  291.  
  292. PRINT "Done!"
  293. END
  294.  
  295. FUNCTION CalcAge& (m AS LONG, d AS LONG, y AS LONG)
  296.     DIM month AS LONG
  297.     DIM day AS LONG
  298.     DIM year AS LONG
  299.     DIM t AS INTEGER
  300.     DIM n AS INTEGER
  301.     DIM a AS INTEGER
  302.     DIM l AS INTEGER
  303.     month = VAL(LEFT$(DATE$, 2))
  304.     day = VAL(MID$(DATE$, 4, 2))
  305.     year = VAL(RIGHT$(DATE$, 4))
  306.     t = CalcDayNumber(month, day, year)
  307.     n = CalcDayNumber(m, d, y)
  308.     a = t - n
  309.     l = (a / 365) \ 4
  310.     CalcAge = (a - l) \ 365
  311. END FUNCTION
  312.  
  313. FUNCTION CalcDayNumber& (m AS LONG, d AS LONG, y AS LONG)
  314.     DIM v AS LONG
  315.     m = (m + 9) MOD 12
  316.     y = y - (m \ 10)
  317.     v = 365 * y
  318.     v = v + (y \ 4)
  319.     v = v - (y \ 100)
  320.     v = v + (y \ 400)
  321.     v = v + (((m * 306) + 5) \ 10)
  322.     v = v + d - 1
  323.     CalcDayNumber = v
  324. END FUNCTION
  325.  
  326. SUB ErrorCmdLine
  327.     PRINT "You must specify a filename and database name to upload."
  328.     PRINT "VUPLOAD.EXE [/C|/M] FILENAME.EXT DATABASE <DESCRIPTION>"
  329.     PRINT
  330.     PRINT "Options:"
  331.     PRINT "  /C - Copy filename to database's file directory"
  332.     PRINT "  /M - Move filename to database's file directory"
  333.     END
  334. END SUB
  335.  
  336. FUNCTION LongDate$ (tz AS STRING)
  337.     DIM d AS LONG
  338.     DIM m AS LONG
  339.     DIM y AS LONG
  340.     DIM a AS LONG
  341.     a = (14 - m) \ 12
  342.     y = y - a
  343.     m = m + (12 * a) - 2
  344.     d = d + y + (y \ 4) - (y \ 100)
  345.     d = d + (y \ 400) + ((31 * m) \ 12)
  346.     d = d MOD 7
  347.     SELECT CASE d
  348.         CASE 1
  349.             dow$ = "Mon"
  350.         CASE 2
  351.             dow$ = "Tue"
  352.         CASE 3
  353.             dow$ = "Wed"
  354.         CASE 4
  355.             dow$ = "Thu"
  356.         CASE 5
  357.             dow$ = "Fri"
  358.         CASE 6
  359.             dow$ = "Sat"
  360.         CASE 7
  361.             dow$ = "Sun"
  362.         CASE ELSE
  363.             dow$ = "Sun"
  364.     END SELECT
  365.     month$ = LEFT$(DATE$, 2)
  366.     day$ = MID$(DATE$, 4, 2)
  367.     year$ = RIGHT$(DATE$, 4)
  368.     SELECT CASE month$
  369.         CASE "01"
  370.             mo$ = "Jan"
  371.         CASE "02"
  372.             mo$ = "Feb"
  373.         CASE "03"
  374.             mo$ = "Mar"
  375.         CASE "04"
  376.             mo$ = "Apr"
  377.         CASE "05"
  378.             mo$ = "May"
  379.         CASE "06"
  380.             mo$ = "Jun"
  381.         CASE "07"
  382.             mo$ = "Jul"
  383.         CASE "08"
  384.             mo$ = "Aug"
  385.         CASE "09"
  386.             mo$ = "Sep"
  387.         CASE "10"
  388.             mo$ = "Oct"
  389.         CASE "11"
  390.             mo$ = "Nov"
  391.         CASE "12"
  392.             mo$ = "Dec"
  393.     END SELECT
  394.     LongDate = dow$ + " " + mo$ + " " + day$ + ", " + year$ + " " + TIME$ + " " + tz
  395. END FUNCTION
  396.  
  397. FUNCTION TRIM$ (text$)
  398.     TRIM$ = RTRIM$(LTRIM$(text$))
  399. END FUNCTION
  400.  
  401. FUNCTION UnixTime& (tz AS LONG)
  402.     DIM month AS LONG
  403.     DIM day AS LONG
  404.     DIM year AS LONG
  405.     DIM a AS LONG
  406.     DIM t AS LONG
  407.     DIM n AS LONG
  408.     month = VAL(LEFT$(DATE$, 2))
  409.     day = VAL(MID$(DATE$, 4, 2))
  410.     year = VAL(RIGHT$(DATE$, 4))
  411.     t = CalcDayNumber(month, day, year)
  412.     n = CalcDayNumber(1, 1, 1970)
  413.     a = t - n
  414.     a = a * 1440
  415.     a = a * 60
  416.     UnixTime = a + TIMER - tz
  417. END FUNCTION
  418.  
  419.