******************************************************************************* * * * STRING WRITER v4.2 * * Par J.Y Avenard * * (c) Septembre 1993 GHERKIN Production * * * ******************************************************************************* I- Presentation et Description. STRING-WRITER est un editeur de texte complet et rapide realise presque exclusivement en assembleur SATURN (5% de SYS.RPL,10% de DATA (graphiques, table de caracteres,message d'erreur etc...,85% de langage machine pour un total de 23ko.). Attention cette version est strictement personnelle avec numero de serie. Toutes diffusions et copies sont interdites. Merci de ta confiance en ce logiciel... N'hesite pas a en parler a ton entourage. Pour toutes remarques,demandes de nouvelles fonctions etc.. vous pouvez m'ecrire au 3615-3614 STORM bal GHERKIN ou m'‚crire … : Avenard Jean-Yves 16 rue de Savigny 91390 Morsang Sur ORGE Ou en EMAIL a : avenar_j@epita.fr Telephone : 33-1-69051236 II-Presentation generale : String-Writer v4.2 est une librairie elle apparait dans la pile sous la forme : "Library 1303 : STR..." 1-Installation Pour pouvoir l'utiliser il faut la stocker dans un port. -Mettez la librairie au niveau 1 de la pile. -Faites alors 0,1 ou 2 STO selon que vous ayez ou non une carte d'extension. Puis appuyez sur la touche ON et sans relacher appuyez sur la touche C. La calculatrice effectue un arret systeme. String Writer est installe et pret a fonctionner. 2-Premiere utilisation. Allez dans le menu librairie. Appuyez sur la touche blanche se situant sous le nom STRW s'il n'apparait pas dans le menu appuyez sur la touche NXT autant que necessaire. 3-Les differents programmes. Une fois dans ce menu apparait dans la barre divers noms. -EDIT -VISIT -Edit -Visit -NEW -Info -PUTFONT -SWINIT -XMIT2 -SRECV2 -CUT Voici la description de chacun des programmes. -EDIT : Edite l'objet au niveau 1 de la pile. -VISIT : Prend un 'GLOBAL NAME' puis edite le contenu de la variable -Edit : Meme fonction que EDIT mais si l'objet est un algebrique on l'edite avec l'Equation Writer.Si c'est une matrice on l'edite avec Matrix Writer.Si c'est un graphique on l'edite avec le menu GRAPH. Les STRINGS (chaines de caracteres) sont editees directement sans ajout de "" . Je conseille d'ailleurs de toujours utiliser Edit pour les strings car il faut beaucoup moins de memoire qu'avec EDIT -Visit : Comme VISIT mais cette fois ci de la meme facon qu'avec Edit. -NEW : Pour creer un nouvel objet -Info : Donne le numero de votre version et une info sur la librairie. -PUTFONT : Ressort la fonte utilisee par STRING-WRITER. -SWINIT : Passe en mode USER et attribue aux touches les fonctions : HP48s(x): LS +/- : EDIT RS +/- : VISIT DOWN : Edit RS DOWN : Visit DEL : NEW CLVAR : Place le contenu de la ligne de commande dans STRING-WRITER v4.2. S'il n'y a pas de ligne de commande alors place le contenu de LASTARG dans STRING-WRITER v4.2. HP48g(x): LS +/- : EDIT/VISIT DOWN : Edit ) LS DOWN : Visit DEL : NEW LASTARG : Place le contenu de la ligne de commande dans STRING-WRITER v4.2. XMIT2 : Equivalent a la commande XMIT mais permet des transferts jusqu'a 7500 bauds via l'infra-rouge et 15000 bauds via la prise serie (temps moyens calcules par rapport au temps mis par la fonction XMIT). Elle prend en arguments au niveau 2 une chaine de caracteres et au niveau 1, un reel correspondant a la vitesse d'emission. Elle renvoie 1 si le transfert a reussie ou 0 si elle a ete interrompue. 0: 1200 bauds 1: 1900 bauds 2: 2400 bauds 3: 3800 bauds 4: 4800 bauds 5: 7500 bauds (vitesse maximum via l'IR) 6: 9600 bauds 7: 15000bauds (vitesse maximum via laRS-232) Voici quelques temps mis pour transferer un texte de 5000 caracteres avec la fonction XMIT2. Vitesse : temps (en secondes).) 0 : 46.73 1 : 29.34 2 : 23.50 (vitesse de transfert via l'IR en utilisant la fonction XMIT) 3 : 14.81 4 : 11.91 5 : 7.55 6 : 6.13 (vitesse de transfert maximum avec la fonction XMIT) 7 : 3.93 (vitesse de transfert maximum avec la fonction XMIT2) -SRECV2: Fonction equivalente a SRECV mais permet elle aussi des transfert a une vitesse tres elevee. De plus elle permet de recevoir des textes de plus de 256 octets. Elle prends en arguments au niveau 2 le nombre maximum de caracteres a recevoir et au niveau 1 un reel representant la vitesse de transferts. Elle renvoie au niveau 2 la chaine recue et au niveau 1 : 1 si la reception a reussi ou 0 si la reception a ete interrompue ou si des erreurs se sont produites. -CUT : Formatte un texte de facon a ce que celui-ci tienne sur 22 caracteres de Large. III-Presentation succinte des differentes commandes de STRING-WRITER. Voici un resume des fonctions de STRING-WRITER v4.2: En mode edition: -Touches de direction :se deplacer dans le texte -DEL :efface le caractere a droite du curseur -<= :efface le caractere a gauche du curseur -MTH :Affiche la liste de toutes les lignes precedees par *. Pour voir tous les labels re-appuyer sur MTH autant de fois que necessaire. Pour ce rendre a un label,appuyer sur la touche numerique correspondant au numero. -PRG :Mode insertion/recouvrement. Action en flip/flap. Fonction accessible par ALPHA Right-Shift ALPHA. -CST :Tabulation. -VAR :Mode rapide/lent ,influence le deplacement ainsi que l'effacement de caracteres. Action en flip/flap. -ENTER :Sauvegarde le texte en cours puis retour au RPL -ON :Quitter STRING-WRITER v4.2 avec l'ancien texte -NXT :Menu suivant LEFT SHIFT ( LS ) +: -MTH :Envoi la selection vers le port Infra-rouge ou Serie. -PRG :Affiche les fins de lignes. -CST :Passage en mode edition en continu avec retour a la ligne tous les 22 caracteres. -VAR :puis un chiffre compris entre 0 et 9 : Place dans la memoire correspondante la position courante. -UP :PAGE-UP -DOWN :PAGE-DOWN -LEFT :PAGE-LEFT -RIGHT :PAGE-RIGHT -NXT :Menu precedent - +/- :Affiche le menu EDIT ( <-SKIP,SKIP->,etc.. ) - 1 :Saisie un ; RIGHT SHIFT ( RS ) +: -MTH :Permet de configurer le port serie et les parametres d'emission. Le temps saisie pour la pause entre chaque ligne durant l'emission est en 1/16s. -PRG :Passage en mode AUTO-INDENTATION. -CST :Permet de modifier la valeur de la tabulation. -VAR :puis un chiffre compris entre 0 et 9 : Place le curseur a la position sauvegardee dans la memoire correspondante. -UP :MAX-UP -NXT :Enleve/Remet la barre des menus. -DOWN :MAX-DOWN -LEFT :MAX-LEFT -RIGHT :MAX-RIGHT -DEL :HP48g(x) : Efface tous les caracteres de la ligne courante situes apres le curseur. HP48s(x) : Equivalent a la fonction DEL L (voir plus bas) - <= :Sur HP48g(x) uniquement : Efface les caracteres compris entre le debut de la ligne et le curseur. -ON :eteint la HP48. LES TOUCHES DE MENUS: Chaque touche se trouvant sous un nom de fonction (ex:ASCII) permet d'executer une des differentes commandes de STRING-WRITER v4.2 *1er menu. ASCII :Permet de saisir le code d'un caractere sous la norme ASCII.Elle prend en argument un entier compris entre 0 et 255 LS ASCII :Table de tous les caracteres ASCII de la fonte. GOTO :Permet de se rendre directement a une ligne du texte LS GOTO :Permet de se rendre directement a un caractere:ex le 485eme ->BEG :Place le curseur sur le debut de la selection. ->END :Place le curseur sur la fin de la selection. DEL L :Efface la ligne si elle contient des caracteres sinon enleve le retour chariot. LS DEL L :Efface tous les caracteres de la ligne courante situe avant le curseur. RS DEL L :Efface les caracteres compris entre le curseur et la fin de la ligne. INFOS :Affiche diverses informations sur le texte edite et l'etat de la memoire. Maintenir la touche appuyee pour voir l'info. *2eme menu :Les commandes de bloc. BEGIN :positionne le marqueur de debut de selection END :positonne le marqueur de fin de selection. L'appuie de SL puis de BEGIN ou END place le mot ou se trouve le curseur dans la selection. CUT :Copie la selection dans la memoire (CLIPBOARD),puis efface la selection du texte COPY :Place la selection dans le CLIPBOARD PASTE :Recopie le texte enregistre dans le clipboard a la position courante du curseur. DEL :efface la selection du texte *3eme menu :Commandes de Recherche et de Remplacement. FIND :Affichage d'un ecran demandant la chaine a trouver dans le texte. Cette chaine est limitee a 21 caracteres LS FIND :Place la selection dans le motif de recherche puis FIND REPL :Permet la saisie de l'argument de recherche,ainsi que de l'argument de remplacement. LS REPL :Meme fonction que LS FIND mais lance le REPL. RS REPL :Place la selection dans le motif de remplacement puis REPL NEXT :Rechercher l'occurence suivante de la chaine saisie dans FIND (PATTERN).En cas de reussite,l'occurence est placee dans la selection. R :Remplace la selection par la chaine de remplacement saisie avec REPL LS R :Meme fonction mais en utilisant le remplacement special (Cf chapitre concernant l'utilisation du Find/Replace) R/N :Remplace la selection puis recherche l'occurence suivante (i.e R puis NEXT) LS R/N :Equivalent a LS R puis NEXT. ALL :remplace toutes les occurences du texte en affichant les differentes operations.Un appui sur la touche ON permet d'arreter le remplacement. LS ALL :remplace toutes les occurences du texte sans affichage.D'ou un remplacement plus rapide.Il est impossible de stopper cette operation. RS ALL :idem a precedemment mais en eteignant l'ecran d'ou une acceleration d'environ 12% par rapport a ci-dessus NOTE QUAND A L'UTILISATION DES COMMANDES DE SAISIE D'ARGUMENT: Lors de la saisie d'argument pour les commandes ASCII,GOTO,FIND etc... un appuie sur la touche ON permet: -Si aucun caractere n'a ete saisi le retour a l'edition du texte -Si des caracteres ont ete saisis,l'effacement de la ligne d'entree. Les fonctions PRG,CST,VAR,MAX-LEFT,MAX-RIGHT sont toujours actives. Les autres sont inoperantes. -Dans le menu FIND et le menu REPLACE il est possible d'appeller la commande ASCII,et la visualisation de toute la fonte. *4eme menu (Menu EDIT) <-SKIP :Place le curseur au debut du mot precedent. LS <-SKIP:Execute <-SKIP et place le mot ainsi trouve dans la selection. SKIP-> :Place le curseur au debut du mot suivant. LS SKIP->:Execute SKIP-> et place le mot dans la selection. <-DEL :Efface les caracteres compris entre la position du curseur et le debut du mot precedent. RS <-DEL :Efface les caracteres depuis le debut de la ligne courante jusqu'a la position du curseur. DEL-> :Efface les caracteres compris entre la position du curseur et le debut du mot suivant. RS DEL-> :Efface les caractes compris entre la position du curseur et la fin de la ligne courante. DEL L :Efface la ligne si elle contient des caracteres sinon enleve le retour chariot. LS DEL L :Efface tous les caracteres de la ligne courante RS DEL L :Efface les caracteres compris entre la position du curseur et la fin de la ligne. INFOS :Affiche diverses informations sur le texte edite et l'etat de la memoire. Maintenir la touche appuyee pour voir l'info. IV- Manipulation de la selection et mouvements de blocs. Lors de l'utilisation des commandes BEGIN et END,le texte place entre les deux marqueurs apparait alors en inversion video,representant la selection. Attention BEGIN doit etre superieur a END. Vous pouvez alors comme sur tout traitement de texte de Micro-ordinateur faire du copier/coller. V-Utilisation des commandes de recherche et de remplacement. *Recherche de caracteres. Pour rechercher une sequence de caracteres, allez dans le menu FIND,saisir le motif de recherche puis ENTER. Puis choisir le mode de recherche : Differencier les majuscules des minuscules ou non. Puis ENTER. Un appuie sur la touche ON permet a tout moment de sortir du menu FIND ( ou REPL). Si le motif de recherche est vide apparait alors le message d'erreur : "Nonexistent Pattern". Si aucune occurence n'est trouvee le message : Can't Find Pattern apparait. Sinon la selection est placee sur l'occurence trouvee. En appuyant sur la touche NEXT, STRING WRITER recherche la prochaine occurence. Remarque : Le code ASCII 0 est un meta-caractere; Il permet la recherche de tous caracteres. Exemple rechercher T*TO (* est le caractere de code ascii 0) permet de trouver des mots comme TaTO,TATO,TZTO etc... *Recherche et remplacement. Apres avoir saisis tous les arguments necessaires dans le menu REPL, la selection est placee sur la premiere occurence trouvee. -R remplace alors la selection par la chaine saisie dans REPL. -R/N remplace la selection puis recherche l'occurence suivante (Replace/Next). -ALL effectue un remplacement de toutes les occurences a partir de la position du curseur. 1-Remplacement de la selection. Il est possible de remplacer tout un segment de texte par une chaine. Pour cela en utilisant les commandes BEGIN et END ,placer la selection sur le texte a remplacer. Allez dans le menu REPL. Effacer la ligne de recherche (appuyez sur ON si elle n'est pas vide) puis ENTER. Saisir la chaine de remplacement puis ENTER. Le message "Nonexistent Pattern" apparait. Appuyez alors sur la commande R : La selection est remplacee. 2-Utilisation des macros dans le REPLACE. Il est possible de faire de la manipulation de chaine grace a la commande REPLACE. Par exemple ajouter un espace tous les 5 caracteres, chercher 5 caracteres quels qu'ils soient puis effectuer une inversion sur ces caracteres. Exemples. a) Comment ajouter un espace tous les cinq caracteres. -Allez dans le menu REPL -Mettre 5 caracteres de code ascii 0 dans la ligne de recherche. -ENTER -Mettre 5 caracteres de code ascii 0 dans la ligne de remplacement -AJouter un ESPACE (touche SPC ou code ascii 32) -ENTER La selection est placee sur les 5 caracteres apres la position du curseur precedent. -Pour remplacer uniquement ces 5 caracteres appuyez sur LEFT SHIFT puis R. -Pour remplacer ces 5 caracteres puis rechercher les 5 suivants appuyer sur LEFT SHIFT puis R/N -Pour remplacer tous les caracteres : Appuyez sur ALL. Le message "Use Special Replace ?" apparait. -Appuyez sur la touche Y : Tous les caracteres sont remplaces. b) Rechercher 5 caracteres puis les inverser ( ex: SALUT deviendra TULAS ) -Allez dans le menu REPL -Mettre 5 caracteres de code ascii 0 dans la ligne de recherche. -ENTER -Mettre le code ascii 15,puis le code ascii 14,puis le code ascii 13 etc.. jusqu'… 11. -ENTER -Pour remplacer uniquement ces 5 caracteres appuyez sur LEFT SHIFT puis R. -Pour remplacer ces 5 caracteres puis rechercher les 5 suivants appuyer sur LEFT SHIFT puis R/N. -Pour remplacer tous les caracteres : Appuyez sur ALL. Le message "Use Special Replace ?" apparait. -Appuyez sur la touche Y : Tous les caracteres sont remplaces. *Explication du fonctionement du REPLACE special. Lorsque le REPLACE trouve dans la sequence de remplacement le code ascii 15, il va le remplacer par le cinquieme caractere de la selection. D'une maniere generale,pour mettre le n ieme caractere de la selection, on utilise le code ascii (10+n) Le caractere de code ascii 0 est utilise comme compteur. C'est a dire que le premier code ascii 0 represente le 1er caractere de la selection,le deuxieme code ascii 0 represente le deuxieme caractere de la selection etc... Exemple: Comment rechercher 6 caracteres puis les remplacer par: "Le 1er est x1,6 est x6" , ou x1 est le premier caractere et x6 est le sixieme. Exemple : "COUCOU" sera remplace par "Le 1er est C,6 est U" -Mettre 6 caracteres de code ascii 0 dans la ligne de recherche. -ENTER -Mettre : "Le 1er est" ,mettre le code ascii 11 ou le code ascii 0. -Mettre : ",6 est " , mettre le code ascii 16 ( pour le sixieme) -ENTER -Pour remplacer uniquement ces 6 caracteres appuyez sur LEFT SHIFT puis R. -Pour remplacer ces 6 caracteres puis rechercher les 6 suivants appuyer sur LEFT SHIFT puis R/N. -Pour remplacer tous les caracteres : Appuyez sur ALL. Le message "Use Special Replace ?" apparait. -Appuyez sur la touche Y. : Tous les caracteres sont remplaces. VI-Note quand a l'utilisation du menu ASCII ou de la visualisation de la fonte. Dans le menu ascii, apres avoir saisi le code ascii a inserer dans le texte, appuyez sur la touche ENTER sans la relacher. Le code ascii sera insere dans le texte plusieurs fois tant que la touche ENTER n'aura pas ete relachee.La vitesse de la repetition est fonction du mode RAPIDE ou LENT. VII-Changement de fonte. En utilisation normale, STRING-WRITER edite le texte en utilisant la fonte situee en ROM et avec un ecran contenant 8 lignes de 22 caracteres (sans menu). Il est possible de changer cette fonte et d'avoir a l'ecran jusqu'a 10 lignes de 22 caracteres. a) Changer la fonte. Stocker la fonte que vous desirez utiliser sous le nom global : 'FONT' En sachant que STRING-WRITER cherche l'objet 'FONT' en premier lieu dans le repertoire courant puis remonte jusque dans le HOME puis dans les ports 0,1 et 2. Si 'FONT' n'est pas trouve alors on edite avec la fonte de la ROM. 'FONT' peut aussi contenir le chemin a utiliser, place dans une liste : ex : { HOME FONTE.DIR F7.0 } ou encore : { :0: { BACKUP FONTES.DIR F6.1 } } Si 'FONT' contient une liste vide, alors String-Writer editera le texte avec la fonte presente en ROM. b) Augmenter le nombre de ligne en edition. Une fonte se presente sous la forme d'un graphique GROB 6 * 2048 ou GROB 7 * 2048 ou GROB 8 * 2048. Si 'FONT' contient : -Un GROB 6 * 2048, alors STRING-WRITER editera le texte avec des caracteres de bitmap 6*6 , ce qui permet d'avoir 10 lignes a l'ecran. -Un GROB 7 * 2048, alors STRING-WRITER editera le texte avec des caracteres de bitmap 6*7 , ce qui permet d'avoir 9 lignes a l'ecran. -Un GROB 8 * 2048, alors STRING-WRITER editera le texte avec des caracteres de bitmap 6*8 , ce qui permet d'avoir 8 lignes a l'ecran. VIII- Configurer STRING-WRITER En standard STRING-WRITER lors du lancement edite avec la barre de menu ,en vitesse lente, en mode insertion. Grace a la variable 'SWPAR' il est possible de changer ces parametres. 'SWPAR' contient un entier systere ( BINARY INTEGER ex: # 5h ). Cet entier doit etre compris entre #0d et #15d ( decimal ) ou entre #0 et #F ( hexadecimal ). Correspondance de SWPAR : --------------------------------------------- |SWPAR | MENU | VITESSE | INSERTION | ALPHA | --------------------------------------------| | # 0h | oui | lente | oui | non | --------------------------------------------| | # 1h | non | lente | oui | non | --------------------------------------------| | # 2h | oui | rapide | oui | non | --------------------------------------------| | # 3h | non | rapide | oui | non | --------------------------------------------| | # 4h | oui | lente | non | non | --------------------------------------------| | # 5h | non | lente | non | non | --------------------------------------------| | # 6h | oui | rapide | non | non | --------------------------------------------| | # 7h | non | rapide | non | non | --------------------------------------------| | # 8h | oui | lente | oui | oui | --------------------------------------------| | # 9h | non | lente | oui | oui | --------------------------------------------| | # Ah | oui | rapide | oui | oui | --------------------------------------------| | # Bh | non | rapide | oui | oui | --------------------------------------------| | # Ch | oui | lente | non | oui | --------------------------------------------| | # Dh | non | lente | non | oui | --------------------------------------------| | # Eh | oui | rapide | non | oui | --------------------------------------------| | # Fh | non | rapide | non | oui | --------------------------------------------| IX-Pour aller plus loin. Il est possible d'utiliser String-Writer d'une facon plus poussee, afin de l'integrer dans divers programmes ( Assembleur, Base de Donnees , Noyau , Utilitaires etc...). Il est par exemple possible de recreer le programme d'edition d'erreur de l'ASMFLASH : ER Ainsi , en cas d'erreur on ira directement a la position de l'erreur pour modifier le source. Pour cela, on utilisera le XLIB 1303 12. Cet objet est le programme principal de String-Writer. Il prend en argument : 3: GROB 6*2048 ( Une fonte ) 2: "string" 1: # binary integer Ou "string" est la chaine a editer et le Binary Integer est decompose comme suit : # aaaaabbbbbccccc0h Ou : aaaaa : Position en hexadecimal sur 5 quartets du debut de la selection. bbbbb : Position en hexadecimal de la fin de la selection. ccccc : Position ou sera place le curseur au debut de l'edition. Ex : Si le Binary Integer est : # 000020003F000010h Alors on editera le texte avec la selection allant du 2eme au 63eme caracteres. Le curseur etant place sur le 1er caractere. X-Remerciements. Beta-testeurs : Douglas R. Cannon,Christophe Nguyen,Francois-Xavier Leroy, Stephane Doat,Christian Bourgeois,Mohamed Fatri, Etienne de Foras,Cyrille de Brebisson. Gerald Squelart, Regis Duchesne,Marc Vogel. Remerciements particuliers a : - Christian Bourgeois pour son association dans STRING-WRITER 2.0 et sans qui cet editeur n'aurai jamais vu le jour. - Douglas R. Cannon pour la traduction de cette documentation. - Mohamed Fatri pour ses suggestions et l'environement Sys-RPL - Marc Vogel pour son programme RCLFONT - Detlef Muller & Raimond Hellstern pour leur RPL.LIB. - Maubert Electronic pour leur soutien et aide. En cas de probleme contactez STEPHANE a Maubert Electronic 49 bvd St Germain 75005 Paris ( FRANCE ) XI- Autres produits pour HP48 en domaine public. -Font-Writer : Un editeur de fonte compatible String-Writer (toutes versions) -HP ASM : Assembleur Saturn. -TERMHP : Emulateur VT100. -LABY : Createur et Generateur de Labyrinthe 3D. Et bien d'autres choses encore....