mirror of
https://github.com/HEYAHONG/emu8051.git
synced 2025-05-08 05:26:41 +08:00
ChangeLog is now automatically generated from git log output
This commit is contained in:
parent
34513fc19f
commit
6281db4c82
490
ChangeLog
490
ChangeLog
@ -1,490 +0,0 @@
|
||||
2013-09-07 Hugo Villeneuve <hugo@hugovil.com>
|
||||
* Fix compiler warnings
|
||||
* Fix error with CJNE instruction.
|
||||
Error report and patch submission by Tobias Diedrich
|
||||
(ranma at tdiedrich.de).
|
||||
|
||||
2011-12-11 Hugo Villeneuve <hugo@hugovil.com>
|
||||
* Added optional size parameter when dumping memory.
|
||||
* Created two separate executables, emu8051-cli (default)
|
||||
and optional emu8051-gtk if Gtk+ is detected.
|
||||
|
||||
2011-10-29 Hugo Villeneuve <hugo@hugovil.com>
|
||||
* Fixed SJMP error and improved columns and rows sizing.
|
||||
Error reported and patch submitted by Pierre Ferrari
|
||||
(piferr4ri at gmail.com).
|
||||
|
||||
2010-03-19 Hugo Villeneuve <hugo@hugovil.com>
|
||||
* Reintroduced the console mode if no GTK+ librairies are
|
||||
detected. The default is to build the GUI if GTK+ is detected,
|
||||
but the console mode can always be forced by using
|
||||
"--enable-gui=no" as a configure option.
|
||||
|
||||
2009-02-09 Hugo Villeneuve <hugo@hugovil.com>
|
||||
* Updated Free Software Foundation address.
|
||||
|
||||
2008-11-05 Hugo Villeneuve <hugo@hugovil.com>
|
||||
* Added licencing informations for each source file.
|
||||
* Removed some debugging messages.
|
||||
|
||||
2008-04-28 Hugo Villeneuve <hugo@hugovil.com>
|
||||
* Removed gtk+-1.0 support, now requires gtk+-2
|
||||
|
||||
2004-05-07 Hugo Villeneuve <hugo@hugovil.com>
|
||||
* Corrected a bug with the CJNE instruction.
|
||||
* Modified the directory layout and autoconf files.
|
||||
* Added support for GTK2.
|
||||
* Added project to subversion.
|
||||
|
||||
2002-11-12 Hugo Villeneuve <hugo@hugovil.com>
|
||||
* Removed some warnings for GCC 3.2: replaced <fstream.h> by <fstream>
|
||||
and <iostream.h> by <iostream>.
|
||||
* Added "using namespace std;" in EmuGtk.hpp (for GCC 3.2)
|
||||
* Removed all unused variables
|
||||
* Corrected error in CPU8051.cpp, in function:
|
||||
'void CPU8051::IntMemBitInfo( unsigned int BitAddress, char *Text )'
|
||||
Modified this:
|
||||
'sprintf( &Text[ TextLength ], ".%X", BitAddress );'
|
||||
instead of:
|
||||
'sprintf( &Text[ TextLength ], ".%X" );'
|
||||
* In Opcode2cpp.pl (line 767), modified for GCC 3.2:
|
||||
'print INST_IMP " funcptr[$i]=&CPU8051::$ifunc;\n";'
|
||||
instead of:
|
||||
'print INST_IMP " funcptr[$i]=&$ifunc;\n";'
|
||||
* EmuGtk.cpp, added '#include <iostream>'
|
||||
* Modified the return type of some functions to void to remove warnings.
|
||||
* In function 'void RegWin::Show( CPU8051 *CPU )' (RegWin.cpp), removed all
|
||||
the '\n' in 'gtk_clist_set_text' calls (to fix a display problem)
|
||||
|
||||
1999-04-27 Hugo Villeneuve <hugo@hugovil.com>
|
||||
* Ajoute les fonctions DumpInt dans EmuConsole.hpp ainsi que ReadInt
|
||||
dans CPU8051.hpp. Corrige des bugs dans WriteInt et WriteExt.
|
||||
|
||||
* Corrige l'implementation des timers. Les 4 modes ont ete testes et
|
||||
semblent bien fonctionner maintenant. LEs flags sont mis correctement
|
||||
et les timers augmentent maintenant (au lieu d'etre decrementes).
|
||||
* Ajoute un fichier timer.hex pour tester les timers.
|
||||
|
||||
1999-04-22 Hugo Villeneuve <hugo@hugovil.com>
|
||||
* Ajoute les fonctions ME, MI et MP (voir definitions dans
|
||||
EmuConsole.cpp). Ajoute les fonctions membres WriteExt et WriteInt
|
||||
dans la classe CPU8051 afin de suivre la logique de l'espace
|
||||
memoire du 8051. WriteExt permet de modifier la memoire externe
|
||||
qui va de $00 a $FFFF (et non de $100 a $FFFF comme c'etait le cas
|
||||
avant). De meme, WriteInt permet de modifier la memoire interne qui
|
||||
va de $00 a $FF (incluant les SFR). Meme si la memoire externe
|
||||
contient les adresses $00 a $FF, il n'y a pas de conflit avec la
|
||||
memoire interne de $00 a $FF car la memoire externe est accedee avec
|
||||
l'instruction MOVX alors que la memoire interne l'est avec les
|
||||
instructions MOV (direct ou indirect).
|
||||
|
||||
* Renomme l'option DD du menu pour DE (dump External data memory).
|
||||
Change la description de l'option DI du menu pour Dump External
|
||||
Data Memory.
|
||||
|
||||
* Ajoute la fonction ReadExt dans la classe CPU8051, toujours pour
|
||||
la logique de la memoire du 8051. Ajoute la fonction DumpExt dans la
|
||||
classe EmuConsole pour dumper la memoire externe.
|
||||
* Ces nouvelles fonctions ont ete testees et semblent bien fonctionner.
|
||||
|
||||
1999-04-09 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Refait marche le RunningState avec les classes.
|
||||
* Reconnecte les signaux aux boutons Trace, Run, Reset et Quit.
|
||||
* Ajoute bouton Step qui ajoute un breakpoint a la ligne suivante
|
||||
et passe en RunningState. Pratique lorsqu'arrive un CALL et qu'on ne
|
||||
veut pas y entrer contrairement a Trace.
|
||||
|
||||
1999-04-06 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Creation de EmuConsole.hpp et EmuConsole.cpp
|
||||
* Cette nouvelle archive est presque rendue au meme niveau que
|
||||
l'ancienne. Vous allez pouvoir commencer a laisser faire l'ancienne
|
||||
et vous concentrer sur celle-ci.
|
||||
|
||||
(Les modifs annoncee se rapportent a l'ancienne archive mais elles ont ete
|
||||
ramenee dans celle-ci par Jonathan St-Andre)
|
||||
1999-04-05 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Corrige qq malfonctions dans exec de mainconsole.cpp (nb d'inst.
|
||||
peut etre l'infini, caractere est attendu au clavier seulement
|
||||
si l'execution est arretee par une touche.
|
||||
* Corrige probleme d'instructions sans operandes mal desassemblees
|
||||
(il ne faut pas ecrire le caractere ' ' dans la chaine, il faut
|
||||
utiliser sprintf avec " " a la place car sprintf termine la chaine
|
||||
avec un 0 a la fin. La chaine n'etait pas terminee par un 0 et elle
|
||||
affichait du garbage de la memoire)
|
||||
* Corrige probleme dans disasm.cpp en rapport avec addr11 qui ne
|
||||
prenait pas opcode mais memoire[opcode] (je devais etre chaud quand
|
||||
j'ai ecrit ca).
|
||||
* Bouton Run se change en Stop dans l'interface Gtk+ lorsque l'on
|
||||
clique dessus et le cpu se met en mode execution. Les fonctions de
|
||||
l'interface restent disponibles. N'importe quelle action dans
|
||||
l'interface(excepte le fait de cliquer dans les fenetre memoire
|
||||
et programme) cause l'arret de l'execution et la mise a jour
|
||||
de l'affichage.
|
||||
* Il est possible de placer des breakpoints pendant qu'il est
|
||||
dans le "RunningState".
|
||||
* Enleve les pixmaps sur les boutons dans l'interface Gtk+
|
||||
* Ajoute verification de breakpoint deja existant dans
|
||||
setbreakpoint.
|
||||
|
||||
Hugo Villeneuve <hugo@hugovil.com>
|
||||
|
||||
* Modifie l'affichage de disasm pour que les operandes soient alignees.
|
||||
* Modifie la fonction DP pour qu'elle prenne l'adresse du PC par
|
||||
defaut si aucune adresse n'est specifiee.
|
||||
|
||||
* Erreur avec l'instruction ACALL qui ne calculait pas l'adresse
|
||||
correctement et qui ne poussait pas l'adresse de retour sur la pile.
|
||||
Il est important que le PC soit incremente de 2 avant de calculer
|
||||
addr11 et de pousser le PC sur la pile...
|
||||
Il faut aussi modifier le dessassemblage de cette instruction qui
|
||||
n'affiche que la deuxieme operande (adresse de 8 bits), alors que
|
||||
l'adresse est sur 11 bits...
|
||||
* Erreur avec l'instruction RET( fichier siae1.asm adresse 03A4) ,
|
||||
affiche RET @%K
|
||||
* Ajoute la possibilite d'arreter l'execution du programme en pesant
|
||||
sur n'importe quelle touche grace a la fonction kbhit().
|
||||
* Ajoute les fonctions SB, RB et DB pour les breakpoints dans le
|
||||
mode console. L'execution se fait jusqu'au breakpoint. Une fois
|
||||
arrive au breakpoint, si on fait de nouveau EM, on peut continuer
|
||||
l'execution du programme passe ce breakpoint. Autrement dit, EM
|
||||
ne verifie pas si la premiere instruction qu'il execute est un
|
||||
break point, ce qui est pratique pour continuer l'execution du prog
|
||||
apres un breakpoint.
|
||||
|
||||
1999-03-31 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Reecriture de TOUT les sources en imbriquant au maximum
|
||||
dans des classes pour que ce soit plus lisible et reutilisable.
|
||||
* Les classes sont CPU8051, Memory, EmuGtk, MemWin, RegWin, PgmWin
|
||||
et les exceptions.
|
||||
* Tout est en anglais pour rendre le programme disponible sur
|
||||
internet.
|
||||
* Je n'ai pas encore refais l'interface Console en classes donc
|
||||
elle n'est pas incluse dans cette archive. Il faudrait vraiment
|
||||
la refaire en tant que classe.
|
||||
* Ajout fichiers TODO, CREDITS et COPYING (license GPL)
|
||||
|
||||
1999-03-30 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Corrige bug lors du desassemblage dans l'interpretation des
|
||||
adresses directes dans 0-7F. disasm.cpp
|
||||
* Corrige bug dans l'opcode 0x85, ajoute conditions particulieres
|
||||
pour cette instruction dans script Perl et dans desassemblage.
|
||||
Les operandes de cette instruction sont inversees dans la memoire
|
||||
programme. Ex.: MOV 50H,51H est ecrit 85 51 50 dans la memoire
|
||||
programme.
|
||||
|
||||
Hugo Villeneuve <hugo@hugovil.com>
|
||||
|
||||
* Bug dans les instructions ayant un mode d'adressage direct qui
|
||||
utilisent des adresses dans 0-7F. Le desassembleur interprete les
|
||||
adresses comme etant des adresses de bit.
|
||||
* Bug dans l'opcode 0x85 MOV direct,direct. La source et la
|
||||
destination sont inverses dans le desassemblage et dans l'execution.
|
||||
|
||||
1999-03-29 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Remplace string::erase pour string::replace partout, g++ a
|
||||
l'universite ne connait pas encore string::erase, c'est trop recent.
|
||||
* Ajoute "-w" pour disabler les warnings et "-fhandle-exceptions"
|
||||
pour activer les exceptions a l'universite.
|
||||
|
||||
Pascal Fecteau <fectea00@gel.ulaval.ca>
|
||||
|
||||
* Ajoute .h comme extension aux fichiers inclus, sinon ca ne
|
||||
fonctionne pas a l'universite.
|
||||
|
||||
Pascal Fecteau <fectea00@gel.ulaval.ca>
|
||||
Hugo Villeneuve <hugo@hugovil.com>
|
||||
|
||||
* Corrige une erreur dans les instructions AJMP addr11
|
||||
|
||||
1999-03-28 Hugo Villeneuve <hugo@hugovil.com>
|
||||
* Modification de la presentation de "Dump Register" sur la console.
|
||||
Beaucoup plus facile a lire maintenant.
|
||||
* Correction d'un bug dans l'instruction DA (opcode 0xD4).
|
||||
|
||||
1999-03-27 Hugo Villeneuve <hugo@hugovil.com>
|
||||
* Correction d'un probleme avec l'instruction CJNE.
|
||||
* Correction de bugs dans LoadHexFile (voir 1999-03-22)
|
||||
|
||||
Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
|
||||
* Augmente la hauteur de la fenetre Internal RAM.
|
||||
* Correction de probleme avec tous les XCH et XCHD, l'operande source
|
||||
n'etait pas modifiee (Trouve par Hugo et suggestion de correction par
|
||||
Hugo).
|
||||
* Ajout de P0, P1, P2 et P3 dans la fenetre des registres.
|
||||
(Suggestion d'Hugo).
|
||||
* View -> Data Memory Dump et View -> Program Memory Dump sont
|
||||
fonctionnels. On ne peut visionner que les 16384 premiers octets.
|
||||
Il ne veut pas prendre 65536 lignes dans une scrolled window.
|
||||
Probablement parce que 18colonnes x 65536lignes = 1179648 cellules
|
||||
est beaucoup trop.
|
||||
* J'ai remarque qu'avec Gtk, on peut facilement changer les raccoucis
|
||||
dans les menus. Pour associer "View -> Program Memory Dump" au
|
||||
raccourci "Alt-2" par exemple, il suffit d'aller dans le menu "View",
|
||||
se placer au dessus de "Program Memory Dump" et appuyer "Alt-2".
|
||||
Le menu se modifiera automatiquement pour afficher "Alt-2" au bout
|
||||
de la ligne et desormais, lorsque vous appuierez "Alt-2", l'action
|
||||
sera executee. Ca dure seulement durant la session presente.
|
||||
* Reduit la taille de la fenetre principale en largeur de 120 pixels
|
||||
et en hauteur de 20 pixels.
|
||||
|
||||
1999-03-25 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Fenetre dump connais la position ou on clique dedans.
|
||||
* Generalise dans une classe la fenetre memorydump, il sera plus
|
||||
facile d'ajouter plusieurs fenetres memory dump a partir du menu
|
||||
plus tard.
|
||||
* Implemente Run jusqu'a un breakpoint (si aucun breakpoint,
|
||||
loop sans fin -> il faut killer).
|
||||
* Suffit de cliquer sur une ligne de programme dans Gtk pour placer
|
||||
ou retirer un breakpoint. Les breakpoints apparaissent comme une
|
||||
asterisque (*) a droite de l'adresse dans la fenetre program.
|
||||
* Ajoute bouton Run dans interface Gtk
|
||||
* Implemente quelques fonctions necessaires au breakpoints.
|
||||
* Change un peu le layout
|
||||
* Enleve image de fond (cause leger delai au chargement)
|
||||
* Fait un peu de menage dans fichiers relatifs au Gtk
|
||||
|
||||
1999-03-23 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Changement des champs GTK_TEXT des fenetres Registre, Program et
|
||||
Internal RAM pour des champs GTK_CLIST. Plus beau, moins de
|
||||
flickering quand on trace et plus pratique pour ce qui s'en vient.
|
||||
* Integration des fichiers xpm dans l'executable. Mais c'est encore
|
||||
trop long a charger lors de l'execution, va probablement falloir les
|
||||
compresser ou laisser faire l'image de fond.
|
||||
* Ajout de pixmaps sur les boutons Trace, Reset et Quit (Gtk)
|
||||
* Ajout de pixmap comme fond (Gtk)
|
||||
|
||||
1999-03-22 Hugo Villeneuve <villen01@gel.ulaval.ca>
|
||||
* Corrige un bug dans la fonction LoadHexFile : Le checksum n'etait
|
||||
pas calcule correctement, ce qui entrainait des erreurs a l'ouverture
|
||||
de certains fichiers HEX. L'erreur venait du fait que le checksum se
|
||||
calculait avec la valeur absolue du LoadOffset, au lieu d'utiliser
|
||||
les caracteres composant le LoadOffset. Exemple : si LoadOffset =
|
||||
0103, il faut additionner 01h+03h=4h au Checksum et non pas 0103h =
|
||||
259 en decimal.
|
||||
* Deplace la fonction enleve_espaces de main_console vers mainemu
|
||||
car elle est commune aux deux interfaces graphiques.
|
||||
* Modifie la fonction majuscules pour qu'elle puisse convertir les
|
||||
lettres de minuscule a majuscule meme si la chaine contient des
|
||||
chiffres ou autres signes de ponctuation.
|
||||
* Modifie la declaration des fonctions dans tous les fichiers .hpp:
|
||||
enleve le nom des parametres car c'etait inutile.
|
||||
* Stocke le nom des registres dans un fichier registres8051.hpp.
|
||||
Ainsi, si on veut emuler un autre type de processeur, il suffira
|
||||
de se creer un autre fichier registres8052xxx.hpp par exemple.
|
||||
* Implemente l'affichage en francais ou en anglais dependant de
|
||||
l'option passee sur la ligne de commande. L'interface est beaucoup
|
||||
plus lisible de cette facon. Par defaut, l'affichage est en anglais.
|
||||
|
||||
1999-03-21 Hugo Villeneuve <villen01@gel.ulaval.ca>
|
||||
* Ajoute deux parametres qu'on peut passer par la ligne de commande:
|
||||
/? affiche les options disponibles sur la ligne de commande.
|
||||
-f force l'affichage en francais (pas encore implemente!!!)
|
||||
* Ajoute le controle d'erreur pour le chargement d'un fichier HEX.
|
||||
Les differentes erreurs sont controlees ( checksum, rectype,
|
||||
fin de fichier, etc.).
|
||||
* Modifie la fonction unasm pour qu'elle accepte 0,1 ou 2 parametres.
|
||||
U (adresse) (nombre d'instructions)
|
||||
Si adresse et nombre d'instructions non-specifies:
|
||||
Adresse = PC et Nombre d'Instructions = 16
|
||||
Si adresse specifie et nombre d'instructions non-specifie:
|
||||
Adresse = adresse specifiee et Nombre d'Instructions = 16
|
||||
Si adresse specifie et nombre d'instructions specifie:
|
||||
Adresse = adresse specifiee et Nombre d'Instructions = nb specifie
|
||||
A noter: on peut specifier une adresse comme etant un nombre
|
||||
hexadecimal, ou tout simplement en entrant "PC" ou "pc".
|
||||
|
||||
Jonathan St-Andre <standr00@gel.ulaval.ca
|
||||
|
||||
* Fait le menage dans la fonction main
|
||||
* Modifie Makefile.console et Makefile.gtk
|
||||
* Rearrangement des fichiers pour limiter les impacts sur
|
||||
tout le projet lors de modifications dans une partie et
|
||||
pour accelerer la compilation (en modules).
|
||||
* Creation de mainconsole.hpp + mainconsole.cpp
|
||||
* Creation de maingtk.cpp + maingtk.hpp
|
||||
* Creation de mainemu.cpp + mainemu.hpp
|
||||
* Elimine fonctions.cpp.
|
||||
* Elimination du 2e parametre a unasm. Desassemble
|
||||
de nouveau 16 instructions.
|
||||
* Ajustement du menu pour qu'il rentre dans la largeur
|
||||
d'un terminal 80x25.
|
||||
|
||||
Jimmy Ringuette <ringue00@gel.ulaval.ca>
|
||||
|
||||
* Ajout des interruptions du port serie.
|
||||
* Ajout du timer 2 (8052).
|
||||
|
||||
1999-03-20 Hugo Villeneuve <villen01@gel.ulaval.ca>
|
||||
* Separe le fichier main.cpp en deux: main.cpp et fonctions.cpp.
|
||||
fonctions.cpp contient les fonctions necessaires a main.cpp.
|
||||
* Ajoute un fichier exceptions.hpp qui permet de gerer les erreurs.
|
||||
* Modifie le Makefile en consequence.
|
||||
* On peut maintenant entrer les adresses < a quatre caracteres :
|
||||
ex: adresse 0000h = 0 ou 00 ou 000 ou 0000.
|
||||
* Enleve le include <stdlib.h>
|
||||
* Remplace toutes les commandes printf du main par cout.
|
||||
* Modifie l'apparence du menu.
|
||||
* Le programme est maintenant plus robuste en ce qui concerne les
|
||||
erreurs de syntaxe, les adresses invalides, etc (a tester...).
|
||||
* Modifier l'operation et la syntaxe de certaines commandes
|
||||
S (set register) devient MR (modify register) car set veut
|
||||
plutot dire "mettre a 1", et on pourra aussi implementer
|
||||
MM (modify Memory).
|
||||
R devient DR (display Register), pour suivre la logique de
|
||||
DP, DM et DI.
|
||||
* Ajoute une commande Execute Memory: EM addr n
|
||||
* La gestion des chaines de caracteres se fait maintenant
|
||||
uniquement avec des variables de type STRING, selon le C++.
|
||||
* Enleve variables i,j,k et inputcars dans le main.
|
||||
* Modifie la fonction RESET pour quelle n'affiche pas les
|
||||
registres au demarrage... ca faisait pas beau! Ajoute
|
||||
cependant un message pour dire que le up est resette.
|
||||
* Pour changer un registre, on doit entrer PC (et non p) ainsi
|
||||
que SP (et non seulement s).
|
||||
* Ajoute une fonction qui convertit une chaine de caracteres
|
||||
en majuscules.
|
||||
|
||||
1999-03-19 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Fonction reset51() ajoutee dans cpu8051.cpp, reset() ajoutee
|
||||
dans main.cpp.
|
||||
* Commande "Z" fait un reset du processeur sur la console et le
|
||||
bouton Reset fonctionne dans le GUI.
|
||||
|
||||
Jimmy Ringuette <ringue00@gel.ulaval.ca>
|
||||
|
||||
* Les interruptions sont maintenant implementees. check_hardware() a
|
||||
ete supprimee et Do_timers() est appelee directement de exec8051().
|
||||
|
||||
1999-03-18 Hugo Villeneuve <villen01@gel.ulaval.ca>
|
||||
* Modifie l'entree des commandes pour gerer un peu plus les erreurs
|
||||
de syntaxe (je n'ai pas fini, il y a encore de la job a faire pour
|
||||
mettre ca error proof).
|
||||
* Simplifie l'entree des parametres pour chacune des fonctions.
|
||||
* Re-modifie l'instruction trace pour avoir seulement deux modes:
|
||||
trace a adresse et trace 1 instruction. Cela simplifie l'entree de
|
||||
la commande (on n'a pas a faire TA, qui n'est pas une commande
|
||||
standard dans les emulateurs). Si on veut faire tracer pour plusieurs
|
||||
instructions, alors il suffira d'implementer la commande
|
||||
EXECUTE Nombre_instructions, ce qui est beaucoup plus logique et
|
||||
c'est ce qu'on retrouve dans la plupart des emulateurs.
|
||||
* Ajoute la description des commandes en francais (loi 101).
|
||||
|
||||
1999-03-18 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Le bouton Trace dans la version Gtk+ fonctionne. On peut tracer
|
||||
et les 3 fenetres(registres, memoire, programme) se mettent a jour.
|
||||
* Ajout de 2 nouvelles fonctions trace : "tracenb()" et "traceat()"
|
||||
Qui, respectivement, prenent un nombre d'instruction a executer ou
|
||||
une adresse ou commencer l'execution. La fonction trace() a ete
|
||||
resimplifiee.
|
||||
* Dans les instructions RET, RETI, LCALL, PUSH et POP la pile prend
|
||||
la iram seulement pour les adresses sous 0x80, la data RAM est
|
||||
utilisee autrement. Avant, les SFR se faisaient ecraser!
|
||||
* Modes d'addressage addr16, reladdr, #data16 modifies!
|
||||
En tenant compte de ce que Hugo avait fait remarquer ce matin :
|
||||
ex.: si PC++ apparait 2 fois sur une ligne, les 2 fois il repartira
|
||||
de la meme valeur de PC et suite a cette ligne, on se trouve avec
|
||||
un PC incremente 1 fois au lieu de 2.
|
||||
* Menu accepte maj/minuscules
|
||||
* Corrige bug dans "setreg", les registres peuvent vraiment
|
||||
etre donnes en maj/minuscules maintenant.
|
||||
|
||||
1999-03-17 Hugo Villeneuve <villen01@gel.ulaval.ca
|
||||
* Corrige les instructions LJMP et LCALL qui ne calculaient pas la
|
||||
bonne adresse pour le PC. Toutes les autres instructions de
|
||||
branchement sont probablement a revoir pour le meme probleme. Le
|
||||
probleme etait cause par la syntaxe dans le fichier instructions.hpp
|
||||
(lignes ou on retrouve addr16 = (pgm_mem[PC++] << 8)+pgm_mem[PC++] a
|
||||
remplacer par addr16 = (pgm_mem[PC+1] << 8) + pgm_mem[PC+2] )
|
||||
* Modifie la commande TRACE pour qu'on puisse lui passer une adresse
|
||||
de depart comme parametre (main.cpp lignes 406-409) et modifie
|
||||
en consequence ascii2hex pour qu'il ignore les espaces avant
|
||||
l'adresse. (main.cpp ligne 133).
|
||||
|
||||
1999-03-14 Pascal Fecteau <fectea00@gel.ulaval.ca>
|
||||
* Correction de bugs relatifs a la compilation sur VC5.
|
||||
Dont ajout de #include <string.h>.
|
||||
|
||||
1999-03-13 Jimmy Ringuette <ringue00@gel.ulaval.ca>
|
||||
* Ajout des timers dans cpu8051.cpp. Il faudrait tester a fond.
|
||||
|
||||
1999-03-12 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Je crois qu'il sera plus interessant si on garde le memory
|
||||
dump normal dans une fenetre exterieur et dont on pourra en ouvrir
|
||||
plusieurs pour monitorer differents endroits de la memoire, c'est
|
||||
pourquoi je n'ai place que "Internal RAM" comme memory dump dans
|
||||
la fenetre principale.
|
||||
* Au demarrage, effectue un premier memory dump dans la fenetre
|
||||
"Internal RAM", un unasm dans "Program" et un show register dans
|
||||
"Registers".
|
||||
* Bouton Quit, menus "File -> Quit" et "Help -> About" reagissent.
|
||||
* Comporte maintenant 2 Makefile : Makefile.console(fonctionne sur
|
||||
toutes les plateformes) et Makefile.gtk(teste seulement sous Linux).
|
||||
* DEBUT d'interface graphique Gtk+ (ne fait qu'afficher une fenetre
|
||||
avec un layout tres simple), presentement je cours apres des sources
|
||||
de documentations.(le manuel n'est pas encore complet)
|
||||
|
||||
1999-03-09 Jimmy Ringuette <ringue00@gel.ulaval.ca>
|
||||
* Regle le bug avec mul (probleme avec les bits 15-8 du resultat
|
||||
ne se ramenaient pas dans les bits 7-0 du registre B)
|
||||
* La conversion chaine->hexadecimal accepte les minuscules
|
||||
* Il n'est plus obligatoire d'ecrire les 4 caracteres lorsqu'il faut
|
||||
entrer une valeur hexadecimale.
|
||||
|
||||
1999-03-05 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Corrige un warning de compilation sous Solaris.
|
||||
|
||||
1999-03-04 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Ca execute! (presque)
|
||||
* Phase de corrections des bugs dans les instructions, une premiere
|
||||
implementation est faite pour toutes les instructions.
|
||||
* Ajout fonction "trace" et "dump internal memory"
|
||||
* Les modes d'adressage sont pratiquement termines dans
|
||||
les instructions.
|
||||
* Certaines instructions ont un debut d'implementation.
|
||||
* Desassembleur, bit addressable segment 00-7F -> 20.0-2F.7
|
||||
|
||||
1999-03-03 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Ajout automatique de certaines lignes de codes concernant
|
||||
l'adressage dans les fonctions d'instructions tres brouillon
|
||||
* Ajout de stub pour write_mem et read_mem, modifs dans exec8051
|
||||
* Ajout de la fonction showregister() et de la commande 'r'.
|
||||
* Correction d'une erreur iram_mem doit etre unsigned char et non int
|
||||
* Note : Il y a des references a certaines parties du 8052 mais
|
||||
elles ne seront pas implementees. Ce n'est qu'a titre d'informations.
|
||||
* Ajout de #define pour faire correspondre les registres SFR avec
|
||||
leur adresse dans la iram.
|
||||
* Renomme instructions.cpp a instructions.hpp et ajout du tableau
|
||||
de pointeurs sur les fonctions
|
||||
* Ajout de la ram interne 00-FF et valeurs initiale au reset
|
||||
dans cpu8051.cpp avec le registre : unsigned int PC.
|
||||
* Ajout de cpu8051.cpp contenant exec8051()
|
||||
|
||||
1999-03-02 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Ajout de remarques dans le source
|
||||
* Il faudrait maintenant tester avec plusieurs programmes pour
|
||||
reperer les bugs.
|
||||
* Le desassembleur reconnait maintenant les registres du SFR
|
||||
(ex.: 88H est remplace par TCON, F0 par B, etc...)
|
||||
* Changement au desassembleur (instructions peuvent avoir jusqu'a 3
|
||||
arguments ex.: CJNE R0,#data,reladdr)
|
||||
* La vrai instruction CJNE comporte 3 arguments il faut changer
|
||||
radicalement le desassembleur
|
||||
|
||||
1999-03-01 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Probleme dans opcodes.lst au niveau de l'instruction CJNE (mauvaise
|
||||
definition)
|
||||
* Tous les types d'adressages semblent fonctionner
|
||||
* Le desassembleur peut lire les arguments et les afficher
|
||||
(ex.: MOV A,#data peut devenir plus concret MOV A,#20)
|
||||
* Desassembleur (instructions ont 2 arguments : instleftarg et
|
||||
instrightarg)
|
||||
|
||||
1999-02-28 Jonathan St-Andre <standr00@gel.ulaval.ca>
|
||||
* Charge un fichier .hex donne en parametre (format Intel Hexadecimal
|
||||
produit par ASM51)
|
||||
* Effectue le dump program memory et dump data memory
|
||||
* On peut quitter (YEAH!)
|
||||
* Affiche le menu
|
||||
* Creation de opcodes.lst et script Perl pour l'interpreter
|
||||
* Debut
|
14
Makefile.am
14
Makefile.am
@ -1,5 +1,7 @@
|
||||
## Makefile.am -- Process this file with automake to produce Makefile.in
|
||||
|
||||
.PHONY: changelog
|
||||
|
||||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
SUBDIRS = src/common src/cli src/gtk data doc tests
|
||||
@ -15,10 +17,20 @@ CLEANFILES = *~
|
||||
DISTCLEANFILES = .deps/*.P
|
||||
|
||||
MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure config-h.in \
|
||||
stamp-h.in $(ac_aux_dir)/depcomp \
|
||||
stamp-h.in ChangeLog $(ac_aux_dir)/depcomp \
|
||||
$(ac_aux_dir)/install-sh $(ac_aux_dir)/missing \
|
||||
$(ac_aux_dir)/mkinstalldirs $(ac_aux_dir)/config.guess \
|
||||
$(ac_aux_dir)/config.sub $(ac_aux_dir)/ltmain.sh \
|
||||
$(ac_aux_dir)/compile \
|
||||
$(ac_aux_dir)/test-driver \
|
||||
$(ac_aux_dir)/ar-lib
|
||||
|
||||
changelog:
|
||||
@if test -d $(srcdir)/.git; then \
|
||||
$(srcdir)/build-aux/gitlog-to-changelog \
|
||||
--format='%s%n%n%b%n' \
|
||||
--no-cluster \
|
||||
--strip-tab \
|
||||
--strip-cherry-pick \
|
||||
>ChangeLog; \
|
||||
fi
|
||||
|
@ -1,6 +1,9 @@
|
||||
#!/bin/sh
|
||||
# autogen.sh -- Use this script to create generated files from the git distribution
|
||||
|
||||
# ChangeLog is generated from git log output using "make changelog"
|
||||
touch ChangeLog
|
||||
|
||||
set -e
|
||||
autoreconf -vi
|
||||
rm -rf autom4te.cache
|
||||
|
432
build-aux/gitlog-to-changelog
Executable file
432
build-aux/gitlog-to-changelog
Executable file
@ -0,0 +1,432 @@
|
||||
eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
|
||||
& eval 'exec perl -wS "$0" $argv:q'
|
||||
if 0;
|
||||
# Convert git log output to ChangeLog format.
|
||||
|
||||
my $VERSION = '2014-01-15 03:30'; # UTC
|
||||
# The definition above must lie within the first 8 lines in order
|
||||
# for the Emacs time-stamp write hook (at end) to update it.
|
||||
# If you change this file with Emacs, please let the write hook
|
||||
# do its job. Otherwise, update this string manually.
|
||||
|
||||
# Copyright (C) 2008-2014 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Written by Jim Meyering
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Getopt::Long;
|
||||
use POSIX qw(strftime);
|
||||
|
||||
(my $ME = $0) =~ s|.*/||;
|
||||
|
||||
# use File::Coda; # http://meyering.net/code/Coda/
|
||||
END {
|
||||
defined fileno STDOUT or return;
|
||||
close STDOUT and return;
|
||||
warn "$ME: failed to close standard output: $!\n";
|
||||
$? ||= 1;
|
||||
}
|
||||
|
||||
sub usage ($)
|
||||
{
|
||||
my ($exit_code) = @_;
|
||||
my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
|
||||
if ($exit_code != 0)
|
||||
{
|
||||
print $STREAM "Try '$ME --help' for more information.\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
print $STREAM <<EOF;
|
||||
Usage: $ME [OPTIONS] [ARGS]
|
||||
|
||||
Convert git log output to ChangeLog format. If present, any ARGS
|
||||
are passed to "git log". To avoid ARGS being parsed as options to
|
||||
$ME, they may be preceded by '--'.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
--amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that
|
||||
makes a change to SHA1's commit log text or metadata.
|
||||
--append-dot append a dot to the first line of each commit message if
|
||||
there is no other punctuation or blank at the end.
|
||||
--no-cluster never cluster commit messages under the same date/author
|
||||
header; the default is to cluster adjacent commit messages
|
||||
if their headers are the same and neither commit message
|
||||
contains multiple paragraphs.
|
||||
--srcdir=DIR the root of the source tree, from which the .git/
|
||||
directory can be derived.
|
||||
--since=DATE convert only the logs since DATE;
|
||||
the default is to convert all log entries.
|
||||
--format=FMT set format string for commit subject and body;
|
||||
see 'man git-log' for the list of format metacharacters;
|
||||
the default is '%s%n%b%n'
|
||||
--strip-tab remove one additional leading TAB from commit message lines.
|
||||
--strip-cherry-pick remove data inserted by "git cherry-pick";
|
||||
this includes the "cherry picked from commit ..." line,
|
||||
and the possible final "Conflicts:" paragraph.
|
||||
--help display this help and exit
|
||||
--version output version information and exit
|
||||
|
||||
EXAMPLE:
|
||||
|
||||
$ME --since=2008-01-01 > ChangeLog
|
||||
$ME -- -n 5 foo > last-5-commits-to-branch-foo
|
||||
|
||||
SPECIAL SYNTAX:
|
||||
|
||||
The following types of strings are interpreted specially when they appear
|
||||
at the beginning of a log message line. They are not copied to the output.
|
||||
|
||||
Copyright-paperwork-exempt: Yes
|
||||
Append the "(tiny change)" notation to the usual "date name email"
|
||||
ChangeLog header to mark a change that does not require a copyright
|
||||
assignment.
|
||||
Co-authored-by: Joe User <user\@example.com>
|
||||
List the specified name and email address on a second
|
||||
ChangeLog header, denoting a co-author.
|
||||
Signed-off-by: Joe User <user\@example.com>
|
||||
These lines are simply elided.
|
||||
|
||||
In a FILE specified via --amend, comment lines (starting with "#") are ignored.
|
||||
FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on
|
||||
a line) referring to a commit in the current project, and CODE refers to one
|
||||
or more consecutive lines of Perl code. Pairs must be separated by one or
|
||||
more blank line.
|
||||
|
||||
Here is sample input for use with --amend=FILE, from coreutils:
|
||||
|
||||
3a169f4c5d9159283548178668d2fae6fced3030
|
||||
# fix typo in title:
|
||||
s/all tile types/all file types/
|
||||
|
||||
1379ed974f1fa39b12e2ffab18b3f7a607082202
|
||||
# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself.
|
||||
# Change the author to be Paul. Note the escaped "@":
|
||||
s,Jim .*>,Paul Eggert <eggert\\\@cs.ucla.edu>,
|
||||
|
||||
EOF
|
||||
}
|
||||
exit $exit_code;
|
||||
}
|
||||
|
||||
# If the string $S is a well-behaved file name, simply return it.
|
||||
# If it contains white space, quotes, etc., quote it, and return the new string.
|
||||
sub shell_quote($)
|
||||
{
|
||||
my ($s) = @_;
|
||||
if ($s =~ m![^\w+/.,-]!)
|
||||
{
|
||||
# Convert each single quote to '\''
|
||||
$s =~ s/\'/\'\\\'\'/g;
|
||||
# Then single quote the string.
|
||||
$s = "'$s'";
|
||||
}
|
||||
return $s;
|
||||
}
|
||||
|
||||
sub quoted_cmd(@)
|
||||
{
|
||||
return join (' ', map {shell_quote $_} @_);
|
||||
}
|
||||
|
||||
# Parse file F.
|
||||
# Comment lines (starting with "#") are ignored.
|
||||
# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1
|
||||
# (alone on a line) referring to a commit in the current project, and
|
||||
# CODE refers to one or more consecutive lines of Perl code.
|
||||
# Pairs must be separated by one or more blank line.
|
||||
sub parse_amend_file($)
|
||||
{
|
||||
my ($f) = @_;
|
||||
|
||||
open F, '<', $f
|
||||
or die "$ME: $f: failed to open for reading: $!\n";
|
||||
|
||||
my $fail;
|
||||
my $h = {};
|
||||
my $in_code = 0;
|
||||
my $sha;
|
||||
while (defined (my $line = <F>))
|
||||
{
|
||||
$line =~ /^\#/
|
||||
and next;
|
||||
chomp $line;
|
||||
$line eq ''
|
||||
and $in_code = 0, next;
|
||||
|
||||
if (!$in_code)
|
||||
{
|
||||
$line =~ /^([0-9a-fA-F]{40})$/
|
||||
or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
|
||||
$fail = 1, next;
|
||||
$sha = lc $1;
|
||||
$in_code = 1;
|
||||
exists $h->{$sha}
|
||||
and (warn "$ME: $f:$.: duplicate SHA1\n"),
|
||||
$fail = 1, next;
|
||||
}
|
||||
else
|
||||
{
|
||||
$h->{$sha} ||= '';
|
||||
$h->{$sha} .= "$line\n";
|
||||
}
|
||||
}
|
||||
close F;
|
||||
|
||||
$fail
|
||||
and exit 1;
|
||||
|
||||
return $h;
|
||||
}
|
||||
|
||||
# git_dir_option $SRCDIR
|
||||
#
|
||||
# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR
|
||||
# is undef). Return as a list (0 or 1 element).
|
||||
sub git_dir_option($)
|
||||
{
|
||||
my ($srcdir) = @_;
|
||||
my @res = ();
|
||||
if (defined $srcdir)
|
||||
{
|
||||
my $qdir = shell_quote $srcdir;
|
||||
my $cmd = "cd $qdir && git rev-parse --show-toplevel";
|
||||
my $qcmd = shell_quote $cmd;
|
||||
my $git_dir = qx($cmd);
|
||||
defined $git_dir
|
||||
or die "$ME: cannot run $qcmd: $!\n";
|
||||
$? == 0
|
||||
or die "$ME: $qcmd had unexpected exit code or signal ($?)\n";
|
||||
chomp $git_dir;
|
||||
push @res, "--git-dir=$git_dir/.git";
|
||||
}
|
||||
@res;
|
||||
}
|
||||
|
||||
{
|
||||
my $since_date;
|
||||
my $format_string = '%s%n%b%n';
|
||||
my $amend_file;
|
||||
my $append_dot = 0;
|
||||
my $cluster = 1;
|
||||
my $strip_tab = 0;
|
||||
my $strip_cherry_pick = 0;
|
||||
my $srcdir;
|
||||
GetOptions
|
||||
(
|
||||
help => sub { usage 0 },
|
||||
version => sub { print "$ME version $VERSION\n"; exit },
|
||||
'since=s' => \$since_date,
|
||||
'format=s' => \$format_string,
|
||||
'amend=s' => \$amend_file,
|
||||
'append-dot' => \$append_dot,
|
||||
'cluster!' => \$cluster,
|
||||
'strip-tab' => \$strip_tab,
|
||||
'strip-cherry-pick' => \$strip_cherry_pick,
|
||||
'srcdir=s' => \$srcdir,
|
||||
) or usage 1;
|
||||
|
||||
defined $since_date
|
||||
and unshift @ARGV, "--since=$since_date";
|
||||
|
||||
# This is a hash that maps an SHA1 to perl code (i.e., s/old/new/)
|
||||
# that makes a correction in the log or attribution of that commit.
|
||||
my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
|
||||
|
||||
my @cmd = ('git',
|
||||
git_dir_option $srcdir,
|
||||
qw(log --log-size),
|
||||
'--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV);
|
||||
open PIPE, '-|', @cmd
|
||||
or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n"
|
||||
. "(Is your Git too old? Version 1.5.1 or later is required.)\n");
|
||||
|
||||
my $prev_multi_paragraph;
|
||||
my $prev_date_line = '';
|
||||
my @prev_coauthors = ();
|
||||
while (1)
|
||||
{
|
||||
defined (my $in = <PIPE>)
|
||||
or last;
|
||||
$in =~ /^log size (\d+)$/
|
||||
or die "$ME:$.: Invalid line (expected log size):\n$in";
|
||||
my $log_nbytes = $1;
|
||||
|
||||
my $log;
|
||||
my $n_read = read PIPE, $log, $log_nbytes;
|
||||
$n_read == $log_nbytes
|
||||
or die "$ME:$.: unexpected EOF\n";
|
||||
|
||||
# Extract leading hash.
|
||||
my ($sha, $rest) = split ':', $log, 2;
|
||||
defined $sha
|
||||
or die "$ME:$.: malformed log entry\n";
|
||||
$sha =~ /^[0-9a-fA-F]{40}$/
|
||||
or die "$ME:$.: invalid SHA1: $sha\n";
|
||||
|
||||
# If this commit's log requires any transformation, do it now.
|
||||
my $code = $amend_code->{$sha};
|
||||
if (defined $code)
|
||||
{
|
||||
eval 'use Safe';
|
||||
my $s = new Safe;
|
||||
# Put the unpreprocessed entry into "$_".
|
||||
$_ = $rest;
|
||||
|
||||
# Let $code operate on it, safely.
|
||||
my $r = $s->reval("$code")
|
||||
or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n";
|
||||
|
||||
# Note that we've used this entry.
|
||||
delete $amend_code->{$sha};
|
||||
|
||||
# Update $rest upon success.
|
||||
$rest = $_;
|
||||
}
|
||||
|
||||
# Remove lines inserted by "git cherry-pick".
|
||||
if ($strip_cherry_pick)
|
||||
{
|
||||
$rest =~ s/^\s*Conflicts:\n.*//sm;
|
||||
$rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m;
|
||||
}
|
||||
|
||||
my @line = split "\n", $rest;
|
||||
my $author_line = shift @line;
|
||||
defined $author_line
|
||||
or die "$ME:$.: unexpected EOF\n";
|
||||
$author_line =~ /^(\d+) (.*>)$/
|
||||
or die "$ME:$.: Invalid line "
|
||||
. "(expected date/author/email):\n$author_line\n";
|
||||
|
||||
# Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
|
||||
# `(tiny change)' annotation.
|
||||
my $tiny = (grep (/^Copyright-paperwork-exempt:\s+[Yy]es$/, @line)
|
||||
? ' (tiny change)' : '');
|
||||
|
||||
my $date_line = sprintf "%s %s$tiny\n",
|
||||
strftime ("%F", localtime ($1)), $2;
|
||||
|
||||
my @coauthors = grep /^Co-authored-by:.*$/, @line;
|
||||
# Omit meta-data lines we've already interpreted.
|
||||
@line = grep !/^(?:Signed-off-by:[ ].*>$
|
||||
|Co-authored-by:[ ]
|
||||
|Copyright-paperwork-exempt:[ ]
|
||||
)/x, @line;
|
||||
|
||||
# Remove leading and trailing blank lines.
|
||||
if (@line)
|
||||
{
|
||||
while ($line[0] =~ /^\s*$/) { shift @line; }
|
||||
while ($line[$#line] =~ /^\s*$/) { pop @line; }
|
||||
}
|
||||
|
||||
# Record whether there are two or more paragraphs.
|
||||
my $multi_paragraph = grep /^\s*$/, @line;
|
||||
|
||||
# Format 'Co-authored-by: A U Thor <email@example.com>' lines in
|
||||
# standard multi-author ChangeLog format.
|
||||
for (@coauthors)
|
||||
{
|
||||
s/^Co-authored-by:\s*/\t /;
|
||||
s/\s*</ </;
|
||||
|
||||
/<.*?@.*\..*>/
|
||||
or warn "$ME: warning: missing email address for "
|
||||
. substr ($_, 5) . "\n";
|
||||
}
|
||||
|
||||
# If clustering of commit messages has been disabled, if this header
|
||||
# would be different from the previous date/name/email/coauthors header,
|
||||
# or if this or the previous entry consists of two or more paragraphs,
|
||||
# then print the header.
|
||||
if ( ! $cluster
|
||||
|| $date_line ne $prev_date_line
|
||||
|| "@coauthors" ne "@prev_coauthors"
|
||||
|| $multi_paragraph
|
||||
|| $prev_multi_paragraph)
|
||||
{
|
||||
$prev_date_line eq ''
|
||||
or print "\n";
|
||||
print $date_line;
|
||||
@coauthors
|
||||
and print join ("\n", @coauthors), "\n";
|
||||
}
|
||||
$prev_date_line = $date_line;
|
||||
@prev_coauthors = @coauthors;
|
||||
$prev_multi_paragraph = $multi_paragraph;
|
||||
|
||||
# If there were any lines
|
||||
if (@line == 0)
|
||||
{
|
||||
warn "$ME: warning: empty commit message:\n $date_line\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($append_dot)
|
||||
{
|
||||
# If the first line of the message has enough room, then
|
||||
if (length $line[0] < 72)
|
||||
{
|
||||
# append a dot if there is no other punctuation or blank
|
||||
# at the end.
|
||||
$line[0] =~ /[[:punct:]\s]$/
|
||||
or $line[0] .= '.';
|
||||
}
|
||||
}
|
||||
|
||||
# Remove one additional leading TAB from each line.
|
||||
$strip_tab
|
||||
and map { s/^\t// } @line;
|
||||
|
||||
# Prefix each non-empty line with a TAB.
|
||||
@line = map { length $_ ? "\t$_" : '' } @line;
|
||||
|
||||
print "\n", join ("\n", @line), "\n";
|
||||
}
|
||||
|
||||
defined ($in = <PIPE>)
|
||||
or last;
|
||||
$in ne "\n"
|
||||
and die "$ME:$.: unexpected line:\n$in";
|
||||
}
|
||||
|
||||
close PIPE
|
||||
or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
|
||||
# FIXME-someday: include $PROCESS_STATUS in the diagnostic
|
||||
|
||||
# Complain about any unused entry in the --amend=F specified file.
|
||||
my $fail = 0;
|
||||
foreach my $sha (keys %$amend_code)
|
||||
{
|
||||
warn "$ME:$amend_file: unused entry: $sha\n";
|
||||
$fail = 1;
|
||||
}
|
||||
|
||||
exit $fail;
|
||||
}
|
||||
|
||||
# Local Variables:
|
||||
# mode: perl
|
||||
# indent-tabs-mode: nil
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "my $VERSION = '"
|
||||
# time-stamp-format: "%:y-%02m-%02d %02H:%02M"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "'; # UTC"
|
||||
# End:
|
Loading…
x
Reference in New Issue
Block a user