Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Variables locales et DIM dynamique | |
| | Auteur | Message |
---|
Invité Invité
| Sujet: Variables locales et DIM dynamique Jeu 25 Nov 2010 - 8:24 | |
| Ceci est un premier teste, et avoir vos avis. modifier le 26/11/10 à 10h35 modifier le 26/11/10 à 14h40 ajout de PREFIXE>< modifié à 17h00
Ceci permet, pour avoir une définition au départ, de coder en évitant toute déclaration des DIM. De toute façon, toutes les lignes dim sont détruite, pour être reconstruite à la fin. Ensuite de faire des pseudo variables locales dans le programme, partir avec des variables qu'on a utilisées auparavant, mais avec l'aide d'un caractère qui précède celle-ci est qui est: ² d'ajouter automatiquement un ou deux préfixe à celle-ci. Ainsi si on veut se resservir de a%, qui est déjà utilisé, au tape par exemple: ²a%=²a% -1. On aura une nouvelle variable, lorsque l'on découvrira le programme, qui pourra être par exemple Test_a%, selon ce qui aura été défini au départ. Il faut savoir que chaque include aura automatiquement un autre préfixe. On pourra aussi lui donner un autre nom que celui défini au départ.
En parallèle avec les discutions: https://panoramic.1fr1.net/a-l-aide-f6/comment-trouver-si-une-variable-est-definie-t1255-15.htm#10763 donc: La difficulté est de pouvoir de manière simple à appeler de manière simple un chargeur qui permet d'intercepter le programme à décoder
Je connais deux méthodes avec l'éditeur Panoramic, et pour l'instant, je ne m'occupe que de celui-ci: soit enregistrer le programme avant de le lancer, soit passer par le presse papier. J'ai choisi pour l'instant de partir avec la 1ère partie, c'est à dire charger le fichier à partir du disque. Pour ce faire, il est indispensable de mettre des lignes au début de tout programme qui se servira de cette méthode. Ces lignes sont provisoire et seront détruite lors du décodage du programme. Ce sont celles-ci: - Code:
-
' Programme outils permettant de programmer avec de variables dynamiques et aussi locales ' instructions complémentaire, en majuscules et seules sur une ligne: ' PREFIXE>²< soit du préfixe dans la définition de la variable. Est permis: ²^°~&§|{}[] sinon arrêt du prg ' FICHE>préfixe< : définissant un préfixe suplémentaire, à la place "²" ' FICHE_CLEAR identique à FICHE>< : annule le préfixe suplémentaire ' au fur et à mesure de leur lecture. Les variables sont définies à la fin du décriptage ' et toutes remises en haut du programme. ' En haut du programme, afin de minimiser les manipulations pour le lancement de décodage, rajouter: ' les lignes suivantes sont exécutables dans le programme et ne sont pas des commentaires ' début ' clipboard_string_copy "C:\TESTE\M_au _P_TRACE\teste prg.bas" ' label fin :' modifier le label selon votre programme ' EXECUTE "C:\TESTE\PROCEDURE\DIM_Global_Local\Dim_global_local.exe" ' wait 1500:goto fin ' end ' fin ' le "end" est la fin de ce mini programme. c'est lignes seront supprimées avant exécution! ' cette méthode permet de fermer le programme codé automatiquement sans faire de bruit.
' LE PROGRAMME COMMENCE ICI
hide 0 form 10:width 10,500:height 10,100:left 10,screen_x/2-250:top 10,screen_y/2-50 ALPHA 29:parent 29,10:font_size 29,10:top 29,20:left 29,30:font_bold 29 dim f$ ' f$ = clipboard_string_paste$ ' Pour les includes width 0,screen_x:height 0,1000 :top 0,100 :caption 0,"Dépileur d'include" '
error_french dim a%,b%,c%,d%,g%,a$,b$,c$,d$,v% ,pref$ ,lig_b% ,flag_efface%, lig_a% ,mot$,local$, nb% ,A ,B ,C ,D ,E ,F ,G dim caption_form$ , clear_dim% , ligne% ,ligne$,instruction$,separe$,a1$,v1% ,flag_prg% ,H ,flag_guil% ,prefix$ label control , control0 ,controlform0 ,sort_repeat,sort_next data Un,Deux,Trois,Quatre,Cinq,Six,Sept,Huit,Neuf,Dix
separe$=" <>=,:/*-+()"+chr$(34) : prefix$="²" A=21 : B=22 : C=23 : D=24 : E=25 : F=26 : G=27 : H=28 : ' numéro pour être repris dans un autre programme memo A:hide A:' width A,screen_x-400:height A,860:font_size A,12 :font_name A,"Bistream Vera Sans Mono" memo B: hide B memo H:hide H :' width H,screen_x/2-10:height H,560:font_size H,12:left H,screen_x/2 dlist C
file_load A,"C:\TESTE\M_au _P_TRACE\teste prg.bas" :' sert pour les testes en direct ' file_load A,"C:\TESTE\PROCEDURE\DIM_Global_Local\teste prg.bas" "" ' file_load A, f$ caption 29,"Patientez! re-définition des variables"+chr$(13)+f$ for a%=1 to 10:read a$:item_add C,a$:next a% dlist E:' top E,570:height E,300:left E,screen_x-250:width E,240 :font_size E,10 dlist F:' top F,570:height F,300:left F,screen_x-400 :width F,140 :font_size F,10 dlist G bar_horizontal A:bar_horizontal B
a%=1 :nb%=0 ' ------------------------------------------------------- ' on retire les lignes du programme qui chargent celui-ci (VOIR LES INSTRUCTIONS) repeat a$=trim$(item_read$(A,1)) item_delete A,1 a%=a%+1 until a$="end" and a%>5 if a%>9 then message "on stop, ne trouve pas de 'end' dans les premières lignes":terminate ' -------------------------------------------------------
' si tu as le fichier des instructions, c'est ici, sinon mettre la liste que je t'ai donné dlist 1:file_load 1,"C:\TESTE\AIDE_PANORAMIQUE\liste_des_fiches.txt" :' vient du lien que Jack avait fourni (les fiches) for a%=1 to count(1) : b$=item_read$(1,a%) ' on retire la fin si il y a des parenthèses, autrement la fonction est prise pour une variable ' nota, les dernières instructions ne sont dedans if instr(b$,"(")>0 then b$=left$( b$, instr(b$,"(") -1):item_delete 1,a%:item_insert 1,a%,b$ next a% for a%=1 to count(1) instruction$=instruction$+ item_read$(1,a%)+" " next a% ' rajout des instructions qui ne sont pas fichées. instruction$=instruction$+"INCLUDE FICHE TO LOCAL " :' on rajoute ici les instructions qui manquent
' DEBUT DEBUT DEBUT DEBUT DEBUT DEBUT DEBUT DEBUT DEBUT DEBUT DEBUT DEBUT DEBUT DEBUT DEBUT DEBUT DEBUT
ligne%=1 : nb%=0 repeat a$=item_read$(A,ligne%) :a$=rtrim$(a$) if instr(trim$(a$),"LOCAL>") > 0 a$=trim$(a$) :flag_efface%=1 caption_form$=mid$( trim$(a$) ,instr(a$ ,"LOCAL>")+6,100):caption_form$=left$(caption_form$, len(caption_form$)-1) if left$(caption_form$,1)=chr$(34) then caption_form$= mid$(caption_form$,2,300) if right$(caption_form$,1)=chr$(34) then caption_form$=left$(caption_form$,len(caption_form$)-1) item_delete C,1:item_insert C,1,caption_form$ goto sort_repeat end_if
' ---------------------------------------------
if left$(trim$( upper$(a$)) ,8) ="#INCLUDE" ' INCLUDE INCLUDE INCLUDE INCLUDE INCLUDE INCLUDE INCLUDE INCLUDE INCLUDE INCLUDE local$="" :clear_dim%=0 : nb%=nb%+1 v%=instr( upper$(a$),"#INCLUDE") c$=mid$( a$,v% +9,80 ) :c$=trim$(c$) :' chemin complet de l'include if left$(c$,1)=chr$(34) then c$=mid$(c$,2,80) item_add B,"' #" + str$(nb%) + " dépilé: " + trim$(a$) lig_b% = count(B) : lig_a% = ligne% item_delete A,lig_a% file_add B,c$ :' on rajoute le fichier include après avoir détruit #INCLUDE chemin\prg.bas
while lig_b%<=count(B) a$=item_read$(B,lig_b%) : gosub control if flag_efface%=0 then item_insert A,lig_a%,a$ :lig_a%=lig_a%+1 :' supprime les commandes sup item_delete B,lig_b% :' avec flag_efface%=1 end_while local$="" :caption_form$=item_read$(C,1) :' on récupère le préfixe du programme normal else ' PROGRAMME PROGRAMME PROGRAMME PROGRAMME PROGRAMME PROGRAMME PROGRAMME PROGRAMME
clear_dim%=0 : gosub controlform0 sort_repeat: item_delete A , ligne% :if flag_efface%=1 then ligne%=ligne%-1 if flag_efface%=0 then item_insert A,ligne%,a$ flag_efface%=0 end_if ligne%=ligne%+1 local$="" until ligne%> count(A) ' ///////////////////////////////////////////////////// ' fin de traitement. On insert tous les dim(s)
if count(E)>0 a$="dim " : b%=2 :' b%= ligne d'insertion dans A , on insert en ligne 2 au départ for g%=1 to count(E) a$=a$+item_read$(E,g%) if g%/8=int(g%/8) item_insert A,b%,a$:a$="":b%=b%+1:if g%<count(E) then a$="dim " else a$=a$+" , " end_if next g%:if a$<>"" then a$=left$(a$,len(a$)-2) if a$<>"dim " and a$<>"" then item_insert A,b%,a$:b%=b%+1
end_if
if count(F)>0 a$="dim " for g%=1 to count(F) a$=a$+item_read$(F,g%) if g%/8=int(g%/8) item_insert A,b%,a$:a$="":b%=b%+1:if g%<count(F) then a$="dim " else a$=a$+" , " end_if next g%:if a$<>"" then a$=left$(a$,len(a$)-2) if a$<>"dim " and a$<>"" then item_insert A,b%,a$ end_if hide 10 file_save A,"C:\temp\Panoramic.bas" :' pour récupérer le programme décodé file_save E,"C:\temp\dim.txt" :' pour voir toutes les variables chain "C:\temp\Panoramic.bas" stop END ' ======================================================================================================= ' END END END END END END END END END END END END END END END END END END END END END END END END END END ' END END END END END END END END END END END END END END END END END END END END END END END END END
controlform0: ' pour la forme 0 pref$=caption_form$ flag_prg%=0 goto control0 return ' ============================================================================== control: flag_efface%=0 :flag_prg%=1 pref$=item_read$(C,nb%) :clear G control0: ' partie recherche dim et variables globales
if instr(trim$(a$),"PREFIXE>")> 0 a$=trim$(a$) :flag_efface%=1 prefix$= mid$( a$,instr( a$,"PREFIXE>")+8,1) if instr("²^°~&§|{}[]",prefix$)=0 message "préfixe choisi interdit! "+prefix$+chr$(13)+"seule les préfixes suivants sont possible: ² ^ ° ~ & § | { } [ ]"+chr$(13)+"arrêt du programme pour le modifier!":terminate end_if a$="" end_if if left$(pref$,1)="|" then pref$=upper$( mid$( pref$,2,1)) + lower$( mid$( pref$,3,100)) ligne$=trim$(a$) if left$(a$,1)<> " " then a$=" "+a$ if instr( a$ , "FICHE>" ) > 0 and instr( a$ , "FICHE><" ) =0 b$=mid$( a$, instr(a$,"FICHE>")+6,100) local$=left$( b$,instr(b$,"<")-1) if left$(local$,1)="|" local$= upper$( mid$( local$,2,1)) + lower$( mid$( local$,3,100) ) else local$="_"+local$:if local$="_" then local$="" end_if a$="" :flag_efface%=1 ligne$="" end_if if ligne$<>"" repeat v%=instr(ligne$,chr$(34)) if v%>0 a1$=mid$(ligne$,v%+1,500) v1%=instr(a1$,chr$(34)) if len(a1$)>v1% ligne$=left$(ligne$,v%-1)+mid$(a1$,v1%+1,300) else ligne$=left$(ligne$,v%-1):if right$(ligne$,1)=":" then ligne$=left$(ligne$,len(ligne$)-1):' c'est pas un label end_if end_if until v%=0 or scancode=27 :if scancode=27 then end
' on retire les rem, on sait que maintenant elles ne sont plus dans les chaines, vu que retirées. if instr(ligne$,"'")>0 then ligne$=left$(ligne$,instr(ligne$,"'")-1) :if right$(trim$(ligne$),1)=":" then ligne$=left$(trim$(ligne$),len(trim$(ligne$))-1) if instr(upper$(ligne$),"REM")>0 then ligne$=left$(ligne$,instr(upper$(ligne$),"REM")-1)
' reste à retirer les labels
if len(ligne$)>1 b$=left$(trim$(ligne$),len(trim$(ligne$))-1) if trim$(right$(ligne$,1))=":" if instr( b$,":")=0
' c'est un label ou alors erreur, mais ici c'est pas le problème pas d'analyse! ligne$="" else for a%=len(ligne$)-1 to 1 step -1: if mid$(ligne$,a%,1)=":" then ligne$=left$(ligne$,a%-1):exit_for next a% ligne$=left$(ligne$,a%-1) end_if end_if end_if ' il reste les goto et les gosub if instr(upper$(ligne$),"GOSUB")>0 then ligne$=left$(ligne$ ,instr( upper$(ligne$),"GOSUB")-1) if instr(upper$(ligne$),"GOTO")>0 then ligne$=left$(ligne$ ,instr( upper$(ligne$),"GOTO")-1)
' reste les lignes label:
if instr(upper$(ligne$),"LABEL ") >0 v%=instr( upper$( ligne$),"LABEL"):b$=mid$( ligne$,v%+7,300):v1%=instr(ligne$,":") if v1%>0 b$=mid$(b$,v1%+1,300) if v%>1 then ligne$=left$(ligne$,v%-1):else :ligne$="" else b$="" if v%>1 ligne$=left$(ligne$,v%-1) else ligne$="" end_if end_if ligne$=ligne$+b$ end_if
' reste dim if instr(upper$(ligne$),"DIM ") >0 v%=instr( upper$( ligne$),"DIM"):b$=mid$( ligne$,v%+5,300):v1%=instr(ligne$,":") if v1%>0 b$=mid$(b$,v1%+1,300) if v%>1 then ligne$=left$(ligne$,v%-1):else :ligne$="" else b$="" if v%>1 ligne$=left$(ligne$,v%-1) else ligne$="" end_if end_if ligne$=b$ if flag_prg%=0 item_delete A,ligne%:item_insert A,ligne%,ligne$:a$=ligne$ else item_delete B,lig_B%:item_insert B,lig_B%,ligne$:a$=ligne$:lig_B%=lig_B%+1 end_if end_if ' -----pour éviter qu'un ON_CLIK ON_CHANGE ON_TIMER aui ont un label soient pris comme variable----- if instr(upper$(ligne$),"ON_")>0 b$=mid$(ligne$,instr(upper$(ligne$),"ON_"),300):b$=mid$(b$,instr(b$,",")+1,300) for a%=1 to len(b$): if instr(separe$, mid$(b$,a%,1))>0 then exit_for next a% ligne$=left$( ligne$,instr(upper$(ligne$),"ON_")-1) + mid$(b$,a%,300) end_if ' --------------------DATA------------------------------------------------- if left$(upper$(ligne$),5)="DATA " then ligne$="" ' ----------RECHERCHE DES VARIABLES QUI SONT LE RESTE APRES AVOIR ENLEVER LES INSTRUCTIONS----------
repeat for a%=1 to len(ligne$) b$=mid$(ligne$,a%,1) : v%= instr(separe$ , b$) if v%>0 b$=mid$(separe$,v%,1) v%=instr(ligne$,b$) c$=trim$(left$(ligne$,v%-1)) if instr(prefix$+"#",left$(c$,1))=0 if numeric(trim$(c$))=0 :' on évite les nombres ' apparemment ça marche mais je ne suis pas sur que l'espace soit logique pour tous les cas? b%=instr(instruction$," "+upper$(c$)) :item_add H,upper$(c$) + " b%="+str$(b%) if b%=0 if c$<>"" and left$(c$,1)<>"|" if count(E)>0 for b%=1 to count(E) : if c$=item_read$(E,b%) then exit_for next b% if b%>count(E) then item_add E,c$ else item_add E,c$ end_if end_if end_if end_if end_if exit_for end_if next a% if v%+1<len(ligne$) then ligne$=trim$(mid$(ligne$,v%+1,500)) :else :exit_repeat until v%=0 or scancode=27
' ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ' partie dépileur d'include et traitement des variables locales if instr(a$ , "FICHE_><")>0 then local$="" :flag_efface%=1 :' préfixe suplémentaire annulé if instr(a$ , "FICHE_CLEAR")>0 then local$="":flag_efface%=1 :' préfixe suplémentaire annulé ' ------------------------------------------------------------------------------------ if instr(a$,prefix$)>0 flag_guil%=0 for b%=len(a$) to 1 step -1 if b%>1 b$=mid$(a$,b%-1,1) else b$="" end_if
if b% >1 if mid$(a$,b%-1,2)=prefix$+prefix$ a$=left$(a$,b%-1)+ mid$(a$,b%+1,300):b%=b%-1:goto sort_next end_if end_if c$=mid$(a$,b%,1) if c$=prefix$ and instr(" :,(/*-+=<>"+chr$(34),b$) >0 :' séparateurs ouvrants
b$=mid$(a$,b%,300) :' message a$+chr$(13)+ b$ for c%=1 to len(b$) if instr(" :,)/*-+=<>"+chr$(34),mid$(b$,c%,1))>0 then exit_for next c% mot$= mid$(b$,2,c%-2) :' on récupère l'ancienne variable sans prefix$ b$=pref$+local$+"_" + mot$ if count(E)>0 for c%=1 to count(E) if b$=item_read$(E,c%) then exit_for next c% if c%> count(E) then item_add E,b$ else if flag_guil%=0 then item_add E,b$ end_if a$=left$(a$,b%-1)+ b$ + mid$(a$,len(mot$)+b%+1,200) end_if sort_next: next b% end_if end_if
return
à ceci il faut ajouter un fichier qui vient du fichier d'aide de Panoramic, et l'enregistrer. [/color] Ici il a le chemin: "C:\TESTE\AIDE_PANORAMIQUE\liste_des_fiches.txt", et est en ligne 66 de ce programme. Donc il faut adapter le chemin de ce fichier, avec celui où vous allez le placer. (Excuse-moi JL35, il faudra modifier la ligne 66)
Donc il faut [b]faire un exécutable de ce fichier Je mets les lignes ici, pour ne pas avoir à le télécharger. - Code:
-
#INCLUDE 2D_CIRCLE 2D_CLEAR 2D_FILL_COLOR 2D_LINE 2D_PEN_COLOR 2D_PEN_WIDTH 2D_POINT 2D_POLY_FROM 2D_POLY_TO 2D_RECTANGLE 2D_TARGET_IS 3D_ACTOR 3D_BOX 3D_CHAIN 3D_CHAIN_BREAK 3D_COLOR 3D_CONE 3D_CUBE 3D_CYLINDER 3D_DELETE 3D_DELETE_ALL 3D_DODECAHEDRON 3D_HIDE 3D_LINE 3D_LINE_WIDTH 3D_LOAD_OBJECT 3D_LOAD_TEXTURE 3D_MESH 3D_MOVE 3D_POINT_OBJECT 3D_SHOW 3D_SPHERE 3D_TARGET_IS 3D_TEAPOT 3D_TEXT 3D_TEXT_CHANGE 3D_TORUS 3D_TRANSPARENT 3D_X_POSITION 3D_X_ROTATE 3D_X_SCALE 3D_Y_POSITION 3D_Y_ROTATE 3D_Y_SCALE 3D_Z_POSITION 3D_Z_ROTATE 3D_Z_SCALE ABS(V) ACOS(V) ACTIVE ADR(V) ALPHA AND ASC(S) ASIN(V) ATN(V) AXES_HIDE AXES_SHOW BAR_BOTH BAR_HORIZONTAL BAR_NONE BAR_VERTICAL BEEP BIN_AND(V1,V2) BIN_OR(V1,V2) BIN_XOR(V1,V2) BORDER_HIDE BORDER_NORMAL BORDER_SMALL BRIGHTNESS BUTTON CAM_POSITION CAM_X_POSITION CAM_Y_POSITION CAM_Z_POSITION CAPTION CAPTION$(N) CARET_POSITION CASE CHECK CHECKED(N) CHR$(N) CLEAR CLICKED(N) CLIPBOARD_COPY CLIPBOARD_CUT CLIPBOARD_PASTE CLS COLOR COLOR_PIXEL_BLUE(N,X,Y) COLOR_PIXEL_GREEN(N,X,Y) COLOR_PIXEL_RED(N,X,Y) COMBO COMMAND_TARGET_IS CONTAINER_OPTION CONTRAST COS(V) COUNT(N) CURSOR_ARROW CURSOR_BEAM CURSOR_CROSS CURSOR_DEFAULT CURSOR_HELP CURSOR_HIDE CURSOR_HOURGLASS CURSOR_NOPARKING CURSOR_POINT DATA DATE$ DELETE DIM DIR_CHANGE DIR_CURRENT$ DIR_EXISTS(D) DIR_MAKE DIR_REMOVE DISPLAY DLIST DLL_CALL0(F) DLL_CALL1(F,P1) DLL_CALL2(F,P1,P2) DLL_CALL3(F,P1,P2,P3) DLL_CALL4(F,P1,P2,P3,P4) DLL_CALL5(F,P1,P2,P3,P4,P5) DLL_CALL6(F,P1,P2,P3,P4,P5,P6) DLL_OFF DLL_ON EDIT END END_IF END_SELECT END_WHILE ERROR_ENGLISH ERROR_FRENCH ERROR_LINE ERROR_NUMBER ERROR_TYPE$ EVEN(V) EXCEL_FILE_CLOSE EXCEL_FILE_NEW EXCEL_FILE_OPEN EXCEL_READ$(C) EXCEL_START EXCEL_STOP EXCEL_WRITE EXECUTE EXECUTE_WAIT EXIT_FOR EXIT_REPEAT EXIT_WHILE EXP(V) FILE_ADD FILE_CLOSE FILE_DELETE FILE_EOF(N) FILE_EXISTS(F) FILE_FIND_CLOSE FILE_FIND_FIRST$ FILE_FIND_NEXT$ FILE_LOAD FILE_NAME$(N) FILE_OPEN_APPEND FILE_OPEN_READ FILE_OPEN_WRITE FILE_READ FILE_READBUF FILE_READLN FILE_RENAME FILE_SAVE FILE_WRITE FILE_WRITEBUF FILE_WRITELN FILEBIN_CLOSE FILEBIN_OPEN_READ FILEBIN_OPEN_WRITE FILEBIN_POS(N) FILEBIN_POSITION FILEBIN_READ FILEBIN_SIZE(N) FILEBIN_WRITE FILTER FONT_BOLD FONT_BOLD_OFF FONT_COLOR FONT_ITALIC FONT_ITALIC_OFF FONT_NAME FONT_NAMES_ADD FONT_NAMES_LOAD FONT_SIZE FONT_STRIKE FONT_STRIKE_OFF FONT_UNDERLINE FONT_UNDERLINE_OFF FOR FORM FRAC(V) FULL_SPACE GAMMA GOSUB GOTO HANDLE(N) HANDLE_CANVAS(N) HCOS(V) HEIGHT HEIGHT(N) HIDE HINT HINT_HIDE HORIZONTAL HSIN(V) HTAN(V) IF IF INACTIVE INKEY$ INPUT INPUT_MARK_OFF INPUT_MARK_ON INPUT_REDO_OFF INPUT_REDO_ON INPUT_SOURCE_IS INPUT_VISIBLE_OFF INPUT_VISIBLE_ON INSERT$(S1,S2,P) INSTR(S1,S2) INT(V) ITEM_ADD ITEM_DELETE ITEM_INDEX$(N) ITEM_INDEX(N) ITEM_INSERT ITEM_READ$(N,L) KEY_DOWN_CODE KEY_DOWN_SPECIAL KEY_UP_CODE KEY_UP_SPECIAL LABEL LEFT LEFT$(S,N) LEFT(N) LEN(S) LIGHT_POSITION LIGHT_X_POSITION LIGHT_Y_POSITION LIGHT_Z_POSITION LIST LOG(V) LOG10(V) LOG2(V) LOWER$(S) LTRIM$(S) MAIN_MENU MARK_OFF MARK_ON MAX MEMO MESSAGE MESSAGE_CONFIRMATION_OK(T) MESSAGE_CONFIRMATION_YES_NO(T) MESSAGE_ERROR_OK(T) MESSAGE_ERROR_YES_NO(T) MESSAGE_INFORMATION_OK(T) MESSAGE_INFORMATION_YES_NO(T) MESSAGE_INPUT$(T1,T2,T3) MESSAGE_INPUT(T1,T2,T3) MESSAGE_TEXT$ MESSAGE_WARNING_OK(T) MESSAGE_WARNING_YES_NO(T) MID$(S,P,N) MIDI_OFF MIDI_ON MIDI_PLAY MIDI_VOLUME MIN MOUSE_LEFT_DOWN(N) MOUSE_LEFT_UP(N) MOUSE_RIGHT_DOWN(N) MOUSE_RIGHT_UP(N) MOUSE_X_LEFT_DOWN(N) MOUSE_X_LEFT_UP(N) MOUSE_X_POSITION(N) MOUSE_X_RIGHT_DOWN(N) MOUSE_X_RIGHT_UP(N) MOUSE_Y_LEFT_DOWN(N) MOUSE_Y_LEFT_UP(N) MOUSE_Y_POSITION(N) MOUSE_Y_RIGHT_DOWN(N) MOUSE_Y_RIGHT_UP(N) MOVIE NEXT NOT NUMBER_3D_OBJECTS NUMBER_EVENTS NUMBER_OBJECTS NUMBER_SPRITES NUMBER_VARIABLES NUMERIC(V$) O3D_X_POSITION(N) O3D_X_ROTATE(N) O3D_X_SCALE(N) O3D_Y_POSITION(N) O3D_Y_ROTATE(N) O3D_Y_SCALE(N) O3D_Z_POSITION(N) O3D_Z_ROTATE(N) O3D_Z_SCALE(N) ODD(V) OFF_CLICK ON_CHANGE ON_CLICK ON_ERROR_GOTO ON_KEY_DOWN ON_KEY_UP OPEN_DIALOG OPTION OR PARALLEL_INP(A) PARALLEL_OFF PARALLEL_ON PARALLEL_OUT PARAM_NUMBER PARAM_VALUE$(N) PARENT PICTURE PLAY PLAY_WAIT POINT_POSITION POINT_X_POSITION POINT_Y_POSITION POINT_Z_POSITION POSITION POSITION(N) POWER(X,Y) PRINT PRINT_LOCATE PRINT_TARGET_IS PRINT_X_LOCATE PRINT_Y_LOCATE PROGRESS_BAR READ REM REPEAT RESTORE RETURN RIGHT$(S,N) RMDIR RND(V) RTRIM$(S) SAVE_DIALOG SCANCODE SCENE2D SCENE3D SCREEN_X SCREEN_Y SCROLL_BAR SECRET_OFF SECRET_ON SELECT SELECT_READ$(N) SELECT_TEXT SET_FOCUS SGN(V) SHOW SIN(V) SORT SORT_OFF SORT_ON SOUND SPIN SPRITE SPRITE_DELETE SPRITE_DELETE_ALL SPRITE_FILE_LOAD SPRITE_HIDE SPRITE_POSITION SPRITE_SHOW SPRITE_TARGET_IS SPRITE_X_POSITION SPRITE_Y_POSITION SQR(V) STOP STR$(V) STRETCH_OFF STRETCH_ON STRING$(N,C) SUB_MENU TAN(V) TERMINATE TEXT TEXT$(N) THEN TIME$ TO_BACKGROUND TO_FOREGROUND TOP TOP(N) TRACK_BAR TRIM$(S) UNTIL UPPER$(S) VAL(S) VERTICAL WAIT WHILE WIDTH WIDTH(N)
Les dernières INSTRUCTIONS ne sont pas présente, il faudra les rajouter dans la ligne 78, ou les mettre dans le fichier. Je remets ici 4 programmes qui fonctionnent PAR ce programme. Le programme principal est le programme: teste.prg, les 3 autres sont des includes. Donc si vous voulez essayer, il faut modifier dans les lignes #INCLUDE, mettre le vrai chemin du programme le programme de départ qui appela de loader plus haut: - Code:
-
' programme d'essai Panoramic "C:\TESTE\M_au _P_TRACE\teste prg.bas" caption 0,"teste programme" clipboard_string_copy "C:\TESTE\M_au _P_TRACE\teste prg.bas" label fin EXECUTE "C:\TESTE\PROCEDURE\DIM_Global_Local\Dim_global_local.exe" wait 1500:goto fin end ' TOUTES LES LIGNES DU HAUT VONT ËTRE DÉTRUITES PAR LE CHARGEUR ' ===================================================================================================== ' le programme une fois décodée, peut-être récupéré par C:\temp\Panoramic.bas ' ===================================================================================================== label branche ' l'instruction suivante doit-être en majuscule, et seule sur la ligne. Elle donne un préfixe suplémentaire ' elle impose le nom du programme dans la variable Elle remplace >Un< qui était défini au départ. LOCAL>|teste< width 0,600 :left 0,600 :height 0,200:caption 0,"teste prg.bas" dim a% , a$ ,b%,b$ memo 1 :on_click 1,branche item_add 1,"voyons voir SURFACE"
' pour l'instant chemin complet d'un include #include "C:\TESTE\PROCEDURE\surface.bas" message "retour de include surface" + chr$(13) + "la surface est:" + str$(surface%)
' les variables suivantes sont dynamiques, elles se déclarent toutes seules. for ²a%=1 to 10 item_add 1,²a% next ²a%
message "inclusion" #include "C:\TESTE\M_au _P_TRACE\inclusion.bas" ²k%=125.24
' l'instruction suivante anule le préfixe suplémentaire et peut aussi être en majuscule: fiche>< FICHE_CLEAR ²k%=8 ²l%=12*²k% :item_add 1,"²l%*²k%=" +str$( ²l% * ²k% )
end
branche: message "click sur le memo" return fin: terminate
celui-ci est le programme: inclusion.bas - Code:
-
rem "ceci est un essai d'inclusion dans un autre programme" ' et ne sert à rien ²a$="inclusion" FICHE>|salut< ' le préfixe définit est Salut à vérifier! ²b%=12874 : ²a$="est que local marche" FICHE_CLEAR ' normalement il ne reste que le préfixe numéro de l'appel include ²couleur%=12 for ²couleur%=1 to ²couleur%:next ²couleur% message "inclusion réussi" ' appel d'un include en position 2 #include "C:\TESTE\suite_include.bas"
le programme suite_include.bas: - Code:
-
' essai de rajouter un nouvel include message "include sous_niveau" FICHE>niveaumoins< ²b$="include sous_niveau" ' la ligne dim c%,v$ devrait disparaitre dim c%,v$
le programme : - Code:
-
' Panoramic C:\TESTE\PROCEDURE\surface.bas
FICHE>|surface< ' préfice suplémentaire Surface ²long%=125:²larg%=100
message "normalement je devrais avoir Surface comme préfixe"+chr$(13)+"²long%="+str$(²long%)+" ²larg%="+ str$(²larg%) surface%=²long% * ²larg% [size=18] les fonctions: LOCAL>préfixe< : impose un nom à la place du programme. celui-ci à une liste: Un Deux.... FICHE>préfixe< : définit un préfixe à la variable FICHE>< ou FICHE_CLEAR , annule le préfixe. Il est évidant qu'il faut mettre un nom à la place de préfixe, comme FICHE>teste< Si le nom est précédé de "|" comme FICHE>"|teste<, la variable aura l'allure d'une variable "capitalisée" à la place d'une séparation par "_" Chacune de ces commandes doivent être seules sur la ligne, et sont détruite lors de la compilation. Je reprendrait plus tard pour l'éditeur PSPad Editor. Manque de temps
Dernière édition par cosmos70 le Ven 26 Nov 2010 - 17:04, édité 4 fois |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Variables locales et DIM dynamique Jeu 25 Nov 2010 - 9:51 | |
| J'ai chargé ton programme et je l'ai fait marcher. J'ai galéré un peu, au début, à cause des chemins d'accès aux fichiers, mais maintenant, tout est en ordre. Ca marche très bien !
Je note que tu préfixes les variables également dans les lignes composées par " : " - très bien. Ce qui me dérange un peu, c'est que tu le fais aussi à l'intérieur des strings délimités par guillemets, mais ça peut aussi avoir son intérêt. Il faudra que j'approfondisse cela.
L'idée d'ajouter dans le programme un petit morceau de code qui appelle un utilitaire pour se faire transformer soi-même est astucieuse.
Tout ceci représente une première approche, opérationnelle, pour résoudre le problème de conflits dans le nommage des variables, en particulier avec des INCLUDE de morceaux de code indépendants.
| |
| | | Invité Invité
| Sujet: Re: Variables locales et DIM dynamique Jeu 25 Nov 2010 - 10:24 | |
| Merci, Je le fais entre guillemets, car comment résoudre ce problème: message "²a%="+str$(²a%). ? Il faut une correspondance. Non?
Edit de nouveau. Je ne sais pas, mais il me semble que le cas dans une chaîne, ne se présente que lorsqu'on veut visualiser les variables. Le caractère "²", personnellement je ne l'ai jusqu'à présent jamais utilisé. Si il parait nécessaire de pouvoir éviter de faire cette représentation, le mieux est d'inventer une nouvelle commande, qui dise au programme de ne rien faire. Pour l'instant le programme est un laboratoire d'essai. J'ai bien l'intention de rajouter autre chose.
Il va falloir que je reprenne mon programme de débogage maintenant. Ça laissera le temps de réfléchir. |
| | | dragonno
Nombre de messages : 341 Localisation : Près de Toulouse Date d'inscription : 22/01/2009
| Sujet: Re: Variables locales et DIM dynamique Jeu 25 Nov 2010 - 14:23 | |
| En tous cas, Bravo ya pas à dire, tu m'épate chaque fois avec tes programmes Cosmos ! EDIT : Heu...ce sont pas tes programmes qui sont cosmos | |
| | | Invité Invité
| Sujet: Re: Variables locales et DIM dynamique Jeu 25 Nov 2010 - 19:13 | |
| Apparemment, il n'y a pas de problème avec PSPad en se servant du programme de Nardo. Pas besoin de sauvegarder. J'ai tellement fait de transformation avec le Loader de départ, que je n'en suis pas sure.
En ce qui concerne la transformation des variables dans une chaîne. Je me casse la tête pour voir quoi faire. Je pense avoir une idée, et elle est la suivante: Si on met un ² devant un mot, il le prend pour une variable. On pourrait dire que si elle n'est pas dans la liste, ce n'est pas une variable, mais du texte. Mais maintenant, le faite qu'elle ne soit pas dans la liste, ne signifie rien. Je lis le programme de haut en bas, mais le programme, en fonctionnement fait des sauts dans les sub-routines, et au moment de la lecture, on ne le sait pas!. Qui peut donner une réponse qui tienne la route. Je ne vois qu'une commande donnant un ordre avant de traiter la chaine, et ici je commence à l'envers, pour respecter l'emplacement des variables, qui à chaque changement s'agrandi vers la droite. Si je commençais progressivement, il faudrait recommencer le teste depuis le début de la ligne pour retrouver à quel endroit le mot se trouve.
Qui dit quelque chose qui me fasse avancer? |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Variables locales et DIM dynamique Jeu 25 Nov 2010 - 19:27 | |
| Bonsoir à tous !
Pour l'instant, je suis largué... j'ai pas trop le temps en ce moment à consacrer à pano, mais ton prog cosmos, m'intéresse au plus au point !! Dès que j'ai l'occasion, je me pencherai sur la discussion et je ferai le test... désolé de ne pas pouvoir t'aider pour l'instant... ;(
A+
| |
| | | dragonno
Nombre de messages : 341 Localisation : Près de Toulouse Date d'inscription : 22/01/2009
| Sujet: Re: Variables locales et DIM dynamique Jeu 25 Nov 2010 - 19:54 | |
| - Citation :
- J'ai tellement fait de transformation avec le Loader de départ, que je n'en suis pas sure.
Cosmos, même sur toi tu as fait une transformation "sûre" | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Variables locales et DIM dynamique Jeu 25 Nov 2010 - 22:26 | |
| Je pe,se qu'il faut faire comme avec des chênes de caractères et HTML ou d'autres langages. En principe, tout ce qui est entre guillemets doit être transmis tel quel, sauf quelques caractères qui ont une fonction spécifique. Si tu veux transmettre ces caractères tels quels (littéralement), il faut les préfixer par un caractère spécifique. Ainsi, je te suggère la chose suivante: Tu utilises le caractère "²" comme "signal". C'est un bon choix, bien que pas universel. Première suggestion: definis une commande du type PREFIXE>x< où x peut être n'importe quel caractère (par défaut, c'est ²) Deuxième suggestion: si tu veux laisser le ² dans une chaîne de caractères tel quel, décide de le doubler. Exemple: - Code:
-
print "²a$="+²a$ sera traité comme tu le fais actuellement print "²²a$="+²a$ imprimera ²a$=...
Donc, les séquences ²² seront traduits en ² sans autre transformation, alors qu'un ² seul déclenche la substitution. | |
| | | Invité Invité
| Sujet: Re: Variables locales et DIM dynamique Ven 26 Nov 2010 - 1:08 | |
| Ok, j'ai compris. Seulement il faut que je recommence. J'ai bien apporté une correction, mais cela ne marche que si il n'y a qu'un double ² dans une chaîne. Je me suis servi de instr, mais j'ai oublié que je marchais à reculons, c'est à dire de la fin vers le début de la ligne, et instr, c'est l'inverse. Aussi, si il y en a plusieurs, je suis marron. Je verrai cela surement demain, si pas de problème. Et ok pour le préfixe. J'y avais pensé, mais je ne voyais pas quel caractère qui puisse le remplacer et être discret dans le code. @+ |
| | | dragonno
Nombre de messages : 341 Localisation : Près de Toulouse Date d'inscription : 22/01/2009
| Sujet: Re: Variables locales et DIM dynamique Ven 26 Nov 2010 - 1:23 | |
| Comme préfixe je te propose une liste pour voir : "!" ">" ":"
il est rare que ces caractères débutent une instruction.
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Variables locales et DIM dynamique Ven 26 Nov 2010 - 1:59 | |
| Avec une commande comme celle que je te proposais, on peut plus facilement contourner le problème des ² qu'on veut utiliser tels quels. Il suffit alors, temporairement, de passer à ¤ ou ^ ou n'importe quoi d'autre pou revenir ensuite à ². D'ailleurs, le ^ me semble on bon choix aussi... | |
| | | Invité Invité
| Sujet: Re: Variables locales et DIM dynamique Ven 26 Nov 2010 - 8:37 | |
| Bonjour
Déjà je ne me servirais pas de ">" et ":",, dans le programme ils sont les séparateurs de mot. Alors il y a problème. Il y a aussi ° qui peut servir. Ce que je voulais c'était avoir un préfixe simple qui soit facile à afficher. J'avais choisi au départ & mais & est un caractère qui servir dans une chaîne, et une variable avec & est moins lisible &a% et ²a%, le 2ème cas est plus lisible pour une variable. ">" est un séparateur car sert dans les comparaisons.
Mais il n'y a pas de problème je vais y arriver. Il me faut un peu de temps "continu" et ne pas venir 5mn par 5mn, comme c’est généralement le cas.
Mais par curiosité, car ² est un caractère que j'ai jamais utilisé. A quoi sert ². Je sais bien qu'il y a carré, mais depuis que je programme, ça doit pas être tous les jours que vous utilisez ce caractère.
|
| | | Invité Invité
| Sujet: Re: Variables locales et DIM dynamique Ven 26 Nov 2010 - 10:41 | |
| Je viens d'apporter la modification concernant l'affichage dans un texte avec deux "²²", comme possibilité mentionné par Klaus. Il m'a fallu 5 mn au lieu des 2 heures d'hier avec un mauvais résultat. Il me restera à faire la fonction permettant de modifier le préfixe. Pour l'instant, je ne vois que ²^°£µ§&|~, avec une préférence pour les trois premiers |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Variables locales et DIM dynamique Ven 26 Nov 2010 - 12:54 | |
| Eh bien, bravo ! Et pour les préfixes, je préfère aussi les 3 premiers. Mais puisqu'avec la nouvelle fonction, chacun peut choisir son préfixe à sa guise... | |
| | | Invité Invité
| Sujet: Re: Variables locales et DIM dynamique Ven 26 Nov 2010 - 14:40 | |
| Je viens de rajouter l'instruction PREFIXE>< Le préfixe dans le programme est le caractère générique qui se met devant la variable, et que le programme remplacera par un mot devant celle_ci. Les préfixes que j'ai autorisés sont: ² ^ ° ~ & § | { } [ ]Un autre préfixe arrête le programme. Inutile de continuer si le programme ne peut décoder les variables! (j'espère être clair, vu que j'écris tout en étant à l'écoute de ma femme (ça m'arrive aussi! ) Edit de nouveau. Il est important de préciser que si on change de préfixe en cours de route, la suite, et dans l'ordre de lecture des lignes, y compris si il y a des includes, c'est ce préfixe qui est valable. Donc si changement en cours de programme, bien savoir si lors du décodage, le programme lira l'un ou l'autre préfixe. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Variables locales et DIM dynamique Ven 26 Nov 2010 - 15:00 | |
| Ca me paraît très bon comme ça. Il me parait évident que si l'on prend l'initiative de changer le préfixe par défaut, on ne peut pas s'attendre à ce que le préfixe reprenne sa valeur par défaut comme par magie. Il faut bien sûr en assurer la gestion, comme pour toute valeur par défaut que l'on prend l'initiative de changer. | |
| | | Invité Invité
| Sujet: Re: Variables locales et DIM dynamique Ven 26 Nov 2010 - 16:52 | |
| Je suis entrait de reprendre, car l'emplacement de la dernière fonction, n'est pas bonne. Elle n'est pas visitée par les Includes, et pour l'instant j'ai une erreur. Donc patience! |
| | | Invité Invité
| Sujet: Re: Variables locales et DIM dynamique Ven 26 Nov 2010 - 17:10 | |
| Terminé, j'ai modifié l'emplacement, et j'ai du apporter une petite modification à cause de cela. Soit vous télécharger la dernière version, soit vous retirez les lignes 84 à 101, et les remplacez par ligne 175, en dessous de [control0:], l'étiquette en ligne 175, après retrait des autre lignes. - Code:
-
if instr(trim$(a$),"PREFIXE>")> 0 a$=trim$(a$) :flag_efface%=1 prefix$= mid$( a$,instr( a$,"PREFIXE>")+8,1) if instr("²^°~&§|{}[]",prefix$)=0 message "préfixe choisi interdit! "+prefix$+chr$(13)+"seule les préfixes suivants sont possible: ² ^ ° ~ & § | { } [ ]"+chr$(13)+"arrêt du programme pour le modifier!":terminate end_if a$="" end_if
Je pense que maintenant, il ne devrait plus y avoir de problème. |
| | | dragonno
Nombre de messages : 341 Localisation : Près de Toulouse Date d'inscription : 22/01/2009
| Sujet: Re: Variables locales et DIM dynamique Ven 26 Nov 2010 - 23:19 | |
| - Citation :
- vu que j'écris tout en étant à l'écoute de ma femme
Je crois que c'est le plus difficile pour un programmeur Chouette on va pouvoir se faire son préfixe | |
| | | Invité Invité
| Sujet: Re: Variables locales et DIM dynamique Sam 27 Nov 2010 - 13:06 | |
| Oui, pour le programmeur, enfin pour moi, c'est de pouvoir resté concentré sur ce qu'on fait. Et faire un programme, par petit morceau, laisser tomber, reprendre plus tard, c'est pas facile.
Mais, en matière de programmation dans le programme que j'ai mis pour ce poste, si j'y arrive, je pense faire une "mini-bombe". Il y a longtemps, que je me dis, c'est quand-même dommage, que personne n'ait pensé, que pour faire ceci pour faire celà, à propos des chaines.! A chaque fois il faut faire une tonne de code, pour faire peu de choses. Et je me lance. Si ça marche, et il n'y a pas de raison, c'est le temps qu'il faut, parce que intellectuellement, il n'y a pas de problème, mais j'envisage de mettre des instructions parallèles. Vu que le programme intercepte celui qu'on est en train de créé, c'est peu-être le moment, d'essayer.
Qui sait? Peut-être que Jack sera séduit et pensera comme moi, que les instructions que je pense apporter, dans mon programme, serait une bonne intégration à Panoramic.
Les instructions que je pense mettre, n'ont pas de ralentissement dans le code. En faite, c'est de faire une commande pour une action, qui évite de faire des tas de lignes pour peu de choses, et c'est fréquent. Mais si c'était fait en Delphi, en assembleur, ou en C, non seulement le gain de temps serait gagnant-gagnant, comme dirait quelqu'un, mais une facilité de programmation sans équivalent pour ce type de travail. @+ |
| | | Contenu sponsorisé
| Sujet: Re: Variables locales et DIM dynamique | |
| |
| | | | Variables locales et DIM dynamique | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |