IDP         "COMP - RELEASE 15/12/1978"
ORDI:   @
         IF          4='F700,X100,,X100
ORDI:    VAL         "T"
X100:    VAL         0
         IF          ORDI-"S",,X100,
ORDI:    VAL         "T"
X100:    VAL         0
         IF          ORDI-"T",X100,,X100
QUANTA:  VAL         1
         IDP         "VERSION T1600"
X100:    VAL         0
         IF          ORDI-"S",X100,,X100
QUANTA:  VAL         3
         IDP         "VERSION SOLAR"
X100:    VAL         0
         IDP         "SERGE SOUZEAU"
         PAGE
<
<
<        PROGRAMME POUR COMPARER DEUX FICHIERS
<
<
         TABLE
ZERO:    EQU         $
         DZS         '10
         WORD        DEB
<
<        ENTREE DANS LE PROCESSEUR
<
         WORD        DEBUT
         PROG
DEB:     EQU         $
         LRP         L
         BR          -1,L
         PAGE
<
<        BUFFERS
<
BUF1:    DZS         128*QUANTA
BUF2:    DZS         128*QUANTA
<
<        ASSIGN
<
ASSF1:   ASCI        "!ASSIGN 3=O,"
NMF1:    DZS         10
ASSF2:   ASCI        "!ASSIGN 4=O,"
NMF2:    DZS         10
CLOS:    ASCI        "!CLOSE"
         BYTE        '04;0
AROND::  VAL         '40
DEBUG:   ASCI        "!M;!DEBUG;"
         BYTE        AROND;","
DEBUG1:  ASCI        "XYZT;M;;"
         BYTE        AROND;","
DEBUG2:  ASCI        "XYZT;M;;"
         BYTE        '04;0
<
<        MESSAGES
<
NMFS:    BYTE        15;'6D
         ASCI        "NOM DU FICHIER"
NMFS1:   BYTE        3;"1"
         ASCI        " ="
NMFS2:   BYTE        3;"2"
         ASCI        " ="
ETOI:    BYTE        21;'6D
         ASCI        "********************"
ERR:     BYTE        42;'6D
         ASCI        "NOM DE FICHIER ERRONNE OU CLE INEXISTANTE"
FICH:    BYTE        18;'6D
         ASCI        "LES FICHIERS SONT"
IDEN:    BYTE        11;" "
         ASCI        "IDENTIQUES"
DIFF:    BYTE        11;" "
         ASCI        "DIFFERENTS"
MSIBO:   BYTE        59;'6D
         ASCI        "FICHIERS SOURCES,BINAIRES,"
         ASCI        "DUMP OU QUELCONQUES (S/B/D/Q) = "
CLE1:    BYTE        15;'6D
         ASCI        "CLE ENTIERE = "
CLE2:    BYTE        16;'6D
         ASCI        "CLE DECIMALE = "
LGBL:    BYTE        27;'6D
         ASCI        "NOMBRE DE MOTS PAR BLOC = "
NOSC:    BYTE        26;'6D
         ASCI        "NUMERO DU SECTEUR = "
NSCT:    DZS         3
ENER:    BYTE        27;'6D
         ASCI        "ERREUR EN  '"
ENR1:    DZS         2
         ASCI        " ET  '"
ENR2:    DZS         2
         PAGE
<
<        COMMON
<
         COMMON
CCI:     WORD        1
OPEN1:   WORD        '0305           < OPEN FICHIERS
         DZS         2
OPEN2:   WORD        '0405
         DZS         2
ABUF1:   WORD        BUF1,X          < RELAIS BUFFERS FICHIER
ABUF2:   WORD        BUF2,X
ABUF10:  WORD        BUF1
ABUF20:  WORD        BUF2
READ1:   WORD        '0308           < LECTURE FICHIERS
         WORD        BUF1-ZERO*2
         WORD        256*QUANTA
READ2:   WORD        '0408
         WORD        BUF2-ZERO*2
         WORD        256*QUANTA
ECR:     WORD        '0202           < ECRITURE MESSAGES
         DZS         2
LECT:    WORD        '0101           < LECTURE D'UNE REPONSE
         DZS         2
APCCI:   WORD        '0002           < APPEL CCI INTERPRETATIF
         DZS         1
         WORD        80
