/* 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; } } }
/* 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; } } }
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 }
// 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 }