Here is my first template for a UI version console Select one on more prg with enter and compile and run with f5 Particular useful running in harbour\test It Generate also project file for xmate now i want : -support also hrb -Manage also -GUI,-MT -Give Capability to edit source selected with parametrised editor -support more than 15 character in file name - try linux -Not exit but remain in memory after running the sample - Give capability compile a source from clibpoard useful for compile sample found in web
Can my little work be part of harbour (example)? This use on old path based on achoice emulating norton commanter look and feel Have any other multiplatform suggestion for make a Multiple FIle Select on a file system? /* * $Id: hbm.prg */ /* * xHarbour Project source code: * xHarbour Template for hbmk 2 * * Copyright 2000 Massimo Belgrano * www - http://www.xharbour.org */ #include 'DIRECTRY.CH' #include "INKEY.CH" function main LOCAL qualedir ,QUALEPROG:=1 LOCAL FILECHOICE:={} set func 2 to CHR(K_CTRL_W) SET func 5 TO CHR(K_LEFT) CLS QUALEDIR="\"+CURDIR() DO WHILE .T. @ 0,54 CLEAR TO 23,79 @ 0,54 TO 23,79 FOR A=1 TO LEN(FILECHOICE) @ 0+A,55 SAY RIGHT(FILECHOICE[A],20) NEXT A QUALEPROG=SELECT_FILE(filechoice,@QUALEDIR,"*.PRG",1,1,22,50) @ 4,5 say qualedir IF EMPTY(QUALEPROG) IF LASTKEY()=K_RIGHT SELECT_ELEMENT(FILECHOICE,1,55,22,78) ELSE EXIT ENDIF ENDIF AADD(FILECHOICE,CURDRIVE()+":"+QUALEDIR+"\"+QUALEPROG) ENDDO if lastkey()<>27 IF LEN(FILECHOICE)>0 cls CREA_XMATE(filechoice) X_SHELL="HBMK2 " FOR A=1 TO LEN(FILECHOICE) X_SHELL=X_SHELL+FILECHOICE[A] +" " NEXT A X_SHELL=X_SHELL+"-RUN" RUN(X_SHELL) ENDIF ENDIF return FUNCTION SELECT_ELEMENT(FILECHOICE,X_ALTO,X_SINISTRA,X_BASSO,X_DESTRA) LOCAL X_POS if len(filechoice)=0 return endif do while .t. @ x_BASSO+2,1 SAY "Press enter to remove element to list" @ X_ALTO-1, X_SINISTRA -1 CLEAR to X_BASSO +1, X_DESTRA +1 @ X_ALTO-1, X_SINISTRA -1 to X_BASSO +1, X_DESTRA +1 X_POS=ACHOICE(X_ALTO,X_SINISTRA,X_BASSO,X_DESTRA,FILECHOICE,.T.) IF X_POS>1 ADEL(FILECHOICE,X_POS) else exit ENDIF enddo RETURN FUNCTION SELECT_FILE(filechoice,X_DIRSPEC,X_WILCARD,X_ALTO,X_SINISTRA,X_BASSO,X_DESTRA) LOCAL ADIRECTORY := {}, NITEM := 0, X_RET_VAL := .T. LOCAL NUM_ARGOMENTI := 0, CFILESTRING := "" LOCAL WIN_SELEZ LOCAL X_ELEM_SEL:=0 SAVE SCREEN TO WIN_SELEZ X_DIRSPEC=IIF(VALTYPE(X_DIRSPEC)="C",X_DIRSPEC,"\"+CURDIR()) X_ALTO=IIF(VALTYPE(X_ALTO)="N",X_ALTO,5) X_SINISTRA=IIF(VALTYPE(X_SINISTRA)="N",X_SINISTRA,5) X_BASSO=IIF(VALTYPE(X_BASSO)="N",X_BASSO,22) X_DESTRA=IIF(VALTYPE(X_DESTRA)="N",X_DESTRA,40) DO WHILE .T. @ X_BASSO+2,1 say "Press Enter add program to compile "+iif(len(filechoice)>0,"F5 compile and run Left Modify ","") +"Esc to Exit" @ X_ALTO-1, X_SINISTRA -1 CLEAR to X_BASSO +1, X_DESTRA +1 @ X_ALTO-1, X_SINISTRA -1 to X_BASSO +1, X_DESTRA +1 X_DIRECTORY=X_DIRSPEC+"\*.*" // carica una file list con le informazioni della directory ADIRECTORY := DIRECTORY( x_directory, "D" ) NUM_ARGOMENTI := IF( VALTYPE( aDirectory ) != "A", 0, LEN( aDirectory ) ) aFileList := {} // Cancella la vecchia lista ASORT( aDirectory,,, { | x, y | X[F_NAME] < Y[F_NAME] } ) // ORDINO LA DIRECTORY // X[F_NAME],"B"+X[F_NAME]) < IIF(Y[F_ATTR]="D","A"+Y[F_NAME],"B"+Y[F_NAME]) } ) // COMPONGO LA STRINGA CHE VERRA VISUALIZZATA NELLA ACHOICE FOR NITEM := 1 TO NUM_ARGOMENTI IF ADIRECTORY[NITEM,F_ATTR ]=="D" AADD( AFILELIST, PADR( ADIRECTORY[ NITEM, F_NAME ], 15 ) + ; " <dir>"+ " " + ; DTOC( aDirectory[ nItem, F_DATE ] ) + " " + ; SUBSTR( aDirectory[ nItem, F_TIME ], 1, 5) + " " + ; SUBSTR( aDirectory[ nItem, F_ATTR ], 1, 4 ) + " " ) ENDIF NEXT X_DIRECTORY=X_DIRSPEC+"\"+X_WILCARD ADIRECTORY := DIRECTORY( x_directory, "D" ) NUM_ARGOMENTI := IF( VALTYPE( aDirectory ) != "A", 0, LEN( aDirectory ) ) ASORT( aDirectory,,, { | x, y | X[F_NAME] < Y[F_NAME] } ) // COMPONGO LA STRINGA CHE VERRA VISUALIZZATA NELLA ACHOICE FOR NITEM := 1 TO NUM_ARGOMENTI IF ADIRECTORY[NITEM,F_ATTR ]<>"D" AADD( AFILELIST, PADR( ADIRECTORY[ NITEM, F_NAME ], 15 ) + ; STR( aDirectory[ nItem, F_SIZE ], 8 )+ " " + ; DTOC( aDirectory[ nItem, F_DATE ] ) + " " + ; SUBSTR( aDirectory[ nItem, F_TIME ], 1, 5) + " " + ; SUBSTR( aDirectory[ nItem, F_ATTR ], 1, 4 ) + " " ) ENDIF NEXT X_ELEM_SEL=ACHOICE(X_ALTO,X_SINISTRA,X_BASSO,X_DESTRA,AFILELIST,.T.,,X_ELEM_SEL) IF X_ELEM_SEL=0 X_RET_VAL="" EXIT ENDIF X_FILE_SEL=AFILELIST[X_ELEM_SEL] IF SUBSTR(X_FILE_SEL,16,8)<>" <dir>" X_RET_VAL=SUBSTR(X_FILE_SEL,1,15) EXIT ELSE IF SUBSTR(X_FILE_SEL,1,1)="." && SALGO DI UNA DIRECTORY X_DIRSPEC=SUBSTR(X_DIRSPEC,1,RAT("\",X_DIRSPEC)-1) ELSE X_DIRSPEC=X_DIRSPEC+"\"+ALLTRIM(SUBSTR(X_FILE_SEL,1,15)) ENDIF ENDIF ENDDO RESTORE SCREEN FROM WIN_SELEZ RETURN(X_RET_VAL) FUNCTION CREA_XMATE(filechoice) local a_xmate:={},A LOCAL X_LOG,X_MATE AADD(A_XMATE,"[Version]") AADD(A_XMATE,"Type=xMate") AADD(A_XMATE,"Number=1.15") AADD(A_XMATE,"") AADD(A_XMATE,"[Info]") AADD(A_XMATE,"Type=Executable") AADD(A_XMATE,"Architecture=harbour") AADD(A_XMATE,"Include=") AADD(A_XMATE,"Define=") AADD(A_XMATE,"") AADD(A_XMATE,"[xMate]") AADD(A_XMATE,"Create Map/List File=No") AADD(A_XMATE,"") AADD(A_XMATE,"[Project]") AADD(A_XMATE,"Run=") AADD(A_XMATE,"Params=") AADD(A_XMATE,"Final Path=%HOME%") AADD(A_XMATE,"Maintain LNK=Yes") AADD(A_XMATE,"Default Type=1") AADD(A_XMATE,"Error log=") AADD(A_XMATE,"") AADD(A_XMATE,"[Data Path]") AADD(A_XMATE,"Dbf=") AADD(A_XMATE,"") AADD(A_XMATE,"[Editor]") FOR A=1 TO LEN(FILECHOICE) AADD(A_XMATE,ALLTRIM(FILECHOICE[A])+"="+STR(A)+",N,N") NEXT AADD(A_XMATE,"") AADD(A_XMATE,"") AADD(A_XMATE,"[Files]") FOR A=1 TO LEN(FILECHOICE) AADD(A_XMATE,ALLTRIM(FILECHOICE[A])+"="+STR(A)+",.F.,0,0,") NEXT xprjmate=aLltrim(filechoice[1]) xprjmate=substr(XPRJMATE,1,len(xPRJmate)-4) +".xhp" if .not. file(XPRJMATE) X_LOG=FCREATE(XPRJMATE) FOR a=1 to len(A_XMATE) FWRITE(X_LOG,A_XMATE[a]+CHR(13)+CHR(10)) NEXT FCLOSE(X_LOG) ENDIF * returm */ 2009/2/16 Viktor Szakáts <harbour...@syenar.hu>: >> I have still one suggestion >> Having a simple interactive mode >> launching hbmk without parameter see a list of prg,hbp,c,rc >> select with space one or more and press button compile >> Simple and easy but will be a bridge between people command line >> driven and gui driven > > Nope sorry, I've meant this is a pure command line tool. > In fact all our supplied tools are command line only, and > this shouldn't be an exception. > If you want CUI/GUI, a wrapper program is the best solution. This > could simply create a hbmk command line after presenting > all the options on the screen for the user and either launch it > or save it as .hbm (similar to hbmake). Can be independently > developed from hbmk, and if it's good and portable (which now > means CUI), we can also include it as part of the Harbour package. > _______________________________________________ Harbour mailing list Harbour@harbour-project.org http://lists.harbour-project.org/mailman/listinfo/harbour