DIX:     WORD        10              < POUR CONVERSION DES CLES
LGBLOC:  WORD        128*QUANTA      < LONGUEUR D'UN BLOC
NMOTPB:  DZS         1               < LONGUEUR UTILE DU BUFFER
AASSF1:  WORD        ASSF1           < RELAIS MESSAGES
ANMF1:   WORD        NMF1
AASSF2:  WORD        ASSF2
ANMF2:   WORD        NMF2
ACLOS:   WORD        CLOS
ANMFS:   WORD        NMFS
ANMFS1:  WORD        NMFS1
ANMFS2:  WORD        NMFS2
AETOI:   WORD        ETOI
AERR:    WORD        ERR
AFICH:   WORD        FICH
AIDEN:   WORD        IDEN
ADIFF:   WORD        DIFF
AMSIBO:  WORD        MSIBO
ACLE1:   WORD        CLE1
ACLE2:   WORD        CLE2
ALGBL:   WORD        LGBL
ANOSC:   WORD        NOSC
ANSCT:   WORD        NSCT-ZERO*2
AENER:   WORD        ENER
AENR1:   WORD        ENR1-ZERO*2
AENR2:   WORD        ENR2-ZERO*2
SECR:    WORD        SPSECR          < RELAIS SSP
SLEC:    WORD        SPSLEC
SNUM:    WORD        SPSNUM
SCCI:    WORD        SPSCCI
SERR:    WORD        SPSERR
HEXA:    WORD        SPHEXA
DECI:    WORD        SPDECI
ENT:     DZS         3               < BUFFER LECTURE
AENT:    WORD        ENT+3,X         < RELAI BUFFER DE LECTURE
AZER:    WORD        ZERO,X          < RELAI DEBUT INDEXE
AD1:     WORD        DEBUG1-ZERO*2
AD2:     WORD        DEBUG2-ZERO*2
ADEBUG:  WORD        DEBUG           < ADRESSE DE LA CARTE "!M...".
SIBO:    DZS         1               < INDICATEUR DE TYPE FICHIERS :
                                     < -1 : SOURCE,
                                     <  0 : BINAIRE,
                                     < +1 : DUMP/QUELCONQUES.
AE100:   WORD        E100            < RELAI
KSTORE:  DZS         10
         PAGE
<
<        PROGRAMME
<
         PROG
         WORD        CCI+'80
DEBUT:   EQU         $
         LRP         C               < INITIALISATION DES BASES
         LA          -1,C
         LR          A,C
         LAD         KSTORE-1
         LR          A,K
E100:    EQU         $
         LA          ACLOS           < FERMER LES FICHIERS
         BSR         SCCI
         EORR        L               < INITIALISATION DU NUMERO DE SECTEUR
E101:    EQU         $
         LA          ANMFS           < LIRE LE 1ER NOM
         BSR         SECR
         LA          ANMFS1
         BSR         SECR
         LA          ANMF1
         LBI         20
         BSR         SLEC
         LA          AASSF1          < ESSAI D'ASSIGNATION
         BSR         SCCI
         JE          E102
         BSR         SERR            < ERREUR
         JMP         E101
E102:    EQU         $
         LA          ANMFS           < LIRE LE 2EME NOM
         BSR         SECR
         LA          ANMFS2
         BSR         SECR
         LA          ANMF2
         LBI         20
         BSR         SLEC
         LA          AASSF2          < ESSAI D'ASSIGNATION
         BSR         SCCI
         JE          E103
         BSR         SERR            < ERREUR
         JMP         E102
E103:    EQU         $
         LA          LGBLOC          < INITIALISATION DE LA LONGUEUR
         STA         NMOTPB          < UTILE D'UN BLOC
         LAI         -1              < DEMANDE DU TYPE
         STA         SIBO
         LA          AMSIBO
         BSR         SECR
         LAD         ENT
         LBI         1
         BSR         SLEC
         LBY         ENT             < ANALYSE DU TYPE
         CPI         "S"
         JE          E104
         IC          SIBO
         CPI         "B"
         JE          E104
         IC          SIBO
         CPI         "D"
         JE          E150            < TYPE "DUMP"...
         CPI         "Q"
         JNE         E103
E104:    EQU         $
         CPZ         SIBO
         JE          E105
         JG          E106
         LAI         2               < TYPE SOURCE - CLE = 2.0
         LBI         0
         JMP         E107
E105:    EQU         $
         LAI         1               < TYPE BINAIRE - CLE = 1.0
         LBI         0
         JMP         E107
E150:    EQU         $
         LAI         3               < TYPE DUMP - CLEF = 3.0
         LBI         0
         JMP         E107
E106:    EQU         $
         LA          ALGBL           < TYPE QUELCONQUE - LIRE LA
         BSR         SNUM            < LONGUEUR UTILE D'UN BLOC
         CPI         1               < SI ELLE EST <= 1, ON
         JLE         E118            < PREND TOUT LE BLOC
         STA         NMOTPB
E118:    EQU         $
         LA          ACLE1           < LIRE LES CLES
         BSR         SNUM
         LR          A,B
         LA          ACLE2
         BSR         SNUM
         XR          A,B
E107:    EQU         $
         STA         OPEN1+1         < POSITIONNER LES CLES
         STA         OPEN2+1
         STB         OPEN1+2
         STB         OPEN2+2
         LAD         OPEN1           < ESSAI D'OPEN
         SVC         0
         JNE         E108
         LAD         OPEN2
         SVC         0
         JE          E110
E108:    EQU         $
         BSR         SERR            < ERREUR
         JMP         E100
E110:    EQU         $
         LAD         READ1           < LIRE LES 2 FICHIERS
         SVC         0
         JNE         E114
         CPZ         &ABUF10
         JL          E114
         LAD         READ2
         SVC         0
         JNE         E117
         CPZ         &ABUF20
         JL          E117
         ADRI        1,L             < COMPTER LE SECTEUR
         LXI         1               < INITIALISATION POINTEUR BUFFER
E111:    EQU         $
         CPZ         SIBO            < SOURCE?
         JGE         E113
         LA          &ABUF1          < OUI - FIN SECTEUR(1ER CARAC)?
         SLRS        8
         CPI         'FF
         JNE         E112
         LA          &ABUF2          < OUI
         SLRS        8
         CPI         'FF
         JNE         E117
         JMP         E110
E112:    EQU         $
         LA          &ABUF1          < FIN SECTEUR(2EME CARAC)?
         ANDI        'FF
         CPI         'FF
         JNE         E113
         LA          &ABUF1          < OUI
         CP          &ABUF2
         JNE         E117
         JMP         E110
E113:    EQU         $
         LA          &ABUF1          < COMPARER LES DEUX BUFFERS
         CP          &ABUF2
         JNE         E117
E116:    EQU         $
         ADRI        1,X             < MOT SUIVANT
         LR          X,A             < FIN DU BUFFER?
         CP          NMOTPB
         JL          E111
         JMP         E110            < OUI - SUIVANT
E114:    EQU         $
         LAD         READ2           < FIN 1ER - VERIF. FIN 2EME
         SVC         0
         JNE         E115
         CPZ         &ABUF20
         JGE         E117
E115:    EQU         $
         LA          AFICH           < FICHIERS IDENTIQUES
         BSR         SECR
         LA          AIDEN
         BSR         SECR
         LA          ACLOS           < FERMER LES FICHIERS
         BSR         SCCI
         LAD         CCI
         SVC         0
         BR          AE100
E117:    EQU         $
         LA          AETOI           < FICHIERS DIFFERENTS
         BSR         SECR
         LA          AFICH
         BSR         SECR
         LA          ADIFF
         BSR         SECR
         LA          AETOI
         BSR         SECR
         LA          ANSCT           < SORTIE DU NUMERO DE SECTEUR
         LR          L,B
         BSR         DECI
         LA          ANOSC
         BSR         SECR
         LAD         &ABUF1
         LR          A,B
         LA          AENR1
         BSR         HEXA
         LAD         &ABUF2
         LR          A,B
         LA          AENR2
         BSR         HEXA
         LA          AENER
         BSR         SECR
         LAD         &ABUF1
         LR          A,B
         LA          AD1
         BSR         HEXA
         LAD         &ABUF2
         LR          A,B
         LA          AD2
         BSR         HEXA
         LA          ADEBUG
         BSR         SCCI            < ENVOI DE "!M..." POUR APPEL DU DEBUG...
         WORD        '1E16           < ARRET POUR DEBUG
         JMP         E116
         PAGE
<
<        SOUS-PROGRAMME DE SORTIE DE MESSAGES
<
SPSECR:  EQU         $
         PSR         A,X,W
         LR          A,W             < SAUVER L'ADRESSE DU MESSAGE
         ADR         A,A             < CALCULER SON ADRESSE OCTET
         ADRI        1,A
         STA         ECR+1           < LA PLACER DANS L'ECRITURE
         LBY         0,W             < RELEVER SA LONGUEUR
         STA         ECR+2           < LA PLACER
         LAD         ECR             < ET ECRIRE
         SVC         0
         PLR         A,X,W
         RSR
<
<        SOUS-PROGRAMME DE LECTURE D'UNE REPONSE
<
SPSLEC:  EQU         $
         PSR         A,X
         ADR         A,A             < PLACER L'ADRESSE OCTET
         STA         LECT+1          < DU BUFFER DE LECTURE
         STB         LECT+2          < ET LA LONGUEUR DE LA LECTURE
         LAD         LECT            < ET LIRE
         SVC         0
         PLR         A,X
         RSR
<
<        SOUS-PROGRAMME DE LECTURE D'UN NOMBRE DECIMAL
<
SPSNUM:  EQU         $
         PSR         B,W
         PSR         A               < SAUVER L'ADRESSE DU MESSAGE
SNUM1:   EQU         $
         PLR         A               < IMPRIMER LE MESSAGE
         PSR         A
         BSR         SECR
         LAD         ENT             < LIRE LE NOMBRE
         LBI         6
         BSR         SLEC
         EORR        W               < RESULTAT = 0
         LXI         -6              < ANALYSE DE 6 CHIFFRES
SNUM2:   EQU         $
         LBY         &AENT           < RELEVER UN CARACTERE
         CPI         '0D             < SI C'EST RETURN OU EOT
         JE          SNUM3           < C'EST LA FIN DU NOMBRE
         CPI         '04
         JE          SNUM3
         ADRI        -'30,A          < SINON, CE DOIT ETRE UN CHIFFRE
         JAL         SNUM1
         CPI         9
         JG          SNUM1
         XR          A,W             < L'INCORPORER AU RESULTAT
         MP          DIX
         JANE        SNUM1           < ON DOIT RESTER < 32768
         CPZR        B
         JL          SNUM1
         ADR         B,W
         JV          SNUM1
         JIX         SNUM2           < ET CHIFFRE SUIVANT
SNUM3:   EQU         $
         PLR         A               < NOMBRE FINI,LE RENDRE DANS A
         LR          W,A
         PLR         B,W
         RSR
<
<        SOUS-PROGRAMME D'APPEL AU CCI INTREPRETATIF
<
SPSCCI:  EQU         $
         PSR         A,X
         ADR         A,A             < PLACER L'ADRESSE OCTET DU MESSAGE
         STA         APCCI+1
         LAD         APCCI           < ET DEMANDER SON INTERPRETATION PAR LE CCI
         SVC         0
         PLR         A,X
         RSR
<
<        SOUS-PROGRAMME DE SORTIE DU MESSAGE D'ERREUR
<
SPSERR:  EQU         $
         PSR         A
         LA          AETOI           < SORTIR UNE LIGNE D'ETOILE
         BSR         SECR
         LA          AERR            < LE MESSAGE D'ERREUR
         BSR         SECR
         LA          AETOI           < ET UNE AUTRE LIGNE D'ETOILES
         BSR         SECR
         PLR         A
         RSR
<
<        SOUS-PROGRAMME D'EDITION D'UN NOMBRE EN HEXADECIMAL
<        A=ADRESSE OCTET DE LA ZONE RECEPTRICE
<        B=NOMBRE
<
SPHEXA:  EQU         $
         PSR         A,B,X,Y
         LR          A,X
         LYI         4
HEXA2:   EQU         $
         LAI         0
         SLLD        4
         CPI         9
         JLE         HEXA1
         ADRI        7,A
HEXA1:   EQU         $
         ADRI        '30,A
         STBY        &AZER
         ADRI        1,X
         ADRI        -1,Y
         CPZR        Y
         JG          HEXA2
         PLR         A,B,X,Y
         RSR
<
<        SOUS-PROGRAMME D'EDITION D'UN NOMBRE EN DECIMAL
<        A=ADRESSE OCTET DE LA ZONE RECEPTRICE
<        B=NOMBRE
<
SPDECI:  EQU         $
         PSR         A,B,X,Y
         LR          A,X
         ADRI        4,X
         LYI         5
DECI1:   EQU         $
         LAI         0
         DV          DIX
         XR          A,B
         ADRI        '30,A
         STBY        &AZER
         ADRI        -1,X
         ADRI        -1,Y
         CPZR        Y
         JG          DECI1
         PLR         A,B,X,Y
         RSR
         END



Copyright © Jean-François Colonna, 2022-2022.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2022.