DECLARE SUB UpdateRunFile () DECLARE SUB SaveConfig () DECLARE SUB LoadConfig () DECLARE SUB UpdateOp (oplist$, num%, opval$, length%) DECLARE FUNCTION Menu% (m AS ANY, mm$, ini%) TYPE MenuType x AS INTEGER y AS INTEGER c1 AS INTEGER c2 AS INTEGER w AS INTEGER END TYPE DIM SHARED men(1 TO 5) AS MenuType, ment$(1 TO 5) DIM SHARED videoid$(1 TO 5), soundid$(1 TO 6), curvideo%, cursound% DIM SHARED runfile$ runfile$ = "STUNTS.BAT" videoid$(1) = "MCGA" videoid$(2) = "EGA" videoid$(3) = "Tandy" videoid$(4) = "Hercules" videoid$(5) = "CGA" curvideo% = 1 soundid$(1) = "No sound" soundid$(2) = "PC Speaker" soundid$(3) = "Tandy" soundid$(4) = "Ad Lib" soundid$(5) = "Sound Blaster" soundid$(6) = "MT-32" cursound% = 1 COLOR 15, 7 CLS COLOR 0, 3 LOCATE 25, 1 PRINT SPACE$(4) + CHR$(24) + " " + CHR$(25) + " to move highlight, ENTER to select option, ESC to exit, F1 for help" + SPACE$(5); COLOR 15, 1 LOCATE 2, 3: PRINT SPACE$(74); LOCATE 3, 3: PRINT SPACE$(74); LOCATE 4, 3: PRINT SPACE$(74); COLOR 8, 0: LOCATE 5, 5: PRINT SPACE$(74) LOCATE 3, 77: PRINT " "; : LOCATE 4, 77: PRINT " "; COLOR 15, 1 LOCATE 2, 28: PRINT CHR$(34) + "Stunts" + CHR$(34) + " Setup Program"; LOCATE 3, 34: PRINT "Version 1.1"; LOCATE 4, 18: PRINT "Copyright (c) 2021 Stunts Online Community"; men(1).x = 4 men(1).y = 7 men(1).w = 40 men(1).c1 = 7 men(1).c2 = 4 ment$(1) = "Video display`Sound option`Install game to hard disk`Exit" men(2).x = 13 men(2).y = 12 men(2).w = 27 men(2).c1 = 0 men(2).c2 = 2 ment$(2) = "MGCA/VGA graphics`EGA graphics`Tandy graphics`Hercules graphics`CGA graphics" men(3).x = 11 men(3).y = 12 men(3).w = 34 men(3).c1 = 0 men(3).c2 = 2 ment$(3) = "No music or sound effects`Internal PC speaker`Tandy sound`Ad Lib card`Sound Blaster card`Roland MT-32" LoadConfig UpdateOp ment$(1), 1, videoid$(curvideo%), men(1).w - 2 UpdateOp ment$(1), 2, soundid$(cursound%), men(1).w - 2 curmain% = 1 DO a% = Menu%(men(1), ment$(1), curmain%) IF a% <> -1 THEN curmain% = a% SELECT CASE a% CASE -1 COLOR 7, 0 CLS PRINT EXIT DO CASE 4 SaveConfig UpdateRunFile COLOR 7, 0 CLS PRINT PRINT "Configuration saved." EXIT DO CASE 1 PCOPY 0, 1 a% = Menu%(men(2), ment$(2), curvideo%) IF a% <> -1 THEN curvideo% = a% UpdateOp ment$(1), 1, videoid$(curvideo%), men(1).w - 2 PCOPY 1, 0 CASE 2 PCOPY 0, 1 a% = Menu%(men(3), ment$(3), cursound%) IF a% <> -1 THEN cursound% = a% UpdateOp ment$(1), 2, soundid$(cursound%), men(1).w - 2 PCOPY 1, 0 CASE 3 PCOPY 0, 1 COLOR 15, 5 LOCATE 15, 15: PRINT SPACE$(50); LOCATE 16, 15: PRINT SPACE$(50); LOCATE 17, 15: PRINT SPACE$(50); COLOR 7, 0 LOCATE 16, 65: PRINT " "; LOCATE 17, 65: PRINT " "; LOCATE 18, 17: PRINT SPACE$(50); COLOR 15, 5 LOCATE 16, 20: PRINT "This option is here just to look cool!" a$ = INPUT$(1) PCOPY 1, 0 END SELECT LOOP PRINT "Use " + UCASE$(runfile$) + " to play Stunts" PRINT END SUB LoadConfig 'Make sure the file exists OPEN "setup.cfg" FOR BINARY AS 1: CLOSE 1 OPEN "setup.cfg" FOR INPUT AS 1 DO UNTIL EOF(1) LINE INPUT #1, a$ n% = INSTR(a$, "=") IF n% THEN p$ = LCASE$(LTRIM$(RTRIM$(LEFT$(a$, n% - 1)))) v$ = LTRIM$(RTRIM$(MID$(a$, n% + 1))) SELECT CASE p$ CASE "video" FOR i% = 1 TO 5 IF LCASE$(v$) = LCASE$(videoid$(i%)) THEN curvideo% = i% EXIT FOR END IF NEXT i% CASE "sound" FOR i% = 1 TO 6 IF LCASE$(v$) = LCASE$(soundid$(i%)) THEN cursound% = i% EXIT FOR END IF NEXT i% CASE "runfile" runfile$ = LEFT$(v$, 12) END SELECT END IF LOOP CLOSE 1 END SUB FUNCTION Menu% (m AS MenuType, mm$, ini%) DIM mop$(1 TO 20), mops AS INTEGER mt$ = mm$ DO UNTIL LEN(mt$) = 0 mops = mops + 1 n% = INSTR(mt$, "`") IF n% THEN mop$(mops) = LEFT$(mt$, n% - 1) mt$ = MID$(mt$, n% + 1) ELSE mop$(mops) = mt$ mt$ = "" END IF LOOP COLOR m.c1, m.c2 LOCATE m.y, m.x PRINT "Ú" + STRING$(m.w, 196) + "¿"; FOR i% = m.y + 1 TO m.y + mops LOCATE i%, m.x PRINT "³ " + mop$(i% - m.y) + SPACE$(m.w - LEN(mop$(i% - m.y)) - 1) + "³"; NEXT i% LOCATE m.y + mops + 1, m.x PRINT "À" + STRING$(m.w, 196) + "Ù"; COLOR 8, 0 FOR i% = m.y + 1 TO m.y + mops + 1 LOCATE i%, m.x + m.w + 2 PRINT " "; NEXT i% LOCATE i%, m.x + 2 PRINT SPACE$(m.w + 2); cur% = ini% ex% = 1 Update% = -1 DO IF Update% THEN COLOR m.c1, m.c2 LOCATE m.y + ex%, m.x + 1 PRINT " " + mop$(ex%) + SPACE$(m.w - LEN(mop$(ex%)) - 1); COLOR 0, 7 LOCATE m.y + cur%, m.x + 1 PRINT " " + mop$(cur%) + SPACE$(m.w - LEN(mop$(cur%)) - 1); ex% = cur% Update% = 0 END IF akey$ = INKEY$ SELECT CASE akey$ CASE CHR$(0) + CHR$(72) IF cur% > 1 THEN cur% = cur% - 1 ELSE cur% = mops END IF Update% = -1 CASE CHR$(0) + CHR$(80) IF cur% < mops THEN cur% = cur% + 1 ELSE cur% = 1 END IF Update% = -1 CASE CHR$(13) EXIT DO CASE CHR$(27) cur% = -1 EXIT DO END SELECT LOOP Menu% = cur% END FUNCTION SUB SaveConfig OPEN "setup.cfg" FOR OUTPUT AS 1 PRINT #1, "video=" + videoid$(curvideo%) PRINT #1, "sound=" + soundid$(cursound%) PRINT #1, "runfile=" + runfile$ CLOSE 1 END SUB SUB UpdateOp (oplist$, num%, opval$, length%) DIM op$(1 TO 20) o$ = oplist$ DO WHILE LEN(o$) ops% = ops% + 1 n% = INSTR(o$, "`") IF n% THEN op$(ops%) = LEFT$(o$, n% - 1) o$ = MID$(o$, n% + 1) ELSE op$(ops%) = o$ o$ = "" END IF LOOP FOR i% = LEN(op$(num%)) TO 1 STEP -1 IF MID$(op$(num%), i%, 1) = "(" THEN EXIT FOR NEXT i% IF i% THEN op$(num%) = RTRIM$(LEFT$(op$(num%), i% - 1)) op$(num%) = op$(num%) + SPACE$(length% - LEN(op$(num%)) - LEN(opval$) - 2) op$(num%) = op$(num%) + "(" + opval$ + ")" o$ = "" FOR i% = 1 TO ops% o$ = o$ + op$(i%) IF i% <> ops% THEN o$ = o$ + "`" NEXT i% oplist$ = o$ END SUB SUB UpdateRunFile OPEN runfile$ FOR OUTPUT AS 1 IF videoid$(curvideo%) = "Tandy" THEN v$ = "TDY" ELSEIF videoid$(curvideo%) = "Hercules" THEN v$ = "HERC" ELSE v$ = videoid$(curvideo%) END IF PRINT #1, "@SKID" + v$ + ".EXE"; SELECT CASE cursound% CASE 1: PRINT #1, " /spc /ns" CASE 2: PRINT #1, " /spc" CASE 3: PRINT #1, " /std" CASE 4: PRINT #1, " /sad" CASE 5: PRINT #1, " /ssb" CASE 6: PRINT #1, " /smt" CASE ELSE: PRINT #1, END SELECT CLOSE 1 END SUB