#include "inkey.ch"
#include "box.ch"
#include "dbedit.ch"
#include "achoice.ch"
#define pLAL 220
#define pDOL 261.7
#define pDOL_ 277.2
#define pRE 293.7
#define pMI 329.6
#define pMI_ 335.1
#define pFA 349.2
#define pFA_ 370
#define pSOL 392
#define pSOL_ 415.3
#define pLA 440
#define pLA_ 466.2
#define pSI 493.9
#define pDO1 523.3
#define pDO1_ 558.8
#define pSI1 246.9
#define pDUR_1 1
#define pDUR_2 2
#define pDUR_3 4
//
PROCEDURE MAIN(cRigaDiComando)
LOCAL cSfo := SAVESCREEN()
PRIVATE lCheck := .F.
PRIVATE cProgramDir := DISKNAME()+":"+DIRNAME()
PRIVATE lZipQui := .F.
PRIVATE cNumVer := "VER. 2.0"
CLS
SETCOLOR("W+/B,GR+/RB,,,GR+/B")
SETBLINK(.T.)
SET DELETED ON
SET DATE TO ITALIAN
SETCURSOR(0)
SET SCOREBOARD OFF
SETCANCEL(.T.)
AnalizeCommandLine(cRigaDiComando)
PnSchermo()
CheckForPkUnzip(cSfo)
CheckBaseDati()
StartMenu(cSfo)
DIRCHANGE(cProgramDir)
RESTSCREEN(,,,,cSfo)
Quitting()
RETURN
//
FUNCTION CreaRomNomi(aRes1,aRes2,cMameDir)
LOCAL cDir := DIRNAME()
LOCAL nHandle
LOCAL lCondExit := .F.
LOCAL cStringa
LOCAL nConta := 0
LOCAL nContameno := 0
USE (cProgramDir+"\MAME.DBF") NEW EXCLUSIVE INDEX (cProgramDir+"\MAME.NTX")
USE (cProgramDir+"\ROM.DBF") NEW EXCLUSIVE INDEX (cProgramDir+"\ROM.NTX")
DO WHILE .NOT. mame->(EOF())
IF (mame->TAG == "X") .AND. (DIRCHANGE(cMameDir+"\"+mame->MAMENAME) == 0)
nHandle := FOPEN("README.TXT")
IF !(rom->(DBSEEK(mame->LINKROM)))
nConta++
AADD(aRes1,mame->MAMENAME)
@ 8,33 SAY ALLTRIM(STR(nConta))+" " COLOR ("G+/B")
DO WHILE .NOT. lCondExit
cStringa := LeggiUnaRiga(nHandle)
IF LEN(cStringa) = 0
lCondExit := .T.
ELSE
IF (.NOT. EMPTY(cStringa)) .AND. (.NOT. "Put the" $ cStringa) .AND. (.NOT. "directory" $ cStringa)
cStringa := STRTRAN(cStringa,CHR(13)+CHR(10),"")
rom->(DBAPPEND())
rom->LINKROM := mame->LINKROM
rom->ROMNAMES := UPPER(cStringa)
ENDIF
ENDIF
ENDDO
ENDIF
ELSE
IF rom->(DBSEEK(mame->LINKROM))
nContaMeno++
AADD(aRes2,mame->MAMENAME)
@ 9,35 SAY ALLTRIM(STR(nContaMeno))+" " COLOR ("G+/B")
DO WHILE rom->LINKROM == mame->LINKROM
rom->(DBDELETE())
rom->(DBSKIP())
ENDDO
ENDIF
mame->(DBDELETE())
ENDIF
FCLOSE(nHandle)
DIRCHANGE(cDir)
lCondExit := .F.
mame->(DBSKIP())
ENDDO
mame->(DBCLOSEAREA())
rom->(DBCLOSEAREA())
USE (cProgramDir+"\MAME.DBF") NEW EXCLUSIVE INDEX (cProgramDir+"\MAME.NTX")
PACK
mame->(DBCLOSEAREA())
USE (cProgramDir+"\ROM.DBF") NEW EXCLUSIVE INDEX (cProgramDir+"\ROM.NTX")
PACK
rom->(DBCLOSEAREA())
RETURN
//
FUNCTION ScegliDir(ny,nx,lDaAltro,nSel)
LOCAL cDir := DISKNAME()+":"+DIRNAME()
LOCAL aSfo
LOCAL aSf1
LOCAL lCondExit := .F.
LOCAL nSelezione := 1
LOCAL cTmp
LOCAL lQuit
PRIVATE lSelezionata := .F.
PRIVATE lAltroDa
PRIVATE aDire
IF VALTYPE(nSel) != "U"
nSelezione := nSel
ENDIF
IF VALTYPE(lDaAltro) = "U"
lDaAltro := .F.
ENDIF
lAltroDa := lDaAltro
IF VALTYPE(ny) = "U"
ny := 6
ENDIF
IF VALTYPE(nx) = "U"
nx := 20
ENDIF
aSf1 := ApriShWin(19,1,1,77,"W+/B")
Centra(19," Current directory ","G+/B")
@ 20,3 SAY cDir COLOR ("W+/B")
@ 21,10 SAY " " COLOR ("W+/B")
@ NIL,NIL SAY " F2 " COLOR ("W+/BG")
IF !lDaAltro
@ NIL,NIL SAY " Select directory " COLOR ("BG+/B")
ELSE
@ NIL,NIL SAY " Select Zip File " COLOR ("BG+/B")
ENDIF
@ NIL,NIL SAY " " COLOR ("W+/B")
@ NIL,NIL SAY " ENTER " COLOR ("W+/BG")
@ NIL,NIL SAY " Change directory " COLOR ("BG+/B")
@ NIL,NIL SAY " " COLOR ("W+/B")
@ NIL,NIL SAY " ESC " COLOR ("W+/BG")
@ NIL,NIL SAY " Abort " COLOR ("BG+/B")
DO WHILE .NOT. lCondExit
aSfo := ApriShWin(ny,nx,9,40,"W+/B")
Centra(ny," Select ROMS directory ","G+/B")
IF lDaAltro
@ 16,30 SAY " " COLOR ("W+/B")
@ NIL,NIL SAY " F4 " COLOR ("W+/BG")
@ NIL,NIL SAY " View zip file " COLOR ("BG+/B")
ENDIF
IF !lDaAltro
aDire := LeggiDirCorrente(.F.)
ELSE
aDire := LeggiDirCorrente(.F.,"*.zip")
ENDIF
nSelezione := ACHOICE(ny+1,nx+2,ny+9,nx+40-1,aDire,,"aChoDir",nSelezione)
IF nSelezione > 0
IF ("
" $ aDire[nSelezione]) .OR. (lSelezionata)
IF !lSelezionata
cTmp := ALLTRIM(STRTRAN(aDire[nSelezione],"",""))
DIRCHANGE(cTmp)
cDir := DISKNAME()+":"+DIRNAME()
@ 20,3 SAY SPACE(70)
@ 20,3 SAY cDir COLOR ("W+/B")
nSelezione := 1
ELSE
lCondExit := .T.
lQuit := .F.
ENDIF
ELSE
lSelezionata := .F.
ENDIF
ELSE
lCondExit := .T.
lQuit := .T.
ENDIF
ChiudiShWin(aSfo)
ENDDO
IF !lDaAltro
IF LASTKEY() != K_ESC
mameman->ROMDIR := cDir
ENDIF
ELSE
IF LASTKEY() != K_ESC
cQualeFile := aDire[nSelezione]
ELSE
cQualeFile := "DUMMY"
ENDIF
nSele := nSelezione
ENDIF
ChiudiShWin(aSf1)
RETURN lQuit
//
FUNCTION Identifica(a1,a2)
LOCAL cRomDir
LOCAL aCurrentRom := {}
LOCAL nLink
LOCAL aSfo
LOCAL aSf1
LOCAL nRomAn := 0
LOCAL cTotRom
LOCAL n := 0
PRIVATE nRomFound := 0
USE (cProgramDir+"\MAMEMAN.DBF") NEW
cRomDir := ALLTRIM(mameman->ROMDIR)
mameman->(DBCLOSEAREA())
DIRCHANGE(cRomDir)
USE (cProgramDir+"\MAME.DBF") NEW EXCLUSIVE INDEX (cProgramDir+"\MAME.NTX")
DO WHILE .NOT. mame->(EOF())
IF EMPTY(mame->WHATROM)
n++
ENDIF
mame->(DBSKIP())
ENDDO
mame->(DBGOTOP())
cTotRom := ALLTRIM(STR(n))
USE (cProgramDir+"\ROM.DBF") NEW EXCLUSIVE INDEX (cProgramDir+"\ROM.NTX")
aSf1 := ApriShWin(19,26,1,30,"W+/B")
@ 20,28 SAY "Search method : " COLOR ("W+/B")
aSfo := APriShWin(6,10,3,60,"W+/B")
DO WHILE .NOT. mame->(EOF())
IF EMPTY(mame->WHATROM)
@ 7,14 SAY SPACE(55) COLOR ("W+/B")
@ 7,14 SAY "Current rom-set : " COLOR ("W+/B")
@ NIL,NIL SAY "'"+ALLTRIM(mame->MAMENAME)+"'" COLOR ("G+/B")
@ 8,14 SAY "Rom scanned : " COLOR ("W+/B")
@ NIL,NIL SAY ALLTRIM(STR(nRomAn))+" / "+cTotRom+" " COLOR ("G+/B")
@ 9,14 SAY "Matching Rom found : " COLOR ("W+/B")
@ NIL,NIL SAY ALLTRIM(STR(nRomFound)) COLOR ("G+/B")
rom->(DBSEEK(mame->LINKROM))
nLink := rom->LINKROM
DO WHILE nLink = rom->LINKROM
AADD(aCurrentRom,rom->ROMNAMES)
rom->(DBSKIP())
ENDDO
IF !FastCercaRom(aCurrentRom,mame->MAMENAME)
IF !MenoFastCercaRom(aCurrentRom,mame->MAMENAME)
IF !CercaRom(aCurrentRom,mame->MAMENAME)
AADD(a2,mame->MAMENAME)
ELSE
AADD(a1,mame->MAMENAME)
ENDIF
ELSE
AADD(a1,mame->MAMENAME)
ENDIF
ELSE
AADD(a1,mame->MAMENAME)
ENDIF
nRomAn++
ENDIF
aCurrentRom := {}
mame->(DBSKIP())
ENDDO
@ 8,14 SAY "Rom scanned : " COLOR ("W+/B")
@ NIL,NIL SAY ALLTRIM(STR(nRomAn))+" / "+cTotRom+" " COLOR ("G+/B")
@ 9,14 SAY "Matching Rom found : " COLOR ("W+/B")
@ NIL,NIL SAY ALLTRIM(STR(nRomFound)) COLOR ("G+/B")
ChiudiShWin(aSf1)
mame->(DBCLOSEAREA())
rom->(DBCLOSEAREA())
RETURN aSfo
//
FUNCTION CercaRom(aRom,cNome)
LOCAL lTrovata := .F.
LOCAL aDir := DIRECTORY("*.ZIP")
LOCAL aDir1 := {}
LOCAL x := 1
LOCAL nHandle
LOCAL lCondExit := .F.
LOCAL aRomCorrente := {}
LOCAL aSf1
LOCAL nRecTot
LOCAL cIniziale := LEFT(cNome,1)
@ 20,44 SAY "< Slowest >" COLOR ("R+/B")
Centra(24,"ў Pressing ESC will skip the current ROM search ў","*BG+/B")
FOR x := 1 TO LEN(aDir)
AADD(aDir1,aDir[x][1])
NEXT
ASORT(aDir1)
aDir1 := TogliElementi(aDir1,cIniziale)
nRecTot := LEN(aDir1)
INKEY()
IF nRecTot > 0
aSf1 := PnBarraStato(13,15,40,,,"Searching for ROM in zip files ...")
x := 1
DO WHILE (.NOT. lCondExit) .AND. (.NOT. lTrovata)
IF lZipQui
SWPRUNCMD(cProgramDir+"\PKUNZIP -@listfile "+ALLTRIM(aDir1[x])+" > NUL")
ELSE
SWPRUNCMD("PKUNZIP -@listfile "+ALLTRIM(aDir1[x])+" > NUL")
ENDIF
nHandle := FOPEN("listfile")
aRomCorrente := RiempiRomCorrente(nHandle)
lTrovata := RomGiusta(aRom,aRomCorrente)
IF lTrovata
nRomFound++
mame->WHATROM := DISKNAME()+":"+DIRNAME()+"\"+aDir1[x]
@ 15,21 SAY "лллллллллллллллллллллллллллллллллллллллл" COLOR ("G+/B")
INKEY (0.3)
ENDIF
FCLOSE(nHandle)
FERASE("listfile")
aRomCorrente := {}
IF x = nRecTot
lCondExit := .T.
ENDIF
IF .NOT. lTrovata
PnBarraStato(13,15,40,x,nRecTot)
ENDIF
x++
IF NEXTKEY() = K_ESC
INKEY()
PNDanger("; Warning! Rom skipped! ;",1)
EXIT
ENDIF
ENDDO
ChiudiShWin(aSf1)
ENDIF
RETURN lTrovata
//
FUNCTION FastCercaRom(aRom,cNome,lDaAltro)
LOCAL lTrovata := .F.
LOCAL aRomCorrente := {}
LOCAL nHandle
IF VALTYPE(lDaAlTro) = "U"
lDaAltro := .F.
ENDIF
IF .NOT. lDaAltro
@ 20,44 SAY "< Fast > " COLOR ("G+/B")
@ 24,0 SAY SPACE(80) COLOR ("GR+/B")
ENDIF
IF FILE(ALLTRIM(cNome)+".ZIP")
IF lZipQui
SWPRUNCMD(cProgramDir+"\PKUNZIP -@listfile "+ALLTRIM(cNome)+".ZIP > NUL")
ELSE
SWPRUNCMD("PKUNZIP -@listfile "+ALLTRIM(cNome)+".ZIP > NUL")
ENDIF
nHandle := FOPEN("listfile")
aRomCorrente := RiempiRomCorrente(nHandle)
lTrovata := RomGiusta(aRom,aRomCorrente,lDaAltro)
IF lTrovata
IF .NOT. lDaAltro
nRomFound++
mame->WHATROM := DISKNAME()+":"+DIRNAME()+"\"+ALLTRIM(cNome)+".ZIP"
ENDIF
ENDIF
FCLOSE(nHandle)
FERASE("listfile")
ENDIF
RETURN lTrovata
//
FUNCTION MenoFastCercaRom(aRom,cNome)
LOCAL cIniziale
LOCAL lTrovata := .F.
LOCAL aDir := {}
LOCAL aDir1 := {}
LOCAL x := 1
LOCAL nHandle
LOCAL lCondExit := .F.
LOCAL aRomCorrente := {}
LOCAL nRecTot
LOCAL aSf1
LOCAL lCondVai := .F.
@ 20,44 SAY "< Medium > " COLOR ("GR+/B")
@ 24,0 SAY SPACE(80) COLOR ("GR+/B")
cIniziale := LEFT(cNome,1)
aDir := DIRECTORY(cIniziale+"*.ZIP")
FOR x := 1 TO LEN(aDir)
AADD(aDir1,aDir[x][1])
NEXT
ASORT(aDir1)
nRecTot := LEN(aDir)
x := 1
IF nRecTot > 0
aSf1 := PnBarraStato(13,15,40,,,"Searching for ROM in zip files ...")
DO WHILE (.NOT. lCondExit) .AND. (.NOT. lTrovata)
IF lZipQui
SWPRUNCMD(cProgramDir+"\PKUNZIP -@listfile "+ALLTRIM(aDir1[x])+" > NUL")
ELSE
SWPRUNCMD("PKUNZIP -@listfile "+ALLTRIM(aDir1[x])+" > NUL")
ENDIF
nHandle := FOPEN("listfile")
aRomCorrente := RiempiRomCorrente(nHandle)
lTrovata := RomGiusta(aRom,aRomCorrente)
IF lTrovata
nRomFound++
mame->WHATROM := DISKNAME()+":"+DIRNAME()+"\"+aDir1[x]
@ 15,21 SAY "лллллллллллллллллллллллллллллллллллллллл" COLOR ("G+/B")
INKEY (0.3)
ENDIF
FCLOSE(nHandle)
FERASE("listfile")
aRomCorrente := {}
IF x = nRecTot
lCondExit := .T.
ENDIF
IF .NOT. lTrovata
PnBarraStato(13,15,40,x,nRecTot)
ENDIF
x++
ENDDO
ChiudiShWin(aSf1)
ENDIF
RETURN lTrovata
//
FUNCTION RiempiRomCorrente(nHandle)
LOCAL aRomCorrente := {}
LOCAL lCondExit := .F.
LOCAL cStringa
DO WHILE .NOT. lCondExit
cStringa := LeggiUnaRiga(nHandle)
IF EMPTY(cStringa)
lCondExit := .T.
ELSE
cStringa := UPPER(STRTRAN(cStringa,CHR(13)+CHR(10),""))
AADD(aRomCorrente,cStringa)
ENDIF
ENDDO
RETURN aRomCorrente
//
FUNCTION RomGiusta(aRom,aRomCur)
LOCAL lGiusta := .T.
LOCAL cStringone := ""
LOCAL x
LOCAL lCondExit := .F.
FOR x := 1 TO LEN(aRomCur)
cStringone := cStringone+" "+aRomCur[x]
NEXT
x := 1
DO WHILE .NOT. lCondExit
IF !(ALLTRIM(aRom[x]) $ cStringone)
lCondExit := .T.
lGiusta := .F.
ENDIF
IF x = LEN(aRom)
lCondExit := .T.
ENDIF
x ++
ENDDO
RETURN lGiusta
//
FUNCTION Espandi(lTutte,aQuali,cMameDir)
LOCAL cRomDir
LOCAL nLink
LOCAL aSf1
LOCAL aSfo
LOCAL x := 0
LOCAL nTotROm
USE (cProgramDir+"\MAME.DBF") NEW EXCLUSIVE INDEX (cProgramDir+"\MAME.NTX")
USE (cProgramDir+"\ROM.DBF") NEW EXCLUSIVE INDEX (cProgramDir+"\ROM.NTX")
USE (cProgramDir+"\MAMEMAN.DBF") NEW
cRomDir := ALLTRIM(mameman->ROMDIR)
mameman->(DBCLOSEAREA())
IF lTutte
aQuali := {}
DO WHILE .NOT. mame->(EOF())
IF .NOT. EMPTY(mame->WHATROM)
AADD(aQuali,mame->MAMENAME)
ENDIF
mame->(DBSKIP())
ENDDO
ENDIF
nTotRom := LEN(aQuali)
IF nTotRom > 0
aSfo := APriShWin(6,10,3,60,"W+/B")
@ 7,14 SAY "Expanding GAMES-ROMS" COLOR ("*G+/B")
@ 8,14 SAY "Current game : " COLOR ("W+/B")
@ 8,30 SAY " " COLOR ("G+/B")
aSf1 := PnBarraStato(13,15,40,,,"Expandig ROMS-SETS ...")
DO WHILE .NOT. (x = LEN(aQuali))
x ++
PnBarraStato(13,15,40,x,nTotRom)
mame->(DBSEEK(ALLTRIM(aQuali[x])))
IF ALLTRIM(aQuali[x]) == "PACMAN"
PAcMAn()
PNDanger(";Hey!;I'm going to expand pacman!;",6)
ENDIF
@ 8,30 SAY "'"+ALLTRIM(mame->MAMENAME)+"'"+SPACE(20) COLOR ("G+/B")
IF lZipQui
SWPRUNCMD(cProgramDir+"\PKUNZIP -o "+ALLTRIM(mame->WHATROM)+" "+cMameDir+"\"+ALLTRIM(mame->MAMENAME)+" -xreadme.txt >NUL")
ELSE
SWPRUNCMD("PKUNZIP -o "+ALLTRIM(mame->WHATROM)+" "+cMameDir+"\"+ALLTRIM(mame->MAMENAME)+" -xreadme.txt >NUL")
ENDIF
ENDDO
@ 15,21 SAY "лллллллллллллллллллллллллллллллллллллллл" COLOR ("G+/B")
INKEY(1)
mame->(DBCLOSEAREA())
rom->(DBCLOSEAREA())
ENDIF
RETURN
//
FUNCTION CercaMame()
LOCAL aSfo
LOCAL nHandle
LOCAL aPossibilita := {}
LOCAL lCondExit := .F.
LOCAL x
LOCAL nScelta
LOCAL cPath := ""
LOCAL cTmp
aSfo := BoxBlinking("Searching for MAME.EXE ! Please wait !","*W+/B")
SWPRUNCMD("dir "+DISKNAME()+":\MAME.EXE /s /b > tmpRil.txt")
nHandle := FOPEN("tmpRil.txt")
DO WHILE .NOT. lCondExit
cRiga := LeggiUnaRiga(nHandle)
IF EMPTY(cRiga)
lCondExit := .T.
ELSE
AADD(aPossibilita,cRiga)
ENDIF
ENDDO
FCLOSE(nHandle)
FERASE("tmpRil.txt")
ChiudiShWin(aSfo)
IF LEN(aPossibilita) = 0
PNDanger(";Warning!;The MAME.EXE is not present on your hard-disk;It's impossible for me to go on!;")
cPath := ""
ELSE
FOR x := 1 TO LEN(aPossibilita)
aPossibilita[x] := STRTRAN(aPossibilita[x],CHR(13)+CHR(10),"")
cTmp := aPossibilita[x]
aPossibilita[x] := cTmp+SPACE(55-LEN(cTmp))+DTOC(FILEDATE(ALLTRIM(aPossibilita[x])))
NEXT
aSfo := ApriShWin(14,5,4,70,"W+/B")
Centra(14," Select one matching file (Warning : the date is DD/MM/YY) ","G+/B")
nScelta := ACHOICE(15,6,18,74,aPossibilita,,"aChoDummy")
IF LASTKEY() != K_ESC
cPath := ALLTRIM(aPossibilita[nScelta])
cPath := STRTRAN(cPath," ","")
cPath := STRTRAN(cPath,"MAME.EXE","")
cPath := LEFT(cPath,LEN(cPath)-9)
ELSE
cPath := ""
ENDIF
ChiudiShWin(aSfo)
ENDIF
RETURN cPath
//
FUNCTION TogliElementi(aDir,cIn)
LOCAL x
LOCAL aDest := {}
FOR x := 1 TO LEN(aDir)
IF !(LEFT(aDir[x],1) == cIn)
AADD(aDest,aDir[x])
ENDIF
NEXT
RETURN aDest
//
FUNCTION Statis(aResult,aRes1,aRes2,cMsg,nQuale)
LOCAL x
LOCAL aSf1
LOCAL aSce := {.F.}
IF LEN(aRes1) = 0
AADD(aResult,"none")
AADD(aSce,.T.)
ELSE
FOR x := 1 TO LEN(aRes1)
AADD(aResult,aRes1[x])
AADD(aSce,.T.)
NEXT
ENDIF
AADD(aResult,cMsg)
AADD(aSce,.F.)
IF LEN(aRes2) = 0
AADD(aResult,"none")
AADD(aSce,.T.)
ELSE
FOR x := 1 TO LEN(aRes2)
AADD(aResult,aRes2[x])
AADD(aSce,.T.)
NEXT
ENDIF
IF nQuale = 1
@ 7,14 SAY "Searching for GAMES supported by this version of MAME" COLOR ("G+/B")
ELSE
@ 7,14 SAY "Current rom-set : " COLOR ("W+/B")
@ NIL,NIL SAY " ALL-DONE ! " COLOR ("G+/B")
@ 24,0 SAY SPACE(80) COLOR ("GR+/B")
ENDIF
aSf1 := ApriShWin(13,20,7,40,"W+/B")
Centra(13," Result of the search ","G+/B")
ACHOICE(13+1,20+2,13+7,20+40-2,aResult,aSce,"aChoDummy")
ChiudiShWin(aSf1)
RETURN
//
FUNCTION Anal(cRiga)
LOCAL lQualcosa := .F.
IF "CREABAT" $ UPPER(cRiga)
lQualCosa := .T.
CreaBat()
ENDIF
IF .NOT. lQualcosa
SETCOLOR("W/N")
? "- MAMEMAN "+cNumVer+" - by Paolo Nicoletti (p.nicoletti@radiostudio.it)"
?
? "USAGE"
? "-----"
?
? "MAMEMAN [-]"
?
? "Option :"
? "--------"
?
? " creabat : will create a .bat file for every mame-games"
? " in the mame directory"
?
? "For now only this option is available ! More to come !"
?
QUIT
ENDIF
RETURN
//
FUNCTION CreaBat()
LOCAL nHandle
LOCAL cMameDir
LOCAL cParam
PRIVATE aSettings
IF FILE(cProgramDir+"\MAME.DBF") .AND. FILE(cProgramDir+"\MAMEMAN.DBF")
USE (cProgramDir+"\MAME.DBF") NEW INDEX (cProgramDir+"\MAME.NTX")
USE (cProgramDir+"\MAMEMAN.DBF") NEW
cMameDir := ALLTRIM(mameman->MAMEDIR)
mameman->(DBCLOSEAREA())
SETCOLOR("W/N")
? "- MAMEMAN "+cNumVer+" - by Paolo Nicoletti (p.nicoletti@radiostudio.it)"
?
? " Creating batch files ... "
DO WHILE .NOT. mame->(EOF())
IF .NOT. EMPTY(mame->WHATROM)
cParam := mame->SETTINGS
ElabSetting(cParam)
cLinea := CreaCmdLine()
nHandle := FCREATE(cMameDir+"\"+ALLTRIM(mame->MAMENAME+".BAT"))
FWRITE(nHandle,cLinea)
FCLOSE(nHandle)
ENDIF
mame->(DBSKIP())
ENDDO
? " Done !"
?
mame->(DBCLOSEAREA())
ELSE
SETCOLOR("W/N")
? "- MAMEMAN "+cNumVer+" - by Paolo Nicoletti (p.nicoletti@radiostudio.it)"
?
? "Fatality !"
? "You must run MAMEMAN without parameters first so I can find "
? "the games supported !"
?
ENDIF
QUIT
RETURN
//
FUNCTION Quitting()
SETCOLOR("W/N")
CLS
? "- MAMEMAN "+cNumVer+" - by Paolo Nicoletti (p.nicoletti@radiostudio.it)"
?
? "If you have any comments, suggestion, improvements, insults or other"
? "please let me know!!!"
?
?
RETURN
//
FUNCTION PrendiNo()
LOCAL cMameDIr
LOCAL nHandle
LOCAL lCondExit := .F.
LOCAL cRiga
LOCAL cStringa
LOCAL lIniziaAnalisi := .F.
LOCAL n := 0
LOCAL aSfo
aSfo := BoxBlinking("Searching for new games into the file README.TXT !","*W+/B")
USE (cProgramDir+"\MAME.DBF") NEW EXCLUSIVE INDEX (cProgramDir+"\MAME.NTX")
USE (cProgramDir+"\MAMEMAN.DBF") NEW
n := mameman->NROMSUP
cMameDir := ALLTRIM(mameman->MAMEDIR)
nHandle := FOPEN(cMameDir+"\README.TXT")
IF FERROR() = 0
DO WHILE .NOT. lCondExit
cRiga := LeggiUnaRiga(nHandle)
IF '"pacman"' $ cRiga // Identifica la prima riga
lIniziaAnalisi := .T.
ENDIF
IF lIniziaAnalisi
IF '("' $ cRiga
cStringa := SUBSTR(cRiga,AT('("',cRiga)+2,13)
cStringa := UPPER(LEFT(cStringa,AT('")',cStringa)-1))
IF !(mame->(DBSEEK(cStringa)))
n++
mame->(DBAPPEND())
mame->MAMENAME := cStringa
mame->LINKROM := n
mame->TAG := "X"
ELSE
IF !(ALLTRIM(mame->MAMENAME) == cStringa)
n++
mame->(DBAPPEND())
mame->MAMENAME := cStringa
mame->LINKROM := n
mame->TAG := "X"
ELSE
mame->TAG := "X"
ENDIF
ENDIF
ENDIF
ENDIF
IF LEN(cRiga) = 0
lCondExit := .T.
ENDIF
ENDDO
ELSE
PNDanger("Warning!;I can't open the file README.TXT in the MAME.EXE directory!;")
ENDIF
mameman->NROMSUP := n
mame->(DBCLOSEAREA())
mameman->(DBCLOSEAREA())
ChiudiShWin(aSfo)
RETURN
//
FUNCTION CreaReadMe()
LOCAL cMameDIr
LOCAL nHandle
LOCAL lCondExit := .F.
LOCAL cRiga
LOCAL cStringa
LOCAL aSfo
LOCAL aSf1
LOCAL x := 0
LOCAL cReadMe := "Put the files :"+CHR(13)+CHR(10)+CHR(13)+CHR(10)
LOCAL lIniziaAnalisi := .F.
LOCAL nTotRom
LOCAL cSh
LOCAL nx
LOCAL ny
LOCAL lNonSupportato := .F.
aSfo := APriShWin(6,10,3,60,"W+/B")
@ 7,14 SAY SPACE(55) COLOR ("W+/B")
@ 7,14 SAY "Searching for GAMES supported by this version of MAME" COLOR ("*G+/B")
@ 8,14 SAY "New games found : " COLOR ("W+/B")
@ 8,33 SAY "0 " COLOR ("G+/B")
@ 9,14 SAY "Old games deleted : " COLOR ("W+/B")
@ 9,35 SAY "0 " COLOR ("G+/B")
USE (cProgramDir+"\MAMEMAN.DBF") NEW
cMameDir := ALLTRIM(mameman->MAMEDIR)
DIRCHANGE(cMameDir)
USE (cProgramDir+"\MAME.DBF") NEW EXCLUSIVE INDEX (cProgramDir+"\MAME.NTX")
nTotRom := mame->(LASTREC())
aSf1 := PnBarraStato(13,15,40,,,"Looking for new games ...")
DO WHILE .NOT. mame->(EOF())
PnBarraStato(13,15,40,x,nTotRom)
x++
IF mame->TAG == "X"
IF (DIRCHANGE(".\"+ALLTRIM(mame->MAMENAME)) == 0)
DIRCHANGE(cMameDir)
ELSE
DIRCHANGE(cMameDir)
aSfo := ApriShWin(19,15,2,51,"W+/B")
Centra(20," A new game has been found ! : '"+ALLTRIM(mame->MAMENAME)+"'","G+/B")
Centra(21," Press ENTER to continue and archive it !","G+/B")
cSch := SAVESCREEN()
ny := ROW()
nx := COL()
SWPRUNCMD("MAME "+LOWER(ALLTRIM(mame->MAMENAME))+" > tmprom")
SETCURSOR(ny,nx)
RESTSCREEN(,,,,cSch)
ChiuDiShWin(aSfo)
nHandle := FOPEN("tmprom")
cRiga := UPPER(LeggiUnaRiga(nHandle))
IF LEFT(cRiga,4) == "GAME"
lNonSUpportato := .T.
ELSE
DO WHILE .NOT. lCondExit
cRiga := UPPER(LeggiUnaRiga(nHandle))
IF lIniziaAnalisi
IF !("UNABLE" $ cRiga)
cStringa := LEFT(cRiga,AT(" ",cRiga)-1)
cReadMe := cReadMe + cStringa +CHR(13)+CHR(10)
ELSE
cReadMe := cReadMe+CHR(13)+CHR(10)+"in this directory."
ENDIF
ENDIF
IF ("NAME" $ cRiga) .AND. ("SIZE" $ cRiga)
lIniziaAnalisi := .T.
ENDIF
IF LEN(cRIga) = 0
lCOndExit := .T.
ENDIF
ENDDO
ENDIF
lCondExit := .F.
lIniziaAnalisi := .F.
FCLOSE(nHandle)
IF lNonSupportato
lNonSupportato := .F.
ELSE
DIRMAKE(".\"+ALLTRIM(mame->MAMENAME))
nHandle := FCREATE(".\"+ALLTRIM(mame->MAMENAME)+"\README.TXT")
FWRITE(nHandle,cReadMe)
FCLOSE(nHandle)
ENDIF
FERASE("tmprom")
cReadMe := "Put the files :"+CHR(13)+CHR(10)+CHR(13)+CHR(10)
ENDIF
ENDIF
mame->(DBSKIP())
ENDDO
@ 15,21 SAY "лллллллллллллллллллллллллллллллллллллллл" COLOR ("G+/B")
INKEY(1)
ChiudiShWin(aSf1)
DBCLOSEALL()
CLEAR TYPEAHEAD
RETURN
//
FUNCTION Gestione()
LOCAL cScreen := SAVESCREEN()
LOCAL aSf1 := AprishWin(6,1,14,20,("W+/B"))
LOCAL aSf2 := ApriShWIn(6,24,14,54,"W+/B")
PRIVATE aGames := {}
PRIVATE aSettings := {}
PRIVATE lRomAvail := .F.
PRIVATE cRunLine
@ 6,60,21,78 BOX B_DOUBLE
@ 6,60 SAY "Ы"
@ 21,60 SAY "Ъ"
@7 ,26 SAY "ў Current game ў" COLOR ("GR+/B")
@8 ,26 SAY "Name : " COLOR ("W+/B")
@9 ,26 SAY "Status : " COLOR ("W+/B")
@10,26 SAY "ў Settings ў " COLOR ("GR+/B")
@11,26 SAY "-Noscanlines "
@ NIL,NIL SAY "Enable[ ] " COLOR ("G+/B")
@12,26 SAY "-Vesa "
@ NIL,NIL SAY "Enable[ ] " COLOR ("G+/B")
@13,26 SAY "-Vesascan "
@ NIL,NIL SAY "Enable[ ] " COLOR ("G+/B")
@14,26 SAY "-Vesaskip n "
@ NIL,NIL SAY "Enable[ ] [ ]" COLOR ("G+/B")
@15,26 SAY "-Vgafreq n "
@ NIL,NIL SAY "Enable[ ] [ ]" COLOR ("G+/B")
@16,26 SAY "-Vsync "
@ NIL,NIL SAY "Enable[ ] " COLOR ("G+/B")
@17,26 SAY "-Soundcard n "
@ NIL,NIL SAY "Enable[ ] [ ]" COLOR ("G+/B")
@18,26 SAY "-Nojoy "
@ NIL,NIL SAY "Enable[ ] " COLOR ("G+/B")
@19,26 SAY "-Log "
@ NIL,NIL SAY "Enable[ ] " COLOR ("G+/B")
@20,26 SAY "-Frameskip n "
@ NIL,NIL SAY "Enable[ ] [ ]" COLOR ("G+/B")
USE (cProgramDir+"\MAME.DBF") NEW INDEX (cProgramDir+"\MAME.NTX")
DO WHILE .NOT. mame->(EOF())
IF !EMPTY(mame->WHATROM)
AADD(aGames,mame->MAMENAME)
ELSE
AADD(aGames,LOWER(mame->MAMENAME))
ENDIF
mame->(DBSKIP())
ENDDO
muoviti(1)
panelOpt()
nScelta := ACHOICE(7,3,20,19,aGames,,"aChoGes")
RESTSCREEN(,,,,cScreen)
mame->(DBCLOSEAREA())
DBCLOSEALL()
RETURN
//
FUNCTION AchoGes(nMode,nElement,nRiga)
LOCAL nKey := LASTKEY()
PRIVATE nXstart := COL()
PRIVATE nYstart := ROW()
DO CASE
CASE nKey = K_ENTER .AND. nMode = AC_EXCEPT
IF !EMPTY(mame->WHATROM)
Lancialo(cRunLine)
ENDIF
RETURN 2
CASE nKey = K_TAB
IF !EMPTY(mame->WHATROM)
Ailaita(nElement)
Setta()
ENDIF
RETURN 2
CASE nKey = K_F2
Ailaita(nElement)
ManageIt(nElement)
Muoviti(nElement)
RETURN 2
CASE nKey = K_ESC .AND. nMode = AC_EXCEPT
RETURN 0
CASE (nKey = K_DOWN .OR. nKey = K_UP .OR. nKey = K_PGUP .OR. nKey = K_PGDN .OR. nKey = K_CTRL_PGUP .OR. nKey = K_CTRL_PGDN)
Muoviti(nElement)
PanelOpt()
RETURN 2
OTHERWISE
Muoviti(nElement)
PanelOpt()
IF nMode = AC_EXCEPT
RETURN 3
ENDIF
ENDCASE
RETURN 2
//
FUNCTION Ailaita(nEl)
LOCAL cEl := aGames[nEl]
@ ROW(),COL() SAY LEFT(cEl,LEN(cEl)-3) COLOR ("GR+/RB")
RETURN
//
FUNCTION Lancialo(cLinea)
LOCAL cMameDir
LOCAL cScreen := SAVESCREEN()
USE (cProgramDir+"\MAMEMAN.DBF") NEW
cMameDir := ALLTRIM(mameman->MAMEDIR)
mameman->(DBCLOSEAREA())
DIRCHANGE(cMameDir)
IF !("soundcard" $ cLinea)
cLinea := cLinea + " -soundcard 0"
ENDIF
SWPRUNCMD(cLinea+" >nul")
DIRCHANGE(cProgramDir)
RESTSCREEN(,,,,cScreen)
RETURN
//
FUNCTION PanelOpt()
LOCAL aRighe := {}
LOCAL x
FOR x := 1 TO 14
AADD(aRighe,SPACE(17))
NEXT
x := 1
IF !EMPTY(mame->WHATROM)
aRighe[x] := " ENTER "
x++
aRighe[x] :=" Launch "+LEFT(mame->MAMENAME,9)
x++
x++
aRighe[x] :=" TAB "
x++
aRighe[x] :=" Change settings"
x++
x++
ENDIF
aRighe[x] := " F2 "
x++
aRighe[x] :=" Manage game ROM"
x++
x++
aRighe[x] := " ESC "
x++
aRighe[x] :=" Exit "
x++
x++
FOR x := 7 TO 20
@ x,61 SAY SPACE(17)
IF (((x-5) % 3) != 0)
@ x,61 SAY aRighe[x-6] COLOR ("GR+/B")
ELSE
@ x,61 SAY aRighe[x-6] COLOR ("W+/B")
ENDIF
NEXT
RETURN
//
FUNCTION Muoviti(nElement)
LOCAL cSettaggi
IF VALTYPE(nElement) = "N"
mame->(DBSEEK(UPPER(aGames[nElement])))
ENDIF
IF !EMPTY(mame->WHATROM)
lRomAvail := .T.
@ 8,35 SAY mame->MAMENAME COLOR ("BG+/B")
@ 9,35 SAY "Game's Roms available !" COLOR ("BG+/B")
ELSE
lRomAvail := .F.
@ 8,35 SAY mame->MAMENAME COLOR ("R+/B")
@ 9,35 SAY "Game's Roms not found !" COLOR ("R+/B")
ENDIF
cSettaggi := mame->SETTINGS
IF EMPTY(cSettaggi) .OR. (.NOT. lRomAvail)
mame->SETTINGS :=" ў ў ў ў ў ў ў ў ў "
cSettaggi := mame->SETTINGS
ENDIF
ElabSetting(cSettaggi)
@11,49 SAY aSettings[1] COLOR ("GR+/B")
@12,49 SAY aSettings[2] COLOR ("GR+/B")
@13,49 SAY aSettings[3] COLOR ("GR+/B")
@14,49 SAY aSettings[4] COLOR ("GR+/B")
@14,54 SAY aSettings[5] COLOR ("GR+/B")
@15,49 SAY aSettings[6] COLOR ("GR+/B")
@15,54 SAY aSettings[7] COLOR ("GR+/B")
@16,49 SAY aSettings[8] COLOR ("GR+/B")
@17,49 SAY aSettings[9] COLOR ("GR+/B")
@17,54 SAY aSettings[10] COLOR ("GR+/B")
@18,49 SAY aSettings[11] COLOR ("GR+/B")
@19,49 SAY aSettings[12] COLOR ("GR+/B")
@20,49 SAY aSettings[13] COLOR ("GR+/B")
@20,54 SAY aSettings[14] COLOR ("GR+/B")
Slinea()
RETURN
//
FUNCTION Slinea()
cRunLine := CreaCmdLine()
@24,1 SAY SPACE(80)
IF !EMPTY(mame->WHATROM)
IF LEN(cRunLine) > 75
@24,1 SAY LEFT(cRunLine,75)+"..." COLOR ("BG+/B")
ELSE
@24,1 SAY cRunLine COLOR ("BG+/B")
ENDIF
ENDIF
RETURN
//
FUNCTION ElabSetting(cSet)
aSettings := {}
// |1ў1ў1ў1nnў1nў1ў1nў1ў1ў1n|
AADD(aSettings,LEFT(cSet,1))
AADD(aSettings,SUBSTR(cSet,3,1))
AADD(aSettings,SUBSTR(cSet,5,1))
AADD(aSettings,SUBSTR(cSet,7,1))
AADD(aSettings,SUBSTR(cSet,8,2))
AADD(aSettings,SUBSTR(cSet,11,1))
AADD(aSettings,SUBSTR(cSet,12,1))
AADD(aSettings,SUBSTR(cSet,14,1))
AADD(aSettings,SUBSTR(cSet,16,1))
AADD(aSettings,SUBSTR(cSet,17,1))
AADD(aSettings,SUBSTR(cSet,20,1))
AADD(aSettings,SUBSTR(cSet,22,1))
AADD(aSettings,SUBSTR(cSet,24,1))
AADD(aSettings,SUBSTR(cSet,25,1))
RETURN
//
FUNCTION Setta()
@11,49 GET aSettings[1] WHEN Spiega(1) VALID icsalo(1)
@12,49 GET aSettings[2] WHEN Spiega(2) VALID icsalo(2)
@13,49 GET aSettings[3] WHEN Spiega(3) VALID icsalo(3)
@14,49 GET aSettings[4] WHEN Spiega(4) VALID icsalo(4)
@14,54 GET aSettings[5] WHEN Spiega(5) VALID ceccalo(5) PICTURE "99"
@15,49 GET aSettings[6] WHEN Spiega(6) VALID icsalo(6)
@15,54 GET aSettings[7] WHEN Spiega(7) VALID ceccalo(7) PICTURE "9"
@16,49 GET aSettings[8] WHEN Spiega(8) VALID icsalo(8)
@17,49 GET aSettings[9] WHEN Spiega(9) VALID icsalo(9)
@17,54 GET aSettings[10] WHEN Spiega(10) VALID ceccalo(10) PICTURE "9"
@18,49 GET aSettings[11] WHEN Spiega(11) VALID icsalo(11)
@19,49 GET aSettings[12] WHEN Spiega(12) VALID icsalo(12)
@20,49 GET aSettings[13] WHEN Spiega(13) VALID icsalo(13)
@20,54 GET aSettings[14] WHEN Spiega(14) VALID ceccalo(14) PICTURE "9"
SET KEY K_PGDN TO nonFareNiente
SET KEY K_PGUP TO nonFareNiente
SETCURSOR(1)
READ
SETCURSOR(0)
SET KEY K_PGDN TO
SET KEY K_PGUP TO
IF LASTKEY() != K_ESC
MettiSetti()
ENDIF
PanelOpt()
Muoviti()
RETURN
//
FUNCTION MettiSetti
LOCAL cStringa := ""
LOCAL x
FOR x := 1 TO 14
IF x = 9
cStringa := cStringa+aSettings[x]
ELSEIF x = 4
cStringa := cStringa+aSettings[x]
ELSEIF x = 6
cStringa := cStringa+aSettings[x]
ELSEIF x = 13
cStringa := cStringa+aSettings[x]
ELSEIF x = 10
cStringa := cStringa+aSettings[x]+" "+"ў"
ELSE
cStringa := cStringa+aSettings[x]+"ў"
ENDIF
NEXT
mame->SETTINGS := cStringa
RETURN
//
FUNCTION Ceccalo(n)
LOCAL lStatus := .T.
DO CASE
CASE n = 5
CASE n = 7
IF VAL(aSettings[7]) > 3
lStatus := .F.
ENDIF
CASE n = 10
IF VAL(aSettings[10]) > 7
lStatus := .F.
ENDIF
CASE n = 14
IF VAL(aSettings[14]) > 3
lStatus := .F.
ENDIF
ENDCASE
Slinea()
RETURN lStatus
//
FUNCTION icsalo(n)
IF !EMPTY(aSettings[n])
aSettings[n] := "X"
AEVAL(getlist,{|oget|oget:display} )
ENDIF
SLinea()
RETURN .T.
//
FUNCTION Spiega(n)
LOCAL aRighe := {}
LOCAL x
FOR x := 1 TO 14
AADD(aRighe,SPACE(17))
NEXT
DO CASE
CASE n = 1
aRighe[1] = " -noscanlines "
aRighe[2] = " Use alternate "
aRighe[3] = " video mode "
aRighe[4] = " (not available "
aRighe[5] = " in all games). "
aRighe[6] = " Use this if the "
aRighe[7] = " default mode "
aRighe[8] = " doesn't work "
aRighe[9] = "with your monitor"
aRighe[10] = " or video card. "
CASE n = 2
aRighe[1] = " -vesa "
aRighe[2] = " Use standard "
aRighe[3] = " 640x480x256 "
aRighe[4] = "VESA mode instead"
aRighe[5] = " of custom video "
aRighe[6] = "mode. Use this as"
aRighe[7] = "a last resort if "
aRighe[8] = " -noscanlines "
aRighe[9] = " doesn't solve "
aRighe[10] = " your video "
aRighe[11] = " problems. "
CASE n = 3
aRighe[1] = " -vesascan "
aRighe[2] = " Use a VESA "
aRighe[3] = " 800x600 screen "
aRighe[4] = " to simulate "
aRighe[5] = "scanlines.This is"
aRighe[6] = "much slower than "
aRighe[7] = "the other video "
aRighe[8] = " modes. Use this "
aRighe[9] = " if you want "
aRighe[10] = "scanlines and the"
aRighe[11] = " default video "
aRighe[12] = " mode doesn't "
aRighe[13] = " work. "
CASE n = 4 .OR. n = 5
aRighe[1] = " -vesaskip n "
aRighe[2] = " Similar to "
aRighe[3] = "-vesascan but use"
aRighe[4] = "a 640x480 screen."
aRighe[5] = "Since most games "
aRighe[6] = "use a screen over"
aRighe[7] = "240 lines,it will"
aRighe[8] = " not fit in the "
aRighe[9] = "screen.N sets the"
aRighe[10] = "initial number of"
aRighe[11] = "lines to skip at "
aRighe[12] = " the top of the "
aRighe[13] = " screen. "
IF n = 5 .AND. EMPTY(aSettings[4])
aSettings[5] = " "
AEVAL(getlist,{|oget|oget:display} )
RETURN .F.
ENDIF
CASE n = 6 .OR. n = 7
aRighe[1] = " -vgafreq n "
aRighe[2] = "where n can be 0 "
aRighe[3] = "(def.) 1,2 or 3. "
aRighe[4] = " Use different "
aRighe[5] = " frequencies for "
aRighe[6] = "the custom video "
aRighe[7] = "modes.This could "
aRighe[8] = " reduce flicker. "
aRighe[9] = " WARNING! "
aRighe[10] = " SETTING THIS "
aRighe[11] = " OPTION COULD "
aRighe[12] = " DAMAGE YOUR "
aRighe[13] = " MONITOR! USE AT "
aRighe[14] = " YOUR OWN RISK! "
IF n = 7 .AND. EMPTY(aSettings[6])
aSettings[7] = " "
AEVAL(getlist,{|oget|oget:display} )
RETURN .F.
ENDIF
CASE n = 8
aRighe[1] = " -vsync "
aRighe[2] = "Syncronize video "
aRighe[3] = "display with the "
aRighe[4] = " video beam "
aRighe[5] = "instead of using "
aRighe[6] = "the timer. This "
aRighe[7] = " works best with "
aRighe[8] = "-noscanlines and "
aRighe[9] = " the -vesaxxx "
aRighe[10] = " modes. "
CASE n = 9 .OR. n = 10
aRighe[1] = " -soundcard n "
aRighe[2] = "Select sound card"
aRighe[3] = "where n could be "
aRighe[4] = "0 Silence "
aRighe[5] = "1 Sound Blaster "
aRighe[6] = "2 Sound Blaster "
aRighe[7] = " AWE32 "
aRighe[8] = "3 Pro Audio Spec."
aRighe[9] = "4 Ultrasound Max "
aRighe[10] = " (CS4231 Codec) "
aRighe[11] = "5 Ultrasound "
aRighe[12] = "6 Windows Sound "
aRighe[13] = " System "
aRighe[14] = "7 Ensoniq Sounds."
IF n = 10 .AND. EMPTY(aSettings[9])
aSettings[10] = " "
AEVAL(getlist,{|oget|oget:display} )
RETURN .F.
ENDIF
CASE n = 11
aRighe[1] = " -nojoy "
aRighe[2] = " Don't poll "
aRighe[3] = " joystick. "
CASE n = 12
aRighe[1] = " -log "
aRighe[2] = " Create a log of "
aRighe[3] = " illegal memory "
aRighe[4] = " accesses in "
aRighe[5] = " file ERROR.LOG. "
CASE n = 13 .OR. n = 14
aRighe[1] = " -frameskip n "
aRighe[2] = " Skip frames to "
aRighe[3] = " speed up the "
aRighe[4] = " emulation. "
aRighe[5] = " Normally a game "
aRighe[6] = " runs at 60 fps. "
aRighe[7] = " N could be : "
aRighe[8] = " 1 for 30 fps "
aRighe[9] = " 2 for 20 fps "
aRighe[10] = " 3 for 10 fps "
IF n = 14 .AND. EMPTY(aSettings[13])
aSettings[14] = " "
AEVAL(getlist,{|oget|oget:display} )
RETURN .F.
ENDIF
ENDCASE
FOR x := 7 TO 20
IF x = 7
@ x,61 SAY aRighe[x-6] COLOR ("GR+/B")
ELSE
@ x,61 SAY aRighe[x-6]
ENDIF
NEXT
RETURN .T.
//
FUNCTION nonFareNiente
RETURN
//
FUNCTION CreaCmdLine()
LOCAL cLine := "Mame "+LOWER(ALLTRIM(mame->MAMENAME))
IF .NOT. EMPTY(aSettings[1])
cLine := cLine + " -noscanlines"
ENDIF
IF .NOT. EMPTY(aSettings[2])
cLine := cLine + " -vesa"
ENDIF
IF .NOT. EMPTY(aSettings[3])
cLine := cLine + " -vesascan"
ENDIF
IF .NOT. EMPTY(aSettings[4])
cLine := cLine + " -vesaskip "+ALLTRIM(STR(VAL(aSettings[5])))
ENDIF
IF .NOT. EMPTY(aSettings[6])
cLine := cLine + " -vgafreq "+ALLTRIM(STR(VAL(aSettings[7])))
ENDIF
IF .NOT. EMPTY(aSettings[8])
cLine := cLine + " -vsync"
ENDIF
IF .NOT. EMPTY(aSettings[9])
cLine := cLine + " -soundcard "+ALLTRIM(STR(VAL(aSettings[10])))
ENDIF
IF .NOT. EMPTY(aSettings[11])
cLine := cLine + " -nojoy"
ENDIF
IF .NOT. EMPTY(aSettings[12])
cLine := cLine + " -log"
ENDIF
IF .NOT. EMPTY(aSettings[13])
cLine := cLine + " -frameskip "+ALLTRIM(STR(VAL(aSettings[14])))
ENDIF
RETURN ALLTRIM(cLine)
//
FUNCTION LeggiDirCorrente(lSoloDir,cSpec)
LOCAL aDirectory := {}
LOCAL aDir1 := {}
LOCAL aDir2 := {}
LOCAL x
LOCAL cTmp
LOCAL cCurDir := DIRNAME()
IF VALTYPE(cSpec) = "U"
cSpec := "*.*"
ENDIF
IF VALTYPE(lSoloDir) = "U"
lSoloDir := .T.
ENDIF
IF cCurDir == "\"
cCurDir := ""
ENDIF
aDirectory := DIRECTORY(cCurDir+"\"+cSpec,"D")
FOR x := 1 TO LEN(aDirectory)
IF aDirectory[x][2] = 0
cTmp := aDirectory[x][1]
cTmp := cTmp + REPLICATE(" ",32-LEN(cTmp))+""
AADD(aDir1,cTmp)
ELSE
IF !lSoloDir
AADD(aDir2,aDirectory[x][1])
ENDIF
ENDIF
NEXT
IF cSpec == "*.zip"
lSoloDir := .T.
aDirectory := DIRECTORY(cCurDir+"\*.","D")
FOR x := 1 TO LEN(aDirectory)
IF aDirectory[x][2] = 0
cTmp := aDirectory[x][1]
cTmp := cTmp + REPLICATE(" ",32-LEN(cTmp))+""
AADD(aDir1,cTmp)
ELSE
IF !lSoloDir
AADD(aDir2,aDirectory[x][1])
ENDIF
ENDIF
NEXT
ENDIF
ASORT(aDir1)
ASORT(aDir2)
FOR x := 1 TO LEN(aDir2)
AADD(aDir1,aDir2[x])
NEXT
RETURN aDir1
//
FUNCTION AchoDir(nMode,nElement,nRiga)
LOCAL nKey := LASTKEY()
LOCAL nRow := ROW()
LOCAL nCol := COL()
DO CASE
CASE nKey = K_F4 .AND. lAltroDa .AND. nMode = AC_EXCEPT
IF ".ZIP" $ UPPER(aDire[nElement])
Brilla(nRow,nCol,aDire[nElement])
ListaZip(aDire[nElement],nRow,nCol)
ENDIF
RETURN 2
CASE nKey = K_ENTER .AND. nMode = AC_EXCEPT
RETURN 1
CASE nKey = K_ESC .AND. nMode = AC_EXCEPT
RETURN 0
CASE nKey = K_F2 .AND. nMode = AC_EXCEPT
IF !lAltroDa
lSelezionata := .T.
ELSE
IF ".ZIP" $ UPPER(aDire[nElement])
lSelezionata := .T.
ELSE
RETURN 2
ENDIF
ENDIF
RETURN 1
OTHERWISE
IF nMode = AC_EXCEPT
RETURN 3
ENDIF
ENDCASE
RETURN 2
//
FUNCTION ManageIt(nSel)
LOCAL cScreen := SAVESCREEN()
LOCAL aSf2 := ApriShWIn(6,24,14,54,"W+/B")
LOCAL cRom
LOCAL nCosa
PRIVATE aRomNeed := {}
USE (cProgramDir+"\ROM.DBF") NEW INDEX (cProgramDir+"\ROM.NTX")
@7 ,26 SAY "ў Current game ў" COLOR ("GR+/B")
@8 ,26 SAY "Name : " COLOR ("W+/B")
@9 ,26 SAY "Zip : " COLOR ("W+/B")
@10,26 SAY "ў Roms images needed to run the game ў" COLOR ("GR+/B")
IF !EMPTY(mame->WHATROM)
lRomAvail := .T.
@ 8,33 SAY "'"+ALLTRIM(mame->MAMENAME)+"'" COLOR ("BG+/B")
@ 9,33 SAY "'"+LOWER(ALLTRIM(mame->WHATROM))+"'" COLOR ("BG+/B")
ELSE
lRomAvail := .F.
@ 8,33 SAY LEFT(mame->MAMENAME,11) COLOR ("R+/B")
@ 9,33 SAY "Game's Roms not available in any file!" COLOR ("R+/B")
ENDIF
rom->(DBSEEK(mame->LINKROM))
cRom := mame->LINKROM
DO WHILE rom->LINKROM = cRom
AADD(aRomNeed,rom->ROMNAMES)
rom->(DBSKIP())
ENDDO
ASORT(aRomNeed)
StampaRom(aRomNeed)
nCosa := WhatDo()
IF nCosa = 1
ChangeRom(aRomNeed,nSel)
ENDIF
rom->(DBCLOSEAREA())
RESTSCREEN(,,,,cScreen)
RETURN
//
FUNCTION StampaRom(aRomNeed)
LOCAL x
LOCAL yCor := 11
LOCAL xCor := 26
FOR x := 1 TO LEN(aRomNeed)
@ yCor,xCor SAY STR(x,2)+") "
@ NIL,NIL SAY LOWER(ALLTRIM(aRomNeed[x])) COLOR ("G+/B")
yCor++
IF x = 10
yCor := 11
xCor := 43
ENDIF
IF x = 20
yCor := 11
xCor := 60
ENDIF
NEXT
RETURN
//
FUNCTION WhatDo()
LOCAL aSfo := AprishWin(nyStart+1,nxStart+1,2,19,"W+/B")
LOCAL aOpzioni := {}
LOCAL nScelta
IF !EMPTY(mame->WHATROM)
AADD(aOpzioni," Change Roms Set ")
ELSE
AADD(aOpzioni," Search Roms Set ")
ENDIF
AADD(aOpzioni," Abort operation! ")
nScelta := ACHOICE(nyStart+2,nxStart+2,nyStart+3,nxStart+19,aOpzioni,,"aChoDummy")
ChiudiShWin(aSfo)
RETURN nScelta
//
FUNCTION ChangeRom(aRomNeed,nSel)
LOCAL cScreen := SAVESCREEN()
LOCAL c
LOCAL cRomDir := cProgramDir
LOCAL lTrovata := .F.
LOCAL lCondExit := .F.
LOCAL cMameDir
PRIVATE cQualeFile := ""
PRIVATE nSele := 1
PnSchermo()
USE (cProgramDir+"\MAMEMAN.DBF") NEW
IF .NOT. EMPTY(mameman->ROMDIR)
cRomDir := ALLTRIM(mameman->ROMDIR)
ENDIF
cMameDir := ALLTRIM(mameman->MAMEDIR)
mameman->(DBCLOSEAREA())
DIRCHANGE(cRomDir)
DO WHILE .NOT. lCondExit
lCondExit := ScegliDir(,,.T.,nSele)
IF .NOT. lCondExit
IF cQualeFile != "DUMMY"
lTrovata := FastCercaRom(aRomNeed,STRTRAN(UPPER(cQualeFile),".ZIP",""),.T.)
IF lTrovata
IF PNAlert("OKAY!;You've found the roms set needed to run '"+ALLTRIM(mame->MAMENAME)+"'!",{" Archive and expand it! "," Don't do that! "}) = 1
lCondExit := .T.
ENDIF
ELSE
PNAlert("WARNING!;This doesn't seems the correct file containing;the rom needed to run '"+ALLTRIM(mame->MAMENAME)+"'!",{" Sorry! "})
ENDIF
ENDIF
ENDIF
ENDDO
IF lTrovata
cRomDir := DISKNAME()+":"+DIRNAME()
mame->WHATROM := cRomDir+"\"+cQualeFile
aGames[nSel] := UPPER(aGames[nSel])
IF lZipQui
SWPRUNCMD(cProgramDir+"\PKUNZIP -o "+ALLTRIM(mame->WHATROM)+" "+cMameDir+"\"+ALLTRIM(mame->MAMENAME)+" -xreadme.txt >NUL")
ELSE
SWPRUNCMD("PKUNZIP -o "+ALLTRIM(mame->WHATROM)+" "+cMameDir+"\"+ALLTRIM(mame->MAMENAME)+" -xreadme.txt >NUL")
ENDIF
ENDIF
DIRCHANGE(cProgramDir)
RESTSCREEN(,,,,cScreen)
RETURN
//
FUNCTION ListaZip(cZip,nY,nX)
LOCAL nHandle
LOCAL aSfo
LOCAL aRomCorrente := {}
LOCAL nColo
LOCAL nMaxLarg := 0
LOCAL z
LOCAL nLargFin
LOCAL x
LOCAL y
LOCAL cScreen := SAVESCREEN()
IF lZipQui
SWPRUNCMD(cProgramDir+"\PKUNZIP -@listfile "+ALLTRIM(cZip)+" > NUL")
ELSE
SWPRUNCMD("PKUNZIP -@listfile "+ALLTRIM(cZip)+" > NUL")
ENDIF
nHandle := FOPEN("listfile")
aRomCorrente := RiempiRomCorrente(nHandle)
FCLOSE(nHAndle)
nColo := INT(LEN(aRomCorrente)/7)+IIF((LEN(aRomCorrente) % 7) = 0,0,1)
FOR x := 1 TO LEN(aRomCorrente)
IF LEN(aRomCorrente[x]) > nMAxLArg
nMaxLArg := LEN(aRomCorrente[x])
ENDIF
NEXT
nLargFin := (nMaxLArg+5)*nColo+2
aSfo := APriShWin(nY+1,INT((80-nLargFin)/2),7,nLargFin,"W+/B")
x := INT((80-nLargFin)/2) + 1
y := nY+2
FOR z := 1 TO LEN(aRomCorrente)
@ y,x SAY STR(z,2)+") " COLOR("W+/B")
@NIL,NIL SAY LOWER(aRomCorrente[z]) COLOR("G+/B")
y++
IF (z % 7) = 0
x := x + nMaxLArg+5
y := nY+2
ENDIF
NEXT
INKEY(0)
ChiudiShWin(aSfo)
RESTSCREEN(,,,,cScreen)
RETURN
//
FUNCTION Brilla(y,x,cEl)
@ ROW(),COL() SAY cEl+SPACE(38-LEN(cEl)) COLOR ("GR+/RB")
RETURN
//
FUNCTION VerArch()
LOCAL cMameDir
LOCAL cRomDir
LOCAL lTrovato := .F.
LOCAL nLinkRom
LOCAL aSfo
IF PNAlert("Warning!;This function will verify the integrity of the MAMEMAN archives;and will regenerate the indexes needed by the program.;Would you like to continue ?",{" S "," No "}) = 1
aSfo := BoxBlinking("Verifying the integrity of the archives! Please Wait!","*W+/B")
USE (cProgramDir+"\MAME.DBF") NEW
INDEX ON mame->MAMENAME TO (cProgramDir+"\MAME.NTX")
USE (cProgramDir+"\ROM.DBF") NEW
INDEX ON rom->LINKROM TO (cProgramDir+"\ROM.NTX")
USE (cProgramDir+"\MAMEMAN.DBF") NEW
DO WHILE .NOT. mame->(EOF())
IF !(rom->(DBSEEK(mame->LINKROM)))
mame->(DBDELETE())
ENDIF
mame->(DBSKIP())
ENDDO
mame->(DBCLOSEAREA())
USE (cProgramDir+"\MAME.DBF") NEW INDEX (cProgramDir+"\MAME.NTX")
PACK
rom->(DBGOTOP())
DO WHILE .NOT. rom->(EOF())
mame->(DBGOTOP())
nLinkRom := rom->LINKROM
lTrovato := .F.
DO WHILE (.NOT. mame->(EOF())) .AND. (.NOT. lTrovato)
IF mame->LINKROM == rom->LINKROM
lTrovato := .T.
ENDIF
mame->(DBSKIP())
ENDDO
DO WHILE nLinkRom == rom->LINKROM
IF !lTrovato
rom->(DBDELETE())
ENDIF
rom->(DBSKIP())
ENDDO
ENDDO
rom->(DBCLOSEAREA())
USE (cProgramDir+"\ROM.DBF") NEW INDEX (cProgramDir+"\ROM.NTX")
PACK
ChiudiShWIn(aSfo)
ENDIF
DBCLOSEALL()
RETURN
//
FUNCTION PnSchermo()
LOCAL c
c := SETCOLOR("W/N")
@ 0,0,MAXROW(),MAXCOL() BOX "БББББББББББББББ"
SETCOLOR(c)
@ 24,0 SAY SPACE(80) COLOR ("GR+/B")
APriShWin(1,1,1,77,"W+/B")
Centra(2,"MAME MANAGEMENT ROM ў "+cNumVer+" ў","G+/B")
SHOWTIME(2,68,.F.,"BG+/B")
@ 2,4 SAY DATE() COLOR "BG+/B"
RETURN
//
FUNCTION CheckForPkunzip(cSfo)
LOCAL nHAndle
LOCAL c
// Controlla che il PKUNZIP sia disponibile (nel PATH o nella directory corrente)
IF !FILE("PKUNZIP.EXE")
SWPRUNCMD("PKUNZIP -v p.zip > tmp")
nHandle := FOPEN("tmp")
c := UPPER(FREADSTR(nHandle,100))
FCLOSE(nHandle)
FERASE("tmp")
IF !("PKWARE" $ c)
PNAlert("Fatality!;I need PKUNZIP.EXE to be in your PATH or in this directory !",{"I will do that!"})
DIRCHANGE(cProgramDir)
RESTSCREEN(,,,,cSfo)
QUIT
ENDIF
ELSE
lZipQui := .T.
ENDIF
RETURN
//
FUNCTION AnalizeCommandLine(cRigaDiComando)
LOCAL c
// Analizza la linea di comando
IF .NOT. Empty(cRigaDiComando)
Anal(cRigaDiComando)
ELSE
c := SETCOLOR("W/N")
? "- MAMEMAN "+cNumVer+" - by Paolo Nicoletti (p.nicoletti@radiostudio.it)"
SETCOLOR(c)
INKEY(1)
ENDIF
RETURN
//
FUNCTION CheckBaseDati()
LOCAL aStruct := {}
LOCAL aSfo
LOCAL x
LOCAL lFind := .F.
// Controlla che esistano i database se no li crea con i loro indici
IF .NOT. FILE(cProgramDir+"\MAME.DBF") .OR. .NOT. FILE(cProgramDir+"\ROM.DBF") .OR. .NOT. FILE(cProgramDir+"\MAMEMAN.DBF") .OR. .NOT. FILE(cProgramDir+"\ROM.NTX") .OR. .NOT. FILE(cProgramDir+"\MAME.NTX")
AADD(aStruct,{"MAMENAME","C",20,0})
AADD(aStruct,{"LINKROM","N",3,0})
AADD(aStruct,{"WHATROM","C",250,0})
AADD(aStruct,{"TAG","C",1,0})
DBCREATE(cProgramDir+"\MAME.DBF",aStruct)
USE (cProgramDir+"\MAME.DBF") NEW EXCLUSIVE
INDEX ON mame->MAMENAME TO (cProgramDir+"\MAME.NTX")
mame->(DBCLOSEAREA())
aStruct := {}
AADD(aStruct,{"LINKROM","N",3,0})
AADD(aStruct,{"ROMNAMES","C",20,0})
DBCREATE(cProgramDir+"\ROM.DBF",aStruct)
USE (cProgramDir+"\ROM.DBF") NEW EXCLUSIVE
INDEX ON rom->LINKROM TO (cProgramDir+"\ROM.NTX")
rom->(DBCLOSEAREA())
aStruct := {}
AADD(aStruct,{"ROMDIR","C",250,0})
AADD(aStruct,{"MAMEDIR","C",250,0})
AADD(aStruct,{"NROMSUP","N",3,0})
DBCREATE(cProgramDir+"\MAMEMAN.DBF",aStruct)
USE (cProgramDir+"\MAMEMAN.DBF") NEW
mameman->(DBAPPEND())
mameman->(DBCLOSEAREA())
ELSE
lCheck := .T.
ENDIF
// Upgrada il database MAME
USE (cProgramDir+"\MAME.DBF") NEW
aStruct := mame->(DBSTRUCT())
mame->(DBCLOSEAREA())
FOR x := 1 TO LEN(aStruct)
IF aStruct[x][1] = "TAG"
lFind := .T.
EXIT
ENDIF
NEXT
IF !lFind
AADD(aStruct,{"TAG","C",1,0})
DBCREATE(cProgramDir+"\TMPPAO.DBF",aStruct)
USE (cProgramDir+"\TMPPAO.DBF") NEW
APPEND FROM (cProgramDir+"\MAME.DBF")
tmppao->(DBCLOSEAREA())
FERASE(cProgramDir+"\MAME.DBF")
FRENAME(cProgramDir+"\TMPPAO.DBF",cProgramDir+"\MAME.DBF")
USE (cProgramDir+"\MAME.DBF") NEW
INDEX ON mame->MAMENAME TO (cProgramDir+"\MAME.NTX")
mame->(DBCLOSEAREA())
ENDIF
lFind := .F.
USE (cProgramDir+"\MAME.DBF") NEW
aStruct := mame->(DBSTRUCT())
mame->(DBCLOSEAREA())
FOR x := 1 TO LEN(aStruct)
IF aStruct[x][1] = "SETTINGS"
lFind := .T.
EXIT
ENDIF
NEXT
IF !lFind
AADD(aStruct,{"SETTINGS","C",25,0})
DBCREATE(cProgramDir+"\TMPPAO.DBF",aStruct)
USE (cProgramDir+"\TMPPAO.DBF") NEW
APPEND FROM (cProgramDir+"\MAME.DBF")
tmppao->(DBCLOSEAREA())
FERASE(cProgramDir+"\MAME.DBF")
FRENAME(cProgramDir+"\TMPPAO.DBF",cProgramDir+"\MAME.DBF")
USE (cProgramDir+"\MAME.DBF") NEW
INDEX ON mame->MAMENAME TO (cProgramDir+"\MAME.NTX")
mame->(DBCLOSEAREA())
ENDIF
RETURN
//
FUNCTION StartMenu(cSfo)
LOCAL lCondEsci := .F.
LOCAL aMenu := {" Check for new games and roms "," Roms management and front-end section "," Verify the archives "," Return to the operating system "}
LOCAL aSfMen
LOCAL nMenu := 1
LOCAL lVecchio := .F.
DO WHILE .NOT. lCondEsci
Asfmen := ApriShWin(8,20,4,40,"W+/B")
Centra(8," MAMEMAN start menu ","G+/B")
nMenu := ACHOICE(9,21,13,59,aMenu,,"ACHODUMMY",nMenu)
ChiudiShWin(aSfMen)
DO CASE
CASE nMenu = 4 .OR. LASTKEY() = K_ESC .OR. nMenu = 0
IF PNAlert("This will quit the program!",{" Yes, quit! "," No! "}) = 1
lCondEsci := .T.
lVecchio := .F.
ENDIF
CASE nMenu = 1
IF PNAlert("This option will check for new games and new roms;supported by MAME.;Would you like to continue ?",{" Yes "," No "}) = 1
MameOld(cSfo)
ENDIF
CASE nMenu = 2
USE (cProgramDir+"\MAME.DBF") NEW
IF mame->(LASTREC()) = 0
PNalert("Warning!;This option won't be available until you archived;al least one games!;",{" Ok "})
mame->(DBCLOSEAREA())
ELSE
mame->(DBCLOSEAREA())
Gestione()
ENDIF
CASE nMenu = 3
VerArch()
ENDCASE
ENDDO
RETURN
//
FUNCTION MameOld(cSfo)
LOCAL aSfo
LOCAL aRes1 := {}
LOCAL aRes2 := {}
LOCAL aResult := {" NEW GAMES SUPPORTED :"}
LOCAL aId1 := {}
LOCAL aId2 := {}
LOCAL aIdenti := {" GAMES-ROMS FOUND :"}
LOCAL cMameDir
LOCAL cScm := SAVESCREEN()
PRIVATE lNoWarn := .F.
AzzeraTag()
cMameDir := SearchMameExe(cSfo)
PrendiNo()
aSfo := APriShWin(6,10,3,60,"W+/B")
// Crea per ogni nuovo gioco trovato la directory corrispondente e il file README.TXT
CreaReadMe()
// Crea i nomi delle ROM necessarie ad ogni gioco
CreaRomNomi(aRes1,aRes2,cMameDir)
// Visualizza i risultati
Statis(aResult,aRes1,aRes2," OLD GAMES DELETED :",1)
ChiudiShWin(aSfo)
IF SetResult(aRes1)
// Selezione della directory
IF .NOT. WhatDir()
// Cerca nella directory delle ROM i files zip con le rom necessarie ad ogni gioco
aSfo := Identifica(aId1,aId2)
// Visualizza i risultati
Statis(aIdenti,aId1,aId2," GAMES-ROMS NOT FOUND :",2)
ChiudiShWin(aSfo)
// Esplode le rom nelle directory appropriate
IF .NOT. lNoWarn
LetEsplode(aId1,cMameDir)
ELSE
Espandi(.F.,aId1,cMameDir)
PNAlert(" Operation completed ! ",{" Thank you! "})
ENDIF
ENDIF
ENDIF
DIRCHANGE(cProgramDir)
DBCLOSEALL()
RESTSCREEN(,,,,cScm)
RETURN
//
FUNCTION AzzeraTag()
// Azzera i tag
USE (cProgramDir+"\MAME.DBF") NEW INDEX (cProgramDir+"\MAME.NTX")
DO WHILE .NOT. mame->(EOF())
mame->TAG := ""
mame->(DBSKIP())
ENDDO
mame->(DBCLOSEAREA())
RETURN
//
FUNCTION SearchMameExe(cSfo)
LOCAL cMameDir
// Cerca il file MAME.EXE nella directory corrente e se non lo trova lo cerca in tutto l'hard-disk
IF .NOT. FILE("MAME.EXE")
USE (cProgramDir+"\MAMEMAN.DBF") NEW
cMameDir := ALLTRIM(mameman->MAMEDIR)
IF .NOT. FILE(cMameDir+"\MAME.EXE")
cMameDir := CercaMame()
IF EMPTY(cMameDir)
mameman->(DBCLOSEAREA())
DIRCHANGE(cProgramDir)
RESTSCREEN(,,,,cSfo)
QUIT
ELSE
mameman->MAMEDIR := cMameDir
mameman->(DBCLOSEAREA())
ENDIF
ENDIF
ENDIF
RETURN cMameDir
//
FUNCTION SetResult(aRes1)
LOCAL lContinua := .T.
// Analizza i risultati
IF LEN(aRes1) = 0
IF PNAlert("Warning!;"+;
"I haven't found any new games supported by this version of MAME;"+;
"It's possible to continue if you have new ROMS sets to expand!;"+;
"Would you like to continue ?",{" Yes "," No "}) = 1
lContinua := .T.
ELSE
lContinua := .F.
ENDIF
ENDIF
RETURN lContinua
//
FUNCTION WhatDir()
LOCAL lQuit
// Permette di selezionare la directory da cui prendere le ROM zippate
USE (cProgramDir+"\MAMEMAN.DBF") NEW
IF EMPTY(mameman->ROMDIR)
lQuit := ScegliDir()
lNoWarn := .T.
ELSE
IF PNAlert("Warning!;"+;
"Would you like to use this directory : ;"+;
"'"+ALLTRIM(mameman->ROMDIR)+"';"+;
"to seek for new/updated roms ?",{" Yes "," No "}) = 2
lQuit := ScegliDir()
IF LASTKEY() != K_ESC
IF pnAlert("Warning!;"+;
"You have selected a new directory :;"+;
"'"+ALLTRIM(mameman->ROMDIR)+"';"+;
"to seek for new/updateds rom!;"+;
"Must I search for every games (new and old) the rom-set ?;",{" No "," Yes "}) = 2
USE (cProgramDir+"\MAME.DBF") NEW EXCLUSIVE INDEX (cProgramDir+"\MAME.NTX")
DO WHILE .NOT. mame->(EOF())
mame->WHATROM := ""
mame->(DBSKIP())
ENDDO
mame->(DBCLOSEAREA())
ELSE
IF LASTKEY() = K_ESC
lQuit := .T.
ELSE
lQuit := .F.
ENDIF
ENDIF
ELSE
IF LASTKEY() = K_ESC
lQuit := .T.
ELSE
lQuit := .F.
ENDIF
ENDIF
ELSE
IF LASTKEY() = K_ESC
lQuit := .T.
ELSE
lQuit := .F.
ENDIF
ENDIF
ENDIF
mameman->(DBCLOSEAREA())
RETURN lQuit
//
FUNCTION LetEsplode(aId1,cMameDir)
LOCAL lTutte
IF IIF(LEN(aId1)=0,;
PNAlert("Warning!;"+;
"No new roms were found!;"+;
"I can only explode every old roms!;"+;
"Would you like to explode every old roms in my archive ?;",{" No "," Yes "});
,;
PNAlert("Warning!;"+;
"I'm going to explode every new games-roms found!;"+;
"Would you like to explode only the new roms or every;"+;
"roms in my archive ?",{" Only the new roms "," Every roms "})) = 1
lTutte := .F.
ELSE
lTutte := .T.
ENDIF
IF LASTKEY() != K_ESC
Espandi(lTutte,aId1,cMameDir)
PNAlert(" Operation completed ! ",{" Thank you! "})
ENDIF
RETURN
//
//
// LE FUNZIONI CHE SEGUONO SONO FUNZIONI DI 'LIBRERIA'
//
//
FUNCTION PNAlert(cMessaggio,aOpzioni,nStarty,nStartx,lShMes,nSecondi,aColori)
LOCAL nScelta
LOCAL aTmp[25]
LOCAL nPos := 1
LOCAL nPass:= 0
LOCAL nMaxLength := 0
LOCAL nMaxOpz := 0
LOCAL lOpzioni := .T.
LOCAL nLengOpz := 0
LOCAL x
LOCAL nLargWin := 0
LOCAL nLungWin := 0
LOCAL cSchermo
LOCAL nYIn := 0
LOCAL nXIn := 0
LOCAL nYFi := 0
LOCAL nXFi := 0
LOCAL cOldCol
LOCAL nShadowLen
LOCAL cShadow
LOCAL cStrOpz := ""
LOCAL cOldCur
LOCAL nScarto
LOCAL aOpzPos[25]
LOCAL cOldBlink
LOCAL nYOp
LOCAL cSfondMes
LOCAL nMesLen
LOCAL cSfondo
LOCAL cSfondoPul
LOCAL cMioCol
LOCAL CSotto
LOCAL nSottoLen
LOCAL nKey
LOCAL cColSfMes
LOCAL cColSf
LOCAL cColPul
LOCAL lKesc := .F.
LOCAL aIniOp
LOCAL lExitPul := .F.
IF VALTYPE(lShMes) = "U"
lShMes := .F.
ENDIF
IF VALTYPE(nSecondi) = "U"
nSecondi := 3
ENDIF
IF VALTYPE(aOpzioni)="U"
lOpzioni := .F.
ENDIF
IF VALTYPE(aColori)="U"
cColSfMes := "W+/BG"
cColSf := "W+/B"
cColPul := "B/W"
ELSE
IF aColori[1]=NIL
cColSf := "GR+/B"
ELSE
cColSf := aColori[1]
ENDIF
IF aColori[2]=NIL
cColSfMes := "W+/G"
ELSE
cColSfMes := aColori[2]
ENDIF
IF aColori[3]=NIL
cColPul := "G+/W"
ELSE
cColPul := aColori[3]
ENDIF
ENDIF
cOldBlink := SETBLINK(.F.)
cOldCur := SETCURSOR(0)
DO WHILE nPos != 0
nPass++
nPos := AT(";",cMessaggio)
IF nPos != 0
aTmp[nPass] := LEFT(cMessaggio,nPos-1)
cMessaggio := RIGHT(cMessaggio,LEN(cMessaggio)-nPos)
ELSE
aTmp[nPass] := cMessaggio
ENDIF
IF nMaxLength < LEN(aTmp[nPass])
nMaxLength := LEN(aTmp[nPass])
ENDIF
ENDDO
IF lOpzioni
nMaxOpz := LEN(aOpzioni)
aIniOp := ARRAY(nMaxOpz)
FOR x := 1 TO nMaxOpz
nLengOpz := nLengOpz + LEN(aOpzioni[x])
aIniOp[x] := LEFT(aOpzioni[x],1)
NEXT
ENDIF
//a questo punto ho i seguenti dati:
//(1) Un array di nPass elementi che contiene le righe spezzate del testo
//(2) La lunghezza della riga pi lunga storata in nMaxLength
//(3) La Lunghezza di tutte le opzioni e il numero di queste
nLengOpz := nLengOpz + nMaxopz*4 + 2
nMaxLength := nMaxLength + 4 +2 //spazio
nLargWin := IIF(nLengOpz > nMaxLength ,nLengOpz ,nMaxLength)
DO CASE
CASE lOpzioni .AND. lShMes
nLungWin := nPass+9 // OK
CASE (.NOT. lOpzioni) .AND. lShMes
nLungWin := nPass+2
CASE lOpzioni .AND. (.NOT. lShMes)
nLungWin := nPass + 7 // OK
CASE (.NOT. lOpzioni) .AND. (.NOT. lShMes)
nLungWin := nPass + 1 // OK
ENDCASE
//Disegno della finestra
IF VALTYPE(nStartY) = "U"
nYIn := ((MAXROW()-nLungWin)/2)
ELSE
nYIn := nStartY
ENDIF
IF VALTYPE(nStartX) = "U"
nXIn := ((MAXCOL()-nLargWin)/2)
ELSE
nXIn := nStartX
ENDIF
nXFi := nXIn + nLargWin
nYFi := nYIn + nLungWin
cSchermo := SAVESCREEN(nYIn,nXIn,nYFi+1,nXFi+2)
cShadow := SAVESCREEN(nYIn+1,nXIn+2,nYFi+1,nXFi+2)
cOldCol := SETCOLOR(cColSf)
nShadowLen := LEN(cSchermo)
RESTSCREEN( nYIn+1, nXIn+2, nYFi+1, nXFi+2,TRANSFORM(cShadow, REPLICATE("X" + CHR(8), nShadowLen)))
@ nYIn,nXIn CLEAR TO nYFi,nXFi
@ nYIn,nXIn,nYFi,nXFi BOX B_SINGLE
//Visualizzazione messaggi
IF lShMes
cSfondMes := SAVESCREEN(nYIn+2,nXIn+1+1+1,nYIn+1+nPass+IIF(lOpzioni,2,0),nXFI-2 )
nMesLen := LEN(cSfondMes)
RESTSCREEN(nYIn+2,nXIn+1+1+1,nYIn+1+nPass+IIF(lOpzioni,2,0),nXFI-2 ,TRANSFORM(cSfondMes, REPLICATE("X" + CHR(8),nMesLen)))
cMioCol:=SETCOLOR(cColSfMes)
@ nYIn+1,nXIn+1+1 CLEAR TO nYIn+nPass+IIF(lOpzioni,2,0),nXFI-3
SETCOLOR(cMioCol)
ENDIF
FOR x := 1 TO nPass
@ nYIn+x+IIF(lOpzioni,1,0), nxIn + 2+1 SAY aTmp[x] COLOR IIF(lShMes,cColSfMes,cColSf)
NEXT
//Visualizzazione delle opzioni
IF lOpzioni
nYOp := nYIn + nPass + IIF(lShMes,6,4) //TOCCANDO QUESTO SI SPOSTANO LE SCELTE IN VERTICALE
nScarto := (nLargWin-nLengOpz) /2 + 2
FOR x := 1 TO nMaxOpz
cSotto := SAVESCREEN(nYOp-1+1,nXIn + nScarto+1,nYOp+2,nXIn+nScarto+1+LEN(aOpzioni[x])+1)
nSottoLen := LEN(cSotto)
RESTSCREEN( nYOp-1+1, nXIn+nScarto+1,nYOp+2,nXIn+nScarto+1+LEN(aOpzioni[x])+1 , TRANSFORM(cSotto, REPLICATE("X" + CHR(8), nSottoLen)))
@ nYOp-1,nXIn + nScarto SAY SPACE(LEN(aOpzioni[x])+2) COLOR cColPul
@ nYOp, nXIn + nScarto SAY " "+aOpzioni[x]+" " COLOR cColPul
@ nYOp+1,nXIn + nScarto SAY SPACE(LEN(aOpzioni[x])+2) COLOR cColPul
aOpzPos[x]:=nScarto
nScarto:= nScarto +LEN(aOpzioni[x]) + 4
NEXT
ENDIF
IF lOpzioni
cSfondo := SAVESCREEN(nYOp-1,nXIn,nYOp+2,nXFi)
nScelta := 1
@ nYOp-1,nXIn +aOpzPos[nScelta] SAY SPACE(LEN(aOpzioni[nScelta])+2) COLOR cColSfMes
@ nYOp,nXIn +aOpzPos[nScelta] SAY " "+aOpzioni[nScelta]+" " COLOR cColSfMes
@ nYOp+1,nXIn +aOpzPos[nScelta] SAY SPACE(LEN(aOpzioni[nScelta])+2) COLOR cColSfMes
DO WHILE .NOT. lExitPul
nKey:=INKEY(0)
DO CASE
CASE nKey = K_ENTER
lExitPul := .T.
CASE nKey = K_RIGHT
IF nScelta < nMaxOpz
nScelta++
RESTSCREEN(nYOp-1,nXIn,nYOp+2,nXFi,cSfondo)
@ nYOp-1,nXIn +aOpzPos[nScelta] SAY SPACE(LEN(aOpzioni[nScelta])+2) COLOR cColSfMes
@ nYOp,nXIn +aOpzPos[nScelta] SAY " "+aOpzioni[nScelta]+" " COLOR cColSfMes
@ nYOp+1,nXIn +aOpzPos[nScelta] SAY SPACE(LEN(aOpzioni[nScelta])+2) COLOR cColSfMes
ENDIF
CASE nKey = K_LEFT
IF nScelta > 1
nScelta--
RESTSCREEN(nYOp-1,nXIn,nYOp+2,nXFi,cSfondo)
@ nYOp-1,nXIn +aOpzPos[nScelta] SAY SPACE(LEN(aOpzioni[nScelta])+2) COLOR cColSfMes
@ nYOp,nXIn +aOpzPos[nScelta] SAY " "+aOpzioni[nScelta]+" " COLOR cColSfMes
@ nYOp+1,nXIn +aOpzPos[nScelta] SAY SPACE(LEN(aOpzioni[nScelta])+2) COLOR cColSfMes
ENDIF
CASE nKey = K_ESC
lExitPul := .T.
lKesc := .T.
OTHERWISE
FOR x := 1 TO nMaxOpz
IF (nKey = ASC(UPPER(aIniOp[x]))) .OR. (nKey = ASC(LOWER(aIniOp[x])))
nScelta := x
RESTSCREEN(nYOp-1,nXIn,nYOp+2,nXFi,cSfondo)
@ nYOp-1,nXIn +aOpzPos[nScelta] SAY SPACE(LEN(aOpzioni[nScelta])+2) COLOR cColSfMes
@ nYOp,nXIn +aOpzPos[nScelta] SAY " "+aOpzioni[nScelta]+" " COLOR cColSfMes
@ nYOp+1,nXIn +aOpzPos[nScelta] SAY SPACE(LEN(aOpzioni[nScelta])+2) COLOR cColSfMes
lExitPul := .T.
EXIT
ENDIF
NEXT
ENDCASE
ENDDO
IF .NOT. lKesc
cSfondoPul := SAVESCREEN(nYOp-1,nXIn,nYOp+2,nXFi)
@ nYOp-1,nXIn+aOpzPos[nScelta] CLEAR TO nYOp+2,nXIn+aOpzPos[nScelta]+LEN(aOpzioni[nScelta])+2
@ nYOp-1,nXIn +aOpzPos[nScelta] SAY SPACE(LEN(aOpzioni[nScelta])+2) COLOR cColSf
@ nYOp,nXIn+1 +aOpzPos[nScelta] SAY SPACE(LEN(aOpzioni[nScelta])+2) COLOR cColSfMes
@ nYOp+1,nXIn+1 +aOpzPos[nScelta] SAY " "+aOpzioni[nScelta]+" " COLOR cColSfMes
@ nYOp+2,nXIn+1 +aOpzPos[nScelta] SAY SPACE(LEN(aOpzioni[nScelta])+2) COLOR cColSfMes
Inkey(0.3)
RESTSCREEN(nYOp-1,nXIn,nYOp+2,nXFi,cSfondoPul)
Inkey(0.3)
ELSE
nScelta := 0
ENDIF
ENDIF
IF (.NOT. lOpzioni) .AND. (.NOT. lKesc)
INKEY(nSecondi)
ENDIF
SETBLINK(cOldBlink)
SETCURSOR(cOldCur)
SETCOLOR(cOldCol)
RESTSCREEN(nYIn,nXIn,nYFi+1,nXFi+2,cSchermo)
RETURN nScelta
FUNCTION PNDanger(cMessaggio,nSecondi)
IF VALTYPE(nSecondi) = "U"
nSecondi := 10
ENDIF
PNAlert(cMessaggio,,,,.F.,nSecondi,{"GR+/R","W+/R","R/W"})
RETURN
FUNCTION ApriShWin(nY,nX,nAlt,nLar,cColSf,nMode)
LOCAL cSfondo
LOCAL cSfondo1
LOCAL cOldCol
LOCAL nSfondoLen
LOCAL aSfondo[6]
LOCAL nBoxType
IF VALTYPE(nMode) = "U"
nBoxType := B_DOUBLE
ELSE
nBoxType := B_SINGLE
ENDIF
IF VALTYPE(cColSf)="U"
cColSf := "GR+/B"
ENDIF
cSfondo := SAVESCREEN(nY,nX,nY+nAlt+2,nX+nLar+2)
cSfondo1 := SAVESCREEN(nY+1,nX+2,nY+nAlt+2,nX+nLar+2)
cOldCol := SETCOLOR(cColSf)
nSfondoLen := LEN(cSfondo1)
RESTSCREEN(nY+1,nX+2,nY+nAlt+2,nX+nLar+2 ,TRANSFORM(cSfondo1, REPLICATE("X" + CHR(8),nSfondoLen)))
@ nY,nX CLEAR TO nY+nAlt,nX+nLar
@ nY,nX,nY+nAlt+1,nX+nLar BOX nBoxType
aSfondo[1]:=nY
aSfondo[2]:=nX
aSfondo[3]:=nY+nAlt+2
aSfondo[4]:=nX+nLar+2
aSfondo[5]:=cSfondo
aSfondo[6]:=cColSf
SETCOLOR(cOldCol)
RETURN aSfondo
FUNCTION ChiudiShWin(aSfondo,lChiusura)
LOCAL cSchermo
LOCAL x
LOCAL lCondExit := .F.
LOCAL nVar
LOCAL cOldCur
LOCAL y
IF !EMPTY(aSfondo)
cOldCur := SETCURSOR(0)
IF VALTYPE(lChiusura)="U"
lChiusura := .F.
ENDIF
IF lChiusura
nVar := INT((aSfondo[3]-aSfondo[1] )/2) + IIF(((aSfondo[3]-aSfondo[1]) % 2)=0,0,1)+2
x := 1
DO WHILE .NOT. lCondExit
cSchermo := SAVESCREEN(aSfondo[1]+x,aSfondo[2]+x,aSfondo[3]-x,aSfondo[4]-x)
RESTSCREEN(aSfondo[1],aSfondo[2],aSfondo[3],aSfondo[4],aSfondo[5])
RESTSCREEN(aSfondo[1]+x,aSfondo[2]+x,aSfondo[3]-x,aSfondo[4]-x,cSchermo)
@ aSfondo[1]+x,aSfondo[2]+x,aSfondo[3]-x,aSfondo[4]-IIF(x=1,x+1,x) BOX B_DOUBLE COLOR aSfondo[6]
inkey(0.01)
x++
IF x = nVar
lCondExit := .T.
ENDIF
ENDDO
ELSE
RESTSCREEN(aSfondo[1],aSfondo[2],aSfondo[3],aSfondo[4],aSfondo[5])
ENDIF
ENDIF
SETCURSOR(cOldCur)
RETURN
FUNCTION BoxBlinking(cMessaggio,cColSf,ny)
LOCAL aSfondo
LOCAL nSize := LEN(cMessaggio)
LOCAL nStartx := INT((MAXCOL()-nSize)/2)
LOCAL nStarty := (MAXROW()-5)/2
LOCAL cOldBlink := SETBLINK(.T.)
LOCAL cOldCur := SETCURSOR(0)
IF VALTYPE(nY) != "U"
nStarty := ny
ENDIF
IF VALTYPE(cColSf)="U"
cColSf := "*GR+/B"
ENDIF
aSfondo := ApriShWin(nStarty,nStartx-2,3,nSize+3,STRTRAN(cColSf,"*",""))
@ nStarty+2,nStartx SAY cMessaggio COLOR cColSf
SETBLINK(cOldBlink)
SETCURSOR(cOldCur)
RETURN aSfondo
FUNCTION AchoDummy(nMode,nElement,nRiga)
LOCAL nKey := LASTKEY()
DO CASE
CASE nKey = K_ENTER .AND. nMode = AC_EXCEPT
RETURN 1
CASE nKey = K_ESC .AND. nMode = AC_EXCEPT
RETURN 0
OTHERWISE
IF nMode = AC_EXCEPT
RETURN 3
ENDIF
ENDCASE
RETURN 2
FUNCTION PnBarraStato(nY,nX,nBarre,nNumeroParz,nNumeroTot,cTitolo,cColPr,cColBar,cColTit)
LOCAL aSfo
LOCAL nBar := (INT(nBarre/4)*4)
IF VALTYPE(cColPr) = "U"
cColPr := "W+/B,GR+/RB,,,N/W"
ENDIF
IF VALTYPE(cColBar) = "U"
cColBar := "GR+/B"
ENDIF
IF VALTYPE(cColTit) = "U"
cColTit := ("W+/B")
ENDIF
IF VALTYPE(nNumeroParz) = "U"
aSfo := ApriShWin(nY,nX,2,nBar+11,cColPr)
@ nY+1,nX+6 SAY cTitolo COLOR cColTit
@ nY+2,nX+2 SAY " 0% " COLOR cColPr
@ NIL,NIL SAY REPLICATE("А",nBar) COLOR cColPr
@ NIL,NIL SAY " 100%" COLOR cColPr
RETURN aSfo
ELSE
nQuanteNeFillo := INT((nNumeroParz*nBar)/nNumeroTot)
@ nY+2,nX+2+4 SAY REPLICATE("л",nQuanteNeFillo) COLOR cColBar
RETURN
ENDIF
RETURN
FUNCTION Centra(nY,cMes,cColor)
@ nY,(MAXCOL()-LEN(cMes))/2 SAY cMes COLOR IIF(VALTYPE(cColor)="U",SETCOLOR(),cColor)
RETURN
PROCEDURE PacMan()
LOCAL aNota
LOCAL aDurata
LOCAL x
aNota := {pMI,pDO1,pSOL,pMI,pDO1,pSOL,pMI, ;
pFA,pDO1_,pSOL_,pFA,pDO1_,pSOL_,pFA, ;
pMI,pDO1,pSOL,pMI,pDO1,pSOL,pMI, ;
pSOL,pFA_,pSOL,pSOL_,pLA,pLA_,pSI,pDO1 ;
}
aDurata := {pDUR_1,pDUR_1,pDUR_1,pDUR_1,pDUR_1,pDUR_1,pDUR_3, ;
pDUR_1,pDUR_1,pDUR_1,pDUR_1,pDUR_1,pDUR_1,pDUR_3, ;
pDUR_1,pDUR_1,pDUR_1,pDUR_1,pDUR_1,pDUR_1,pDUR_3, ;
pDUR_1,pDUR_1,pDUR_1,pDUR_1,pDUR_1,pDUR_1,pDUR_1,pDUR_1 ;
}
FOR x := 1 TO len(aNota)
tone(aNota[x],aDurata[x])
NEXT
RETURN
FUNCTION LeggiUnaRiga(nHandle)
LOCAL cChar := " "
LOCAL cRiga := ""
LOCAL lCondExit := .F.
LOCAL nLetti := 1
DO WHILE ( .NOT. (CHR(13)+CHR(10) $ cRiga) ) .AND. (.NOT. lCondExit)
nLetti := FREAD(nHandle,@cChar,1)
IF nLetti < 1
lCondExit := .T.
ELSE
cRiga := cRiga+cChar
ENDIF
ENDDO
IF lCondExit
cRiga := ""
ENDIF
RETURN cRiga