' ' FDUPDATE server repository generator ' Author: Mateusz Viste ' #INCLUDE ONCE "vbcompat.bi" ' Needed to use the 'FileExists' function #INCLUDE ONCE "getlsm.bi" ' GetLSM function #INCLUDE ONCE "sortstr.bi" ' String sorting functions ( CONST pVer AS STRING = "05apr2009" DECLARE SUB GenTabIndex() DECLARE FUNCTION GetCSV(RawCSV AS STRING, n AS INTEGER) AS STRING DECLARE FUNCTION SpaceToNbsp(InString AS STRING) AS STRING DIM SHARED ShortMonths(1 TO 12) AS STRING*3 => {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} DIM SHARED AS INTEGER TotalPackages DIM AS STRING LineBuff, PkgFile, PkgTitle, PkgVer, PkgDate, PkgDesc PRINT "FDUPDATE server repository generator version "; pVer SLEEP 250 PRINT PRINT "Generating the fdupdate.tab file... "; GenTabIndex() IF FileExists("fdupdate.tab") = 0 THEN PRINT "fdupdate.tab not in current directory.": END(1) OPEN "fdupdate.tab" FOR INPUT AS #1 OPEN "index.htm" FOR OUTPUT AS #2 PRINT #2, "" PRINT #2, "" PRINT #2, "" PRINT #2, " FreeDOS update server" PRINT #2, " " PRINT #2, " " PRINT #2, " " PRINT #2, " " PRINT #2, " " PRINT #2, "" PRINT #2, "" PRINT #2, "
" PRINT #2, "

Welcome to the FreeDOS v1.1 update server
" PRINT #2, "Last update: "; DAY(NOW); " "; ShortMonths(MONTH(NOW)); " "; YEAR(NOW); "

" PRINT #2, "
" PRINT #2, "

This is the main (and only) page of the FreeDOS Update Server. You will find below the listing of all available FreeDOS packages in their (presumably) most up to date versions (there are some third-party tools, too). The easiest way of installing them is using the FreeDOS Updater. Of course, you can install them manually if you wish.
" PRINT #2, "
" PRINT #2, "Are you the author/maintainer of one of the listed software? If so, please check if my repository contains the latest available version, and send me the latest version of your program. That will greatly help me maintaining the repository up to date.
" PRINT #2, "
" PRINT #2, "I'm working on the FreeDOS update repository in my free time. If you would like to give me a hand, you could check out the work-in-progress queue to verify and/or repackage some files.

" PRINT #2, "
" PRINT #2, "" PRINT #2, " " PRINT #2, " " PRINT #2, " " PRINT #2, " " PRINT #2, " " DO LINE INPUT #1, LineBuff PkgFile = GetCSV(LineBuff, 1) PkgTitle = SpaceToNbsp(GetCSV(LineBuff, 2)) PkgVer = SpaceToNbsp(GetCSV(LineBuff, 3)) PkgDate = SpaceToNbsp(GetCSV(LineBuff, 4)) PkgDesc = GetCSV(LineBuff, 5) IF FileExists(PkgFile + ".zip") = 0 THEN PRINT "Error: "; PkgFile; ".zip does not exist!" IF LEN(PkgDate) = 0 THEN PkgDate = " " PRINT #2, " " PRINT #2, " " PRINT #2, " " PRINT #2, " " PRINT #2, " " LOOP UNTIL EOF(1) PRINT #2, "
Package nameEntered dateDescription
"; PkgTitle; " "; PkgVer; ""; PkgDate; ""; PkgDesc; "
" PRINT #2, "" PRINT #2, " " PRINT #2, " " PRINT #2, " " PRINT #2, " " PRINT #2, "
" PRINT #2, " Total packages: " & TotalPackages PRINT #2, " " PRINT #2, " " PRINT #2, "
" PRINT #2, "" PRINT #2, "" CLOSE #1 CLOSE #2 REM *** END OF THE MAIN PROGRAM *** FUNCTION GetCSV(RawCSV AS STRING,n AS INTEGER) AS STRING ' GetCSV analizes a string in CSV format (comma or tab delimited), and ' returns the value of the n-th field. If the field doesn't exist, it ' returns a null string. DIM AS STRING FieldValue DIM AS INTEGER Counter, CommaPos, ValueLen CommaPos = 0 FOR Counter = 1 TO n - 1 DO CommaPos += 1 LOOP UNTIL MID(RawCSV, CommaPos, 1) = CHR(9) OR CommaPos = LEN(RawCSV) NEXT Counter ValueLen = -1 DO ValueLen += 1 LOOP UNTIL MID(RawCSV, CommaPos + ValueLen + 1, 1) = CHR(9) OR CommaPos + ValueLen = LEN(RawCSV) FieldValue = MID(RawCSV, CommaPos + 1, ValueLen) RETURN FieldValue END FUNCTION FUNCTION SpaceToNbsp(InString AS STRING) AS STRING DIM AS INTEGER x DIM AS STRING Wynik Wynik = InString DO x = INSTR(Wynik, " ") IF x > 0 THEN Wynik = MID(Wynik, 1, x - 1) + " " + MID(Wynik, x + 1) LOOP UNTIL x = 0 RETURN Wynik END FUNCTION SUB GenTabIndex() REDIM LsmFileList(1 TO 2) AS STRING DIM AS STRING LsmFile, LSMpackage, LSMtitle, LSMversion, LSMdate, LSMdescription DIM AS INTEGER LsmCount = 0, x LsmFile = DIR("lsm/*.lsm") WHILE LEN(LsmFile) > 0 IF LsmCount = UBOUND(LsmFileList) THEN REDIM PRESERVE LsmFileList(1 TO LsmCount * 2) AS STRING LsmCount += 1 LsmFileList(LsmCount) = LsmFile LsmFile = DIR() WEND TotalPackages = LsmCount strQsort(LsmFileList(), LsmCount) ' Sorting the packages list OPEN "fdupdate.tab" FOR OUTPUT AS #39 FOR x = 1 TO LsmCount LsmFile = LsmFileList(x) LSMpackage = MID(LsmFile, 1, LEN(LsmFile) - 4) IF LEN(LSMpackage) > 8 THEN PRINT "Error: "; LSMpackage; ".zip is not in 8.3 format!" LSMtitle = GetLSM("lsm/" + LsmFile, "Title") IF LEN(LSMtitle) = 0 THEN PRINT "Error: no LSM title for "; LSMpackage; ".zip!" LSMversion = GetLSM("lsm/" + LsmFile, "Version") IF LEN(LSMversion) = 0 THEN PRINT "Error: no LSM version for "; LSMpackage; ".zip!" LSMdate = GetLSM("lsm/" + LsmFile, "Entered-date") IF LEN(LSMdate) = 0 THEN PRINT "Error: no LSM date for "; LSMpackage; ".zip!" LSMdescription = GetLSM("lsm/" + LsmFile, "Description") IF LEN(LSMdescription) = 0 THEN PRINT "Error: no LSM description for "; LSMpackage; ".zip!" PRINT #39, LSMpackage + CHR(9) + LSMtitle + CHR(9) + LSMversion + CHR(9) + LSMdate + CHR(9) + LSMdescription NEXT x CLOSE #39 PRINT "" & LsmCount & " packages found." END SUB