#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 [-