Example #1
0
/* Version 1 */
void Parse_Specifics_File_v1(FILE *fp)
{
    char line[1024],*lp;
    FrameSpecList *current, *newf;
    char typ;
    int fnum,snum, bnum, qs, newqs;
    int num_scanned;

    fsl = MakeFslEntry();
    current = fsl;

    while ((fgets(line,1023, fp)) != NULL) {
        lp = &line[0];
        while ((*lp == ' ') || (*lp == '\t')) lp++;
        if (( *lp == '#' ) || (*lp=='\n')) {
            continue;
        }

        switch (my_upper(*lp)) {
        case 'F':
            lp += 6;
            sscanf(lp, "%d %c %d", &fnum, &typ, &qs);
            if (current->framenum != -1) {
                newf=MakeFslEntry();
                current->next = newf;
                current = newf;
            }
            current->framenum = fnum;
            current->frametype = CvtType(typ);
            if (qs <= 0) qs = -1;
            current->qscale = qs;
            break;
        case 'S':
            lp += 6;
            sscanf(lp, "%d %d", &snum, &newqs);
            if (qs == newqs) break;
            qs = newqs;
            AddSlc(current, snum, qs);
            break;
        case 'B':
            lp += 6;
            num_scanned = sscanf(lp, "%d %d", &bnum, &newqs);
            if (qs == newqs) break;
            qs = newqs;
            AddBs(current, bnum, FALSE, qs);
            break;
        case 'V':
            fprintf(stderr, "Cannot specify version twice!  Taking first (%d)\n", version);
            break;
        default:
            fprintf(stderr," What? *%s*\n", line);
            break;
        }
    }

}
Example #2
0
/* Version 2 */
void Parse_Specifics_File_v2(FILE *fp)
{
    char line[1024], *lp;
    FrameSpecList *current, *newf;
    char typ;
    int fnum, snum, bnum, qs, newqs;
    int num_scanned, fx=0, fy=0, sx=0, sy=0;
    char kind[100];
    Block_Specifics *new_blk;
    boolean relative;

    fsl = MakeFslEntry();
    current = fsl;

    while ((fgets(line,1023,fp))!=NULL) {
        lp = &line[0];
        while ((*lp == ' ') || (*lp == '\t')) lp++;
        if (( *lp == '#' ) || (*lp=='\n')) {
            continue;
        }

        switch (my_upper(*lp)) {
        case 'F':
            lp += 6;
            sscanf(lp,"%d %c %d", &fnum, &typ, &qs);
            newf = MakeFslEntry();
            if (current->framenum != -1) {
                current->next = newf;
                current = newf;
            }
            current->framenum = fnum;
            current->frametype = CvtType(typ);
            if (qs <= 0) qs = -1;
            current->qscale = qs;
            break;
        case 'S':
            lp += 6;
            sscanf(lp,"%d %d", &snum, &newqs);
            if (qs == newqs) break;
            qs = newqs;
            AddSlc(current, snum, qs);
            break;
        case 'B':
            lp += 6;
            num_scanned = 0;
            bnum = atoi(lp);
            SkipToSpace(lp);
            while ((*lp != '-') && (*lp != '+') &&
                    ((*lp < '0') || (*lp > '9'))) lp++;
            relative = ((*lp == '-') || (*lp == '+'));
            newqs = atoi(lp);
            SkipToSpace(lp);
            if (EndString(lp)) {
                num_scanned = 2;
            } else {
                num_scanned = 2+sscanf(lp, "%s %d %d %d %d", kind, &fx, &fy, &sx, &sy);
            }

            qs = newqs;
            new_blk = AddBs(current, bnum, relative, qs);
            if (num_scanned > 2) {
                BlockMV *tmp;
                tmp = (BlockMV *) malloc(sizeof(BlockMV));
                switch (num_scanned) {
                case 7:
                    tmp->typ = TYP_BOTH;
                    tmp->fx = fx;
                    tmp->fy = fy;
                    tmp->bx = sx;
                    tmp->by = sy;
                    new_blk->mv = tmp;
                    break;
                case 3:
                    tmp->typ = TYP_SKIP;
                    new_blk->mv = tmp;
                    break;
                case 5:
                    if (my_upper(kind[0]) == 'B') {
                        tmp->typ = TYP_BACK;
                        tmp->bx = fx;
                        tmp->by = fy;
                    } else {
                        tmp->typ = TYP_FORW;
                        tmp->fx = fx;
                        tmp->fy = fy;
                    }
                    new_blk->mv = tmp;
                    break;
                default:
                    fprintf(stderr,
                            "Bug in specifics file!  Skipping short/long entry: %s\n",line);
                    break;
                }
            } else {
                new_blk->mv = (BlockMV *) NULL;
            }

            break;
        case 'V':
            fprintf(stderr,
                    "Cannot specify version twice!  Taking first (%d).\n",
                    version);
            break;
        default:
            printf("What? *%s*\n",line);
            break;
        }
    }

}
Example #3
0
void * listdir(struct OBJ *objCalled,EN_MESSAGE cmd,LONG info,CHAR *str)
{
	#define	 MAX_X 50
	#define	 MAX_Y 30

	static struct WINSCR buf[MAX_Y];
	static struct WS_INFO ws;
	struct WS_DISPEXT *DExt;
//	static TCHAR *PathNow=NULL;

	LONG a;
	LONG pt;

	CHAR *FlagFine;
	static SINT scrhdl=-1;
//	FFBLK file;
	SINT fine=0;
	static CHAR *p,*pmem=NULL;
	CHAR *ptr;
	//CHAR bb[80];
	CHAR serv[MAXPATH];
	CHAR icotype[12];

//	CHAR Bsys.szMouseCursorName[NOMEICONE_SIZE+1]; // Icone corrente del mouse
//	SINT BMS_ax,BMS_ay;

	//-------------------------------------------------

	if (cmd==WS_INF) return &ws;
	switch (cmd) {

	case WS_BUF : //			  			Richiesta buffer

				if (scrhdl==-1) break;
				for (a=0;a<ws.numcam;a++) {
				 pt=a+ws.offset; if (pt>=ws.maxcam) break;
				 buf[(SINT) a].keypt=pmem+((SINT) pt*MAX_X);
				}
				break;

	case WS_DISPLAY : //			  			Richiesta buffer

					DExt=(struct WS_DISPEXT *) str;

					//boxp(DExt->px,DExt->py,DExt->px+5,DExt->py+5,14,SET);
					ptr=pmem+((SINT) info*MAX_X);
					if (!strcmp(ptr,".."))
									strcpy(icotype,"path1");
									else
									{
									if (ws.selez==info) strcpy(icotype,"path2");
																			else strcpy(icotype,"path3");
									}

					ico_disp(DExt->px+1,DExt->py,icotype);

					dispfm_h(DExt->px+20,DExt->py,DExt->col1,DExt->col2,DExt->hdl,ptr);

					break;

	case WS_OFF : //			  			Settaggio offset

				//ws.koffset=ws.offset;
				ws.offset=info;
				break;

	case WS_KEYPRESS :
				if (key_press(9)||key_press2(_FDX)) strcpy(str,"ESC:->");
				if (key_press2(15)||key_press2(_FSX)) strcpy(str,"ESC:<-");
//				if (key_press(9)) strcpy(str,"ESC:->");
//				if (key_press2(15)) strcpy(str,"ESC:<-");
				if (key_press(' ')) strcpy(str,"CR:SPC");
				break;

	case WS_FINDKEY :
	case WS_FIND : //			  						Ricerca la Chiave selezionata

				if (scrhdl==-1) break;

				strupr(str);

				a=ws.selez+1;

				if (memcmp(str,pmem+((SINT) a*MAX_X),strlen(str))==0)
						{listdir(NULL,WS_OFF,a,"");
						 if (ws.offset>(ws.maxcam-ws.numcam))
								 ws.offset=(ws.maxcam-ws.numcam);
						 if (ws.offset<0) ws.offset=0;
						 listdir(NULL,WS_SEL,a,"");
						 break;}

				{

				for(a=0;a<ws.maxcam;a++)
				{

				 if (memcmp(str,pmem+((SINT) a*MAX_X),strlen(str))<=0)
						{listdir(NULL,WS_OFF,a,"");
						 if (ws.offset>(ws.maxcam-ws.numcam))
								{ws.offset=(ws.maxcam-ws.numcam);}
						 if (ws.offset<0) ws.offset=0;
						 listdir(NULL,WS_SEL,a,"");
						 break;}
				 }
				}
				break;

	case WS_SEL : //			  			Settaggio selez

				ws.selez=info;
				break;

	case WS_PTREC : //			  			Restituisce pt alla chiave selezionata

				buf[0].record=ws.selez;
				buf[0].keypt=pmem+((SINT) ws.selez*MAX_X);
				break;


	case WS_REFON : //			  			       Richiesta di refresh schermo

				ws.refre=ON;
				break;

	case WS_REFOFF : //			  											 Schermo rifreshato

				ws.refre=OFF;
				break;

	case WS_OPEN : //														  PREPARA I DATI

				if ((info<4)||(info>MAX_Y))
						{
						ehExit("Errore di assegnazione campi in listfile");
						}

				ws.sizecam=MAX_X;
				ws.numcam=info;// Assegna il numero di campi da visualizzare

	case WS_LOAD :

				if (scrhdl>-1) memoFree(scrhdl,"Cr4");// Libera la memoria

				scrhdl=-1;
				ws.maxcam=0;
				ws.offset=0;
				ws.selez=-1;
				ws.koffset=-1;
				ws.kselez=-1;
				ws.dispext=ON;
				ws.refre=ON;

				if (!*szFolder) break;
				//	Conta i file
				*serv=0;
				//if (*str) strcpy(serv,str);
				strcpy(serv,szFolder); AddBs(serv);
				strcat(serv,"*.");
				strcat(serv,"*"); //strcat(serv,extcur);

				// Cambia il mouse
//				strcpy(Bsys.szMouseCursorName,sys.szMouseCursorName);
//				BMS_ax=MS_ax; BMS_ay=MS_ay;
				mouse_graph(0,0,"CLEX");
				printf("Da fare");
/*
				fine=f_findFirst(serv,&file,FA_DIREC);
				while (!fine)
						{if (file.ff_attrib!=FA_DIREC) goto av2;
						 if (strcmp(file.ff_name,".")) ws.maxcam++;
						 av2:
						 fine=f_findNext(&file);
						}
				f_findClose(&file);
				*/
				// Non ci sono pi— files
				//printf("listdir: %x - %x\n\r",fine,DE_coden);
//				if ((fine)&&(DE_coden==0x12)) {fine=0;}
				//printf("Fine %d",fine);
				if (fine) goto FINEC;

				if (ws.maxcam==0) goto FINEC;//	No file
				scrhdl=memoAlloc(M_HEAP,(LONG) ws.maxcam*MAX_X,"listdir()");
				if (scrhdl<0) ehExit("Memoria insufficiente in listdir");
				pmem=(CHAR *) memoPtr(scrhdl,NULL);

				//	Copia i nomi dei file in memoria
/*
				fine=f_findFirst(serv,&file,FA_DIREC);
				if (fine) {goto FINEC;}
				p=pmem; a=0;
				while (!fine) {
					 if (file.ff_attrib!=FA_DIREC) goto avanti;
					 if (!strcmp(file.ff_name,".")) goto avanti;

					 if (a>ws.maxcam) ehExit("Errore in listdir");
					 strcpy(p,file.ff_name);
					 *p=(BYTE) toupper((SINT) *p);
					 p+=MAX_X;
					 avanti:
					 fine=f_findNext(&file);
				}
				f_findClose(&file);
*/

//				if ((fine)&&(DE_coden==0x12)) {fine=0;}
				if (fine) goto FINEC;

			//	ORDINA I FILE IN MODO ALFABETICO
				sort(pmem,(SINT) ws.maxcam,MAX_X);

				FINEC:
//				mouse_graph(BMS_ax,BMS_ay,Bsys.szMouseCursorName);
				MouseCursorDefault();

				if (fine) {osError(FALSE,GetLastError(),"listdir()");FlagFine=NULL;} else FlagFine=serv;


				return FlagFine; // Ritorna Null se qualcosa Š andato sorto
				//break;

	case WS_CHANGE :

				 //	Legge la directory prescelta
				 //sc=listdir(LEGGI,info);
				 //strcpy(serv,&sc->key[1]);
				 //		Toglie le parentesi quadre
				 strcpy(serv,str);
				 //Adispm(0,0,15,1,ON,SET,serv);

				 //for (a=strlen(serv);(serv[a]!=' ');a--);
				 //serv[a]=0;

				 //				Gestisce il torna indietro
				 if (!strcmp(serv,".."))
					 {//efx2();
						for (a=strlen(szFolder)-2;(szFolder[(SINT) a]!='\\');a--);
						szFolder[(SINT) (a+1)]=0;
						//if (pathcur[a-1]==':') strcat(pathcur,"\\");
						}

				 else {if (szFolder[strlen(szFolder)-1]!='\\') strcat(szFolder,"\\");
							 strcat(szFolder,serv); strcat(szFolder,"\\");}

				 //chdir(pathcur);
//				 listdir(WS_LOAD,0,""); // e le subdirectory
				 //sprintf(serv,"path=%s",pathcur);
				 //Adispm(0,30,15,1,ON,SET,serv);

				 break;


	case WS_CLOSE : //														  LIBERA LA MEMORIA

				if (scrhdl>-1) memoFree(scrhdl,"Cr5");// Libera la memoria
				scrhdl=-1;
				break;

	case WS_REALSET :
			 strcpy(szFolder,str);
			 break;

	//default :

					//efx1();efx1();
	 }
	return &buf;
#undef MAX_X
#undef MAX_Y

}
Example #4
0
//														versione Windows
void * listfile(struct OBJ *objCalled,EN_MESSAGE cmd,LONG info,CHAR *str)
{
	#define	 MAX_X 20
	#define	 MAX_Y 30

	static struct WINSCR buf[MAX_Y];
	static struct WS_INFO ws;
	CHAR *ptr;

	LONG a;
	LONG pt;
	struct WS_DISPEXT *DExt;

	static SINT IptMirror;
	static SINT scrhdl=-1;
	//struct ffblk file;
//	FFBLK Fblk;
	EH_DIR sDir;
	SINT fine=0;
	static CHAR *p,*pmem=NULL;
	static CHAR extcur[4];
	//WORD sgm;
	CHAR serv[255];

	//CHAR Bsys.szMouseCursorName[NOMEICONE_SIZE+1]; // Icone corrente del mouse
	//SINT BMS_ax,BMS_ay;

	//-------------------------------------------------

	if (cmd==WS_INF) return &ws;
	switch (cmd) {

	case WS_BUF : //			  			Richiesta buffer

				if (scrhdl==-1) break;
				for (a=0;a<ws.numcam;a++) {
				 pt=a+ws.offset; if (pt>=ws.maxcam) break;
				 buf[(SINT) a].keypt=(CHAR *) (pmem+((SINT) pt*MAX_X));
				}
				break;

	case WS_DISPLAY : //			  			Richiesta buffer

				DExt=(struct WS_DISPEXT *) str;
				ptr=pmem+((SINT) info*MAX_X);
				dispfm_h(DExt->px+2,DExt->py,DExt->col1,DExt->col2,DExt->hdl,ptr);
				
				break;

	case WS_OFF : //			  												Settaggio offset
				ws.offset=info;
				break;

	case WS_KEYPRESS :
				if (key_press(9)||key_press2(_FDX)) strcpy(str,"ESC:->");
				if (key_press2(15)||key_press2(_FSX)) strcpy(str,"ESC:<-");
				//if (key_press(9)) strcpy(str,"ESC:->");
				//if (key_press2(15)) strcpy(str,"ESC:<-");
				break;


	case WS_FINDKEY :
	case WS_FIND : //			  						Ricerca la Chiave selezionata

				if (scrhdl==-1) break;

				strupr(str);
				a=ws.selez+1;

				if (memcmp(str,pmem+((SINT) a*MAX_X),strlen(str))==0)
						{listfile(NULL,WS_OFF,a,"");
						 if (ws.offset>(ws.maxcam-ws.numcam))
								 ws.offset=(ws.maxcam-ws.numcam);
						 if (ws.offset<0) ws.offset=0;
						 listfile(NULL,WS_SEL,a,"");
						 break;}
				{

				for(a=0;a<ws.maxcam;a++)
				{
				 if (memcmp(str,pmem+((SINT) a*MAX_X),strlen(str))<=0)
						{listfile(NULL,WS_OFF,a,"");
						 if (ws.offset>(ws.maxcam-ws.numcam))
								{ws.offset=(ws.maxcam-ws.numcam);}
						 if (ws.offset<0) ws.offset=0;
						 listfile(NULL,WS_SEL,a,"");
						 break;}
				 }
				}
				break;

	case WS_SEL : //			  			Settaggio selez

				ws.selez=info;

				if ((info>-1)&&IptMirror)
					{ipt_write(1,(CHAR *) (pmem+((SINT) info*MAX_X)),0);
					 ipt_vedisolo(1);
					 }

				//sonic(2000,1,1,1,1,6); //ehSleep(30);
				break;

	case WS_PTREC : //			  			Restituisce pt alla chiave selezionata

				buf[0].record=ws.selez;
				buf[0].keypt=(CHAR *) (pmem+((SINT) ws.selez*MAX_X));
				break;


	case WS_REFON : //			  			       Richiesta di refresh schermo

				ws.refre=ON;
				break;

	case WS_REFOFF : //			  											 Schermo rifreshato

				ws.refre=OFF;
				break;

	case WS_OPEN : //														  PREPARA I DATI

				if ((info<4)||(info>MAX_Y))
						{
						ehExit("Errore di assegnazione campi in listfile");
						}

				ws.sizecam=MAX_X;
				ws.numcam=info;// Assegna il numero di campi da visualizzare

	case WS_LOAD :

				if (scrhdl>-1) memoFree(scrhdl,"Cr2");// Libera la memoria

				scrhdl=-1;
				ws.maxcam=0;
				ws.offset=0;
				ws.selez=-1;
				ws.koffset=-1;
				ws.kselez=-1;
				ws.dispext=ON;
				ws.refre=ON;

				//	Conta i file
				strcpy(serv,szFolder); AddBs(serv);
				strcat(serv,"*.");
				strcat(serv,extcur); //strcat(serv,extcur);

				// Cambia il mouse
//				strcpy(Bsys.szMouseCursorName,sys.szMouseCursorName);
//				BMS_ax=MS_ax; BMS_ay=MS_ay;
				mouse_graph(0,0,"CLEX");

		/*
				fine=f_findFirst(serv,&Fblk,FA_ARCH);
				while (!fine) {ws.maxcam++; fine=f_findNext(&Fblk);}
				f_findClose(&Fblk);
				*/
				fileDirOpen(serv,&sDir);
				while (fileDirGet(&sDir)) {ws.maxcam++;}
				fileDirClose(&sDir);
/*
				// Non ci sono pi— files
				if (ws.maxcam)
				{
					if ((DE_coden==ERROR_FILE_NOT_FOUND)||(DE_coden==ERROR_NO_MORE_FILES)) fine=0;
				}
				if (fine) win_infoarg("ListFile() %d\n",DE_coden);
				*/
				if (ws.maxcam==0) goto FINEC;//	No file

				scrhdl=memoAlloc(M_HEAP,(LONG) ws.maxcam*(MAX_X),"listfile()");
				if (scrhdl<0) ehExit("Memoria insufficiente in line");
				pmem=memoPtr(scrhdl,NULL);
				//	Copia i nomi dei file in memoria
				fileDirOpen(serv,&sDir);
				p=pmem; a=0;
				while (fileDirGet(&sDir)) {
//					BYTE *psz;
					a++;
//					if (a>ws.maxcam) ehExit("Errore in listafile");
//					psz=wcsToStr(sDir.sFileInfoW.wcsFileName);
					strcpy((CHAR *) p,sDir.sFileInfo.szFileName);
//					ehFree(psz);
					*p=(BYTE) toupper((SINT) *p);
					p+=MAX_X;
				}
				fileDirClose(&sDir);
/*
				// Non ci sono pi— files
				if (fine)
				{if ((DE_coden==ERROR_FILE_NOT_FOUND)||
						 (DE_coden==ERROR_NO_MORE_FILES)) fine=0;
				}

				if (fine) win_infoarg("ListFile() %d\n",DE_coden);
*/
			//	ORDINA I FILE IN MODO ALFABETICO
				sort(pmem,(SINT) ws.maxcam,MAX_X);

				FINEC:
//				mouse_graph(BMS_ax,BMS_ay,Bsys.szMouseCursorName);
				return (SINT *) fine;
				//break;

	case WS_CLOSE : //														  LIBERA LA MEMORIA

				if (scrhdl>-1) memoFree(scrhdl,"Cr3");// Libera la memoria
				scrhdl=-1;
				break;

	case FBEXT:

				if (strlen(str)>3) break;
				strcpy(extcur,str);
				IptMirror=(SINT) info; // Per la copia nell'input
				break;

	case WS_REALSET :
			 strcpy(szFolder,str);
			 break;
	 }
	return &buf;

#undef MAX_X
#undef MAX_Y
}