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

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