Advertisement
Guest User

dosbox frontend

a guest
Jan 6th, 2021
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
QBasic 11.54 KB | None | 0 0
  1. REM dosbox frontend
  2. REM dp 2020
  3.  
  4. $CONSOLE:ONLY
  5. _DEST _CONSOLE
  6. IF INSTR(_OS$, "[WINDOWS]") THEN LET ros$ = "win"
  7. IF INSTR(_OS$, "[LINUX]") THEN LET ros$ = "lnx"
  8. IF INSTR(_OS$, "[MACOSX]") THEN LET ros$ = "mac"
  9. setup:
  10. REM loads games folder location AND checks IF it exists
  11. 10 IF _FILEEXISTS("dbfe.ddf") THEN
  12.     OPEN "dbfe.ddf" FOR INPUT AS #1
  13.     INPUT #1, rootdir$, confdir$, confname$, dosboxexe$, ifwindows$
  14.     CLOSE #1
  15.     IF _DIREXISTS(rootdir$) THEN
  16.         REM nothing
  17.     ELSE
  18.         PRINT: PRINT "Cannot find games folder!"
  19.         IF ros$ = "lnx" OR ros$ = "mac" THEN SHELL _HIDE "rm dbfe.ddf"
  20.         IF ros$ = "win" THEN SHELL _HIDE "del dbfe.ddf"
  21.         GOTO 10
  22.     END IF
  23. ELSE
  24.     PRINT "Please type in the location of your games folder..."
  25.     INPUT rootdir$
  26.     IF _DIREXISTS(rootdir$) THEN
  27.         OPEN "dbfe.ddf" FOR OUTPUT AS #1
  28.         PRINT #1, rootdir$
  29.         CLOSE #1
  30.     ELSE
  31.         PRINT: PRINT "Cannot find games folder!"
  32.         IF _FILEEXISTS("dbfe.ddf") THEN
  33.             IF ros$ = "lnx" OR ros$ = "mac" THEN SHELL _HIDE "rm dbfe.ddf"
  34.             IF ros$ = "win" THEN SHELL _HIDE "del dbfe.ddf"
  35.         END IF
  36.         GOTO 10
  37.     END IF
  38.     IF ros$ = "win" OR ros$ = "lnx" THEN PRINT "Please type in the location of your dosbox conf folder (must ONLY contain unedited conf file)..."
  39.     IF ros$ = "mac" THEN PRINT "Please type in the location of your dosbox preferences folder..."
  40.     INPUT confdir$
  41.     IF _DIREXISTS(confdir$) THEN
  42.         OPEN "dbfe.ddf" FOR APPEND AS #1
  43.         PRINT #1, confdir$
  44.         CLOSE #1
  45.         IF ros$ = "lnx" OR ros$ = "mac" THEN SHELL _HIDE "ls '" + confdir$ + "' > temp.ddf"
  46.         IF ros$ = "win" THEN SHELL _HIDE "dir /b " + CHR$(34) + confdir$ + CHR$(34) + " > temp.ddf"
  47.         IF ros$ = "lnx" OR ros$ = "win" THEN
  48.             REM conf finder (linux AND windows)
  49.             OPEN "temp.ddf" FOR INPUT AS #1
  50.             INPUT #1, confname$
  51.             CLOSE #1
  52.             LET findconf% = INSTR(findconf% + 1, confname$, ".conf")
  53.             IF findconf% THEN
  54.                 IF ros$ = "lnx" THEN SHELL _HIDE "rm temp.ddf"
  55.                 IF ros$ = "win" THEN SHELL _HIDE "del temp.ddf"
  56.                 OPEN "dbfe.ddf" FOR APPEND AS #1
  57.                 PRINT #1, confname$
  58.                 CLOSE #1
  59.                 LET findconf% = 0
  60.             ELSE
  61.                 PRINT: PRINT "Cannot find conf file in folder!"
  62.                 IF _FILEEXISTS("dbfe.ddf") THEN
  63.                     IF ros$ = "lnx" THEN SHELL _HIDE "rm dbfe.ddf"
  64.                     IF ros$ = "win" THEN SHELL _HIDE "del dbfe.ddf"
  65.                 END IF
  66.                 GOTO 10
  67.             END IF
  68.         END IF
  69.         IF ros$ = "mac" THEN
  70.             REM conf finder (macos)
  71.             OPEN "temp.ddf" FOR INPUT AS #1
  72.             DO
  73.                 INPUT #1, confname$
  74.                 LET findconf% = INSTR(findconf% + 1, confname$, "DOSBox")
  75.             LOOP UNTIL findconf% OR EOF(1)
  76.             CLOSE #1
  77.             IF findconf% THEN
  78.                 SHELL _HIDE "rm temp.ddf"
  79.                 OPEN "dbfe.ddf" FOR APPEND AS #1
  80.                 PRINT #1, confname$
  81.                 CLOSE #1
  82.                 LET findconf% = 0
  83.             ELSE
  84.                 PRINT: PRINT "Cannot find preference file in folder!"
  85.                 SHELL _HIDE "rm dbfe.ddf"
  86.                 GOTO 10
  87.             END IF
  88.         END IF
  89.     ELSE
  90.         PRINT: PRINT "Cannot find preference folder!"
  91.         IF _FILEEXISTS("dbfe.ddf") THEN
  92.             IF ros$ = "lnx" OR ros$ = "mac" THEN SHELL _HIDE "rm dbfe.ddf"
  93.             IF ros$ = "win" THEN SHELL _HIDE "del dbfe.ddf"
  94.         END IF
  95.         GOTO 10
  96.     END IF
  97. END IF
  98. IF ros$ = "win" THEN
  99.     IF dosboxexe$ = "" THEN
  100.         PRINT "Please type in the location of your dosbox program folder..."
  101.         INPUT dosboxwin$
  102.         SHELL _HIDE "dir /b " + CHR$(34) + dosboxwin$ + CHR$(34) + " > temp.ddf"
  103.         OPEN "temp.ddf" FOR INPUT AS #1
  104.         DO
  105.             INPUT #1, temp$
  106.             LET finddosbox% = INSTR(finddosbox% + 1, UCASE$(temp$), "DOSBOX.EXE")
  107.             IF finddosbox% THEN
  108.                 LET dosboxexe$ = dosboxwin$ + "\" + "dosbox.exe"
  109.                 LET finddosbox% = 0
  110.             END IF
  111.         LOOP UNTIL EOF(1) OR dosboxexe$ <> ""
  112.         CLOSE #1
  113.         IF dosboxexe$ = "" THEN
  114.             PRINT: PRINT "Cannot find dosbox exe in folder!"
  115.             IF _FILEEXISTS("dbfe.ddf") THEN
  116.                 SHELL _HIDE "del dbfe.ddf"
  117.             END IF
  118.             SHELL _HIDE "del temp.ddf"
  119.             GOTO 10
  120.         ELSE
  121.             OPEN "dbfe.ddf" FOR APPEND AS #1
  122.             PRINT #1, dosboxexe$
  123.             CLOSE #1
  124.             SHELL _HIDE "del temp.ddf"
  125.         END IF
  126.     END IF
  127. ELSE
  128.     IF ifwindows$ = "notwindows" THEN
  129.         REM nothing
  130.     ELSE
  131.         OPEN "dbfe.ddf" FOR APPEND AS #1
  132.         PRINT #1, "notwindows"
  133.         CLOSE #1
  134.     END IF
  135. END IF
  136. PRINT
  137. IF ros$ = "win" THEN PRINT "Dosbox found at: " + dosboxexe$
  138. PRINT "Games folder found at: " + rootdir$
  139. PRINT "Conf file found at: " + confdir$
  140. PRINT "Conf file name is: " + confname$
  141. PRINT "Building database..."
  142. IF ros$ = "lnx" OR ros$ = "mac" THEN SHELL _HIDE "ls '" + rootdir$ + "' > dosgamedb.ddf"
  143. IF ros$ = "win" THEN SHELL _HIDE "dir /b " + CHR$(34) + rootdir$ + CHR$(34) + " > dosgamedb.ddf"
  144. OPEN "dosgamedb.ddf" FOR INPUT AS #1
  145. DO
  146.     LET numberofgames = numberofgames + 1
  147.     INPUT #1, templine$
  148. LOOP UNTIL EOF(1)
  149. CLOSE #1
  150. GOTO menu
  151.  
  152. menu:
  153. REM menu
  154. PRINT
  155. PRINT "DOSBOX FRONTEND"
  156. PRINT
  157. PRINT "1) Quick Launch"
  158. PRINT "2) List Games"
  159. PRINT "3) Search for Games"
  160. PRINT "4) Change Folders"
  161. PRINT "5) Quit"
  162. PRINT
  163. INPUT a
  164. IF a = 1 THEN GOTO quicklaunch
  165. IF a = 2 THEN GOTO listgames
  166. IF a = 3 THEN GOTO searchgames
  167. IF a = 4 THEN GOTO changedir
  168. IF a = 5 THEN
  169.     IF ros$ = "lnx" OR ros$ = "mac" THEN SHELL _HIDE "rm dosgamedb.ddf": SHELL _HIDE "rm dosexedb.ddf"
  170.     IF ros$ = "win" THEN SHELL _HIDE "del dosgamedb.ddf": SHELL _HIDE "del dosexedb.ddf"
  171.     SYSTEM
  172. END IF
  173. GOTO menu
  174.  
  175. searchgames:
  176. REM searches FOR a game
  177. PRINT
  178. INPUT "Insert Search Term: "; gamesearch$
  179. IF gamesearch$ = "" THEN GOTO menu
  180. LET dbline = 0
  181. LET dbloop = 0
  182. OPEN "dosgamedb.ddf" FOR INPUT AS #1
  183. DO
  184.     DO
  185.         LET dbline = dbline + 1
  186.         INPUT #1, gamedir$
  187.         LET findsearch% = INSTR(findsearch% + 1, UCASE$(gamedir$), UCASE$(gamesearch$))
  188.         IF findsearch% THEN
  189.             LET dbloop = dbloop + 1
  190.             PRINT dbline; " - " + gamedir$
  191.             LET findsearch% = 0
  192.         END IF
  193.     LOOP UNTIL dbloop = 20 OR EOF(1)
  194.     LET dbloop = 0
  195.     IF EOF(1) THEN PRINT "End of Search Results!"
  196.     PRINT "Type in a game number. ENTER) Next Page. 0) Menu."
  197.    50 INPUT a$
  198.     IF UCASE$(a$) = "0" THEN GOTO menu
  199.     IF a$ <> "" THEN
  200.         LET gameno = VAL(a$)
  201.         IF gameno > 0 THEN GOSUB launchgame: GOTO menu
  202.         GOTO 50
  203.     END IF
  204. LOOP UNTIL EOF(1)
  205. CLOSE #1
  206. GOTO menu
  207.  
  208. quicklaunch:
  209. REM quick launches a game
  210. PRINT
  211. INPUT "Insert Game Number: "; gameno
  212. IF gameno = 0 THEN GOTO menu
  213. GOSUB launchgame
  214. GOTO menu
  215.  
  216. changedir:
  217. REM changes game directory
  218. LET rootdir$ = ""
  219. IF ros$ = "lnx" OR ros$ = "mac" THEN SHELL _HIDE "rm dbfe.ddf"
  220. IF ros$ = "win" THEN SHELL _HIDE "del dbfe.ddf"
  221. GOTO setup
  222.  
  223. listgames:
  224. REM lists games
  225. LET dbline = 0
  226. LET dbloop = 0
  227. OPEN "dosgamedb.ddf" FOR INPUT AS #1
  228. DO
  229.     DO
  230.         LET dbline = dbline + 1
  231.         LET dbloop = dbloop + 1
  232.         INPUT #1, gamedir$
  233.         PRINT dbline; " - " + gamedir$
  234.     LOOP UNTIL dbloop = 20 OR EOF(1)
  235.     IF EOF(1) THEN PRINT "End of Game List!"
  236.     PRINT "Type in a game number. ENTER) Next Page. 0) Menu."
  237.    20 INPUT a$
  238.     IF UCASE$(a$) = "0" THEN CLOSE #1: GOTO menu
  239.     IF UCASE$(a$) <> "" THEN
  240.         REM launch game
  241.         LET gameno = VAL(a$)
  242.         IF gameno > 0 THEN GOSUB launchgame: GOTO menu
  243.         GOTO 20
  244.     END IF
  245.     LET dbloop = 0
  246. LOOP UNTIL EOF(1)
  247. CLOSE #1
  248. GOTO menu
  249.  
  250. launchgame:
  251. REM launches games?
  252. CLOSE #1
  253. IF gameno > numberofgames THEN PRINT: PRINT "The total number of games available is "; numberofgames: RETURN
  254. LET dbloop2 = 0
  255. OPEN "dosgamedb.ddf" FOR INPUT AS #1
  256. DO
  257.     LET dbloop2 = dbloop2 + 1
  258.     INPUT #1, gamedir$
  259. LOOP UNTIL dbloop2 = gameno
  260. CLOSE #1
  261. IF ros$ = "lnx" OR ros$ = "mac" THEN SHELL _HIDE "ls '" + rootdir$ + "/" + gamedir$ + "' > dosexedb.ddf"
  262. IF ros$ = "win" THEN SHELL _HIDE "dir /b " + CHR$(34) + rootdir$ + "\" + gamedir$ + CHR$(34) + " > dosexedb.ddf"
  263. PRINT
  264. PRINT gamedir$ + " - Available Executables"
  265. PRINT
  266. LET dbloop2 = 0
  267. OPEN "dosexedb.ddf" FOR INPUT AS #1
  268. DO
  269.     INPUT #1, gameexe$
  270.     LET findexe% = INSTR(findexe% + 1, gameexe$, ".exe")
  271.     LET findcom% = INSTR(findcom% + 1, gameexe$, ".com")
  272.     LET findbat% = INSTR(findbat% + 1, gameexe$, ".bat")
  273.     LET findcapexe% = INSTR(findcapexe% + 1, gameexe$, ".EXE")
  274.     LET findcapcom% = INSTR(findcapcom% + 1, gameexe$, ".COM")
  275.     LET findcapbat% = INSTR(findcapbat% + 1, gameexe$, ".BAT")
  276.     IF findexe% OR findcom% OR findbat% OR findcapexe% OR findcapcom% OR findcapbat% THEN
  277.         LET dbloop2 = dbloop2 + 1
  278.         PRINT dbloop2; " - " + gameexe$
  279.         LET findexe% = 0
  280.         LET findcom% = 0
  281.         LET findbat% = 0
  282.         LET findcapexe% = 0
  283.         LET findcapcom% = 0
  284.         LET findcapbat% = 0
  285.     END IF
  286. LOOP UNTIL EOF(1)
  287. CLOSE #1
  288. LET numberofexe = dbloop2
  289. IF numberofexe = 0 THEN PRINT "No executable files found!": RETURN
  290. PRINT "Type in a launch number. 0) Menu."
  291. 30 INPUT b$
  292. IF UCASE$(b$) = "0" THEN RETURN
  293. IF UCASE$(b$) <> "" THEN
  294.     REM launch game
  295.     LET exeno = VAL(b$)
  296.     IF exeno > 0 THEN GOSUB launchexe: GOTO menu
  297. END IF
  298. GOTO 30
  299.  
  300. launchexe:
  301. REM launches a game exe
  302. IF exeno > numberofexe THEN PRINT: PRINT "The total number of executable files available is "; numberofexe: RETURN
  303. LET dbloop3 = 0
  304. OPEN "dosexedb.ddf" FOR INPUT AS #1
  305. DO
  306.     INPUT #1, gameexe$
  307.     LET findexe% = INSTR(findexe% + 1, gameexe$, ".exe")
  308.     LET findcom% = INSTR(findcom% + 1, gameexe$, ".com")
  309.     LET findbat% = INSTR(findbat% + 1, gameexe$, ".bat")
  310.     LET findcapexe% = INSTR(findcapexe% + 1, gameexe$, ".EXE")
  311.     LET findcapcom% = INSTR(findcapcom% + 1, gameexe$, ".COM")
  312.     LET findcapbat% = INSTR(findcapbat% + 1, gameexe$, ".BAT")
  313.     IF findexe% OR findcom% OR findbat% OR findcapexe% OR findcapcom% OR findcapbat% THEN
  314.         LET dbloop3 = dbloop3 + 1
  315.         LET findexe% = 0
  316.         LET findcom% = 0
  317.         LET findbat% = 0
  318.         LET findcapexe% = 0
  319.         LET findcapcom% = 0
  320.         LET findcapbat% = 0
  321.     END IF
  322. LOOP UNTIL dbloop3 = exeno
  323. CLOSE #1
  324. PRINT: PRINT "Launching " + gamedir$ + " [" + gameexe$ + "]...": PRINT
  325. IF ros$ = "lnx" OR ros$ = "mac" THEN SHELL _HIDE "cp '" + confdir$ + "/" + confname$ + "' ."
  326. IF ros$ = "win" THEN SHELL _HIDE "copy " + CHR$(34) + confdir$ + "\" + confname$ + CHR$(34) + " " + confname$
  327. IF ros$ = "win" OR ros$ = "lnx" THEN OPEN confname$ FOR APPEND AS #1
  328. IF ros$ = "mac" THEN OPEN confdir$ + confname$ FOR APPEND AS #1
  329. PRINT #1, ""
  330. IF ros$ = "lnx" OR ros$ = "mac" THEN PRINT #1, "mount c " + CHR$(34) + rootdir$ + "/" + gamedir$ + CHR$(34)
  331. IF ros$ = "win" THEN PRINT #1, "mount c " + CHR$(34) + rootdir$ + "\" + gamedir$ + CHR$(34)
  332. PRINT #1, "c:"
  333. PRINT #1, gameexe$
  334. PRINT #1, "exit"
  335. CLOSE #1
  336. REM launch dosbox
  337. IF ros$ = "lnx" THEN SHELL "dosbox -conf " + confname$
  338. IF ros$ = "win" THEN SHELL CHR$(34) + dosboxexe$ + CHR$(34) + " -conf " + confname$
  339. IF ros$ = "mac" THEN SHELL "open -a dosbox"
  340. IF ros$ = "mac" THEN
  341.     PRINT: PRINT "Press ENTER to finish playing..."
  342.     INPUT temp$
  343. END IF
  344. REM post game commands
  345. IF ros$ = "lnx" THEN SHELL _HIDE "rm " + confname$
  346. IF ros$ = "win" THEN SHELL _HIDE "del " + confname$
  347. IF ros$ = "mac" THEN
  348.     SHELL _HIDE "rm '" + confdir$ + "/" + confname$ + "'"
  349.     SHELL _HIDE "cp '" + confname$ + "' '" + confdir$ + "/" + confname$ + "'"
  350.     SHELL _HIDE "rm '" + confname$ + "'"
  351. END IF
  352. RETURN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement