PROG
         TRN
<
<
<        D E F I N I T I O N S   G E N E R A L E S  :
<
<
         CALL        #SIP DEFINITION CTTE#
         PAGE
<
<
<        O P T I O N S   D ' A S S E M B L A G E  :
<
<
XMULTI: @
XWOR%1:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%1:  VAL         KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2:  VAL         KOLTED=FMASK+KOL0=FVAL
XWOR%2:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4:  VAL         MSYMBI=FMASK+KOL0=FVAL
XWOR%4:  VAL         MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5:  VAL         XWOR%4=FCSYMT   < ETAT DU SYMBOLE 'XMULTI'...
XWOR%6:  VAL         XWOR%5=FCSIGN
XWOR%7:  VAL         XWOR%5(MSYMBN)MSYMBN=FCSIGN
         IF          XWOR%6*XWOR%7,XEIF%,,XEIF%
XMULTI:: VAL         W               < DEFINITION DU FACTEUR MULTIPLICATIF DU
                                     < FACTEUR DE REPETITION 'R'...
XEIF%:   VAL         ENDIF
XDIVIS: @
XWOR%1:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%1:  VAL         KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2:  VAL         KOLTED=FMASK+KOL0=FVAL
XWOR%2:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4:  VAL         MSYMBI=FMASK+KOL0=FVAL
XWOR%4:  VAL         MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5:  VAL         XWOR%4=FCSYMT   < ETAT DU SYMBOLE 'XDIVIS'...
XWOR%6:  VAL         XWOR%5=FCSIGN
XWOR%7:  VAL         XWOR%5(MSYMBN)MSYMBN=FCSIGN
         IF          XWOR%6*XWOR%7,XEIF%,,XEIF%
XDIVIS:: VAL         W               < DEFINITION DU FACTEUR DIVISEUR DU
                                     < FACTEUR DE REPETITION 'R'...
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        B A S   D E   L A   M E M O I R E  :
<
<
ZERO:    EQU         $
         DZS         PEPROG-D+Z
<
< POINT D'ENTREE :
<
ENTRY:   EQU         $
         LRM         A,K
         WORD        DEBUT           < POINT D'ENTREE DU PROGRAMME,
         WORD        STACK-DEPILE    < INITIALISATION DE LA PILE.
         PSR         A
         RSR                         < ON EFFECTUE AINSI UN 'GOTO' 'DEBUT'...
         PAGE
<
<
<        M E S S A G E S  :
<
<
LBUFDK:: VAL         LCCINT/NOCMO    < LONGUEUR MAX DES REPONSES DU DISQUE
                                     < VIDEO.
MBDKV:   BYTE        K6D;"*"
LMBDKV:: VAL         $-MBDKV*NOCMO
BUFDK:   EQU         $
         DZS         LBUFDK
<
<
<        L O C A L  :
<
<
         LOCAL
LOC:     EQU         $
<
< OPTIONS D'EXECUTION :
<
OPTMES:  WORD        NEXIST          < ='EXIST'  : EDITER LES REPONSES DU DIS-
                                     <             QUE VIDEO,
                                     < ='NEXIST' : NE PAS LES EDITER.
OPTREP:  WORD        EXIST           < 'EXIST'  : NE PAS ENVOYER 2 "RXYZ;" IDEN-
                                     <            TIQUES DE SUITE,
                                     < 'NEXIST' : LES ENVOYER (ON N'OPTIMISE
                                     <            PAS).
<
< DEFINITION DE L'ECHELLE
< DES TEMPS (PAR "R") :
<
R0::     VAL         W               < POUR NE PAS ATTENDRE...
R02::    VAL         R0+R0           < POUR ATTENDRE UN SOUPCON...
R03::    VAL         R02+R0          < ET UN PETIT PEU PLUS...
R04::    VAL         R03+R0          < ET ENCORE PLUS...
R05::    VAL         R04+R0
R06::    VAL         R05+R0
R07::    VAL         R06+R0
R08::    VAL         R07+R0
R09::    VAL         R08+R0
XWOR%1:  VAL         K               < INITIALISATION DE 'R1'.
XWOR%2:  VAL         25              < UN SECONDE=25 TRAMES.
         DO          XWOR%2
XWOR%1:  VAL         XWOR%1+R0
R1::     VAL         XWOR%1          < POUR ATTENDRE 1 SECONDE,
         NTRN
RS2::    VAL         R1/XXXMOY       < POUR ATTENDRE 1/2 SECONDE,
         TRN
R2::     VAL         R1+R1           < POUR ATTENDRE 2 SECONDES,
R3::     VAL         R2+R1           < POUR ATTENDRE 3 SECONDES,
R4::     VAL         R3+R1           < POUR ATTENDRE 4 SECONDES,
R5::     VAL         R4+R1           < POUR ATTENDRE 5 SECONDES,
R10::    VAL         R5+R5           < ET ENFIN 10 SECONDES...
AMULTI:  WORD        XMULTI          < MULTIPLICATEUR
ADIVIS:  WORD        XDIVIS          <                ET DIVISEUR DE "R"...
<
< MESSAGES DE COMMANDE
< DU DISQUE VIDEO :
<
FINDKV:: VAL         KCR             < FIN DES MESSAGES AU DISQUE VIDEO.
LMDKV::  VAL         W               < LONGUEUR DES COMMANDES AU DISQUE
                                     < VIDEO ("L", "R",...).
ML:      ASCI        "LXYZ XYZ;"     < (";" REPRESENTE 'FINDKV')
LML::    VAL         $-ML*NOCMO      < LONGUEUR MAJOREE DU MESSAGE 'ML'.
MRC:     BYTE        FINDKV
MR:      ASCI        "RXYZ;"         < (";" REPRESENTE 'FINDKV')
LMR::    VAL         $-MR*NOCMO      < LONGUEUR MAJOREE DU MESSAGE 'MR'.
<
< RELAIS D'ACCES AUX MESSAGES
< DE COMMANDE DU DISQUE VIDEO :
<
AML:     WORD        ML,X            < ACCES A "LXYZ XYZ;".
AMR:     WORD        MR,X            < ACCES A "RXYZ;".
<
< DEMANDES D'ACCES AU
< DISQUE VIDEO :
<
NVPDK::  VAL         COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
                                     < 'NVP' IMPLICITE D'ACCES AU DISQUE
                                     < VIDEO...
DEML:    BYTE        NVPDK;FAVW      < DEMANDE D'ENVOI DE "LXYZ XYZ;".
         WORD        ML=FCTA*NOCMO
         WORD        NILK
DEMRC:   BYTE        NVPDK;FAVW      < DEMANDE D'ENVOI DE 'R/C'.
         WORD        MRC=FCTA*NOCMO
         WORD        W
DEMR:    BYTE        NVPDK;FAVW      < DEMANDE D'ENVOI DE "RXYZ;".
         WORD        MR=FCTA*NOCMO
         WORD        NILK
DEMRER:  BYTE        NVPDK;FAVR      < LECTURE DE LA REPONSE DU DISQUE VIDEO.
         WORD        BUFDK=FCTA*NOCMO
         WORD        LBUFDK*NOCMO
DEMREW:  BYTE        NVPOUT;FAVW     < ECRITURE DE LA REPONSE DU DISQUE VIDEO.
         WORD        MBDKV=FCTA*NOCMO
         WORD        NILK
DEMCL:   BYTE        NVPDK;FAVWD     < DEMANDE DE CLEAR INITIAL DU BUFFER D'AN-
                                     < TICIPATION DE LA VISU D'ACCES AU
                                     < DISQUE VIDEO;
         BYTE        KEOT            < THAT'S ALL...
<
< DONNEES DE CONVERSION
< BINAIRE --> DECIMAL :
<
C10:     WORD        BASE10          < POUR DIVISER PAR 10...
C100:    WORD        BASE10*BASE10   < POUR DIVISER PAR 100...
ASPNOM:  WORD        SPNOM           < SOUS-PROGRAMME DE CONVERSION D'UN NOM-
                                     < BRE EN UNE CHAINE DECIMALE.
ASPCHI:  WORD        SPCHI           < SOUS-PROGRAMME D'INSERTION D'UN CHIFFRE
                                     < QUELCONQUE DANS UN BUFFER.
ASPCH0:  WORD        SPCH0           < SOUS-PROGRAMME D'INSERTION D'UN CHIFFRE
                                     < NON NUL DANS UN BUFFER.
ASPCAR:  WORD        SPCAR           < SOUS-PROGRAMME D'INSERTION D'UN CARAC-
                                     < TERE QUELCONQUE DANS UN BUFFER.
ABUF:    WORD        NILK            < RELAI VARIABLE VERS UN BUFFER.
<
< DONNEES DE GENERATION DES
< COMMANDES AU DISQUE VIDEO
< ET DE LEUR ENVOI :
<
REPETC:  WORD        K               < MEMORISATION DE LA COMMANDE "RXYZ;"
                                     < PRECEDENTE (LA VALEUR NULLE EST LA
                                     < VALEUR INITIALE...).
ADEBUC:  WORD        NILK            < ADRESSE DE DEBUT COURANTE,
AFINC:   WORD        NILK            < ADRESSE DE FIN COURANTE.
ASPREP:  WORD        SPREP           < SOUS-PROGRAMME DE GENERATION DE LA
                                     < COMMANDE "RXYZ;".
ASPSEQ:  WORD        SPSEQ           < SOUS-PROGRAMME DE GENERATION DE LA
                                     < COMMANDE DE DIFFUSION, SOIT "LXYZ XYZ;",
                                     < SOIT 'R/C' LORSQU'IL N'Y A QU'UNE
                                     < SEULE IMAGE...
ASPSYN:  WORD        SPSYN           < SOUS-PROGRAMME D'ATTENTE DES REPONSES DU
                                     < DISQUE VIDEO, ET D'EDITION EVENTUELLE
                                     < DE SES REPONSES.
<
< PILE DE TRAVAIL :
<
STACK:   EQU         $
         DZS         64              < ARBITRAIRE...
         PAGE
<
<
<        D E F I N I T I O N   D E   L A   T A B L E
<                    D E   S E Q U E N C E M E N T  :
<
<
         DSEC
SEQUEN:  EQU         $
REPET:   WORD        NILK            < COMPTEUR DES REPETITIONS : IL CORRESPOND
                                     < A LA COMMANDE "RXYZ;" DU DISQUE VIDEO.
                                     < NOTA : LA VALEUR 'NEXIST' (NULLE) INDI-
                                     < QUE UNE FIN DE LISTE DE SEQUENCEMENT...
                                     < DE PLUS, UNE VALEUR NEGATIVE (PAR MISE
                                     < A 1 DU BIT DE SIGNE PAR EXEMPLE...)
                                     < PROVOQUE UN POINT D'ARRET SOUS 'CCI' ;
                                     < LORS DU "!GO", LE POINTEUR 'W' DES
                                     < DESCRIPTEURS RESTE INCHANGE.
         IF          NEXIST-K,,XEIF%,
         IF          ATTENTION : CE QUI EST DIT EST FAUX !!!
XEIF%:   VAL         ENDIF
ADEBUT:  WORD        NILK            < DONNE L'ADRESSE DE DEBUT D'UNE SEQUENCE,
AFIN:    WORD        NILK            < DONNE L'ADRESSE DE FIN D'UNE SEQUENCE ;
                                     < CELLE-CI PEUT ETRE EGALE A L'ADRESSE DE
                                     < DEBUT, AUQUEL CAS LA COMMANDE "LXYZ XYZ;"
<                                    < EST REMPLACEE PAR LA COMMANDE 'R/C'.
<
< FIN DU DESCRIPTEUR :
<
LSEQ::   VAL         $-SEQUEN        < LONGUEUR DU DESCRIPTEUR.
         PROG
         USE         W,SEQUEN
         PAGE
<
<
<        I N S E R T I O N   D A N S   U N   B U F F E R  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME INSERE
<                    UN CARACTERE DANS LE BUFFER
<                    VARIABLE 'ABUF' ET FAIT PRO-
<                    GRESSER L'INDEX D'ACCES.
<
<
<        ARGUMENTS :
<                    (A)=CARACTERE A INSERER,
<                    (X)=INDEX D'INSERTION AVANT.
<
<
<        RESULTAT :
<                    (X)=INDEX D'INSERTION APRES.
<
<
SPCAR:   EQU         $
         STBY        &ABUF           < INSERTION DU CARACTERE COURANT,
         ADRI        I,X             < ET PROGRESSION DE L'INDEX...
         RSR                         < ET RETOUR...
         PAGE
<
<
<        I N S E R T I O N   D ' U N   C H I F F R E
<        D E C I M A L   Q U E L C O N Q U E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME INSERE
<                    DANS LE BUFFER VARIABLE 'ABUF'
<                    LE CHIFFRE DECIMAL COURANT
<                    APRES CONVERSION, PUIS FAIT
<                    PROGRESSER L'INDEX COURANT DU
<                    BUFFER.
<
<
<        ARGUMENTS :
<                    (A)=VALEUR BINAIRE A CODER,
<                    (X)=INDEX COURANT AVANT INSERTION.
<
<
<        RESULTAT :
<                    (X)=INDEX COURANT APRES INSERTION.
<
<
SPCHI:   EQU         $
         JAL         SPCHI1          < ERREUR...
         CPI         BASE10          < VALIDATION...
         JL          SPCHI2          < OK...
SPCHI1:  EQU         $
         QUIT        XXQUIT          < E R R E U R   P R O G R A M M E ...
         JMP         SPCHI3          < ET ON SORT...
SPCHI2:  EQU         $
         PSR         A
         ADRI        HZERO,A         < CONVERSION : BINAIRE --> DECIMAL.
         BSR         ASPCAR          < ET INSERTION DANS LE BUFFER...
         PLR         A
SPCHI3:  EQU         $
         RSR                         < ET RETOUR...
         PAGE
<
<
<        I N S E R T I O N   D ' U N   C H I F F R E
<        D E C I M A L   N O N   N U L  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME INSERE
<                    DANS LE BUFFER VARIABLE 'ABUF'
<                    LE CHIFFRE DECIMAL COURANT
<                    APRES CONVERSION, A CONDI-
<                    TION QUE CELUI-CI NE SOIT PAS
<                    NUL, PUIS FAIT PROGRESSER
<                    L'INDEX COURANT DU BUFFER.
<
<
<        ARGUMENTS :
<                    (A)=VALEUR BINAIRE A CODER,
<                    (X)=INDEX COURANT AVANT INSERTION.
<
<
<        RESULTAT :
<                    (X)=INDEX COURANT APRES INSERTION SI ELLE A EU LIEU.
<
<
SPCH0:   EQU         $
         JAE         SPCH03          < ON IGNORE LES VALEURS NULLES...
         JAL         SPCH01          < ERREUR...
         CPI         BASE10          < VALIDATION...
         JL          SPCH02          < OK...
SPCH01:  EQU         $
         QUIT        XXQUIT          < E R R E U R   P R O G R A M M E ...
         JMP         SPCH03          < ET ON SORT...
SPCH02:  EQU         $
         PSR         A
         ADRI        HZERO,A         < CONVERSION : BINAIRE --> DECIMAL.
         BSR         ASPCAR          < ET INSERTION DANS LE BUFFER...
         PLR         A
SPCH03:  EQU         $
         RSR                         < ET RETOUR...
         PAGE
<
<
<        C O N V E R S I O N   D ' U N   N O M B R E
<        E N   U N E   C H A I N E   D E C I M A L E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME CONVERTIT
<                    UN NOMBRE ARGUMENT (NON SIGNE)
<                    EN UNE CHAINE DECIMALE NE CON-
<                    TENAT PAS DE ZEROS ("0") EN
<                    TETE.
<
<
<        ARGUMENTS :
<                    (A)=NOMBRE ARGUMENT,
<                    (X)=INDEX COURANT DU BUFFER AVANT CONVERSION.
<
<
<        RESULTAT :
<                    (X)=INDEX COURANT APRES CONVERSION.
<
<
SPNOM:   EQU         $
<
< INITIALISATIONS :
<
         JAGE        SPNOM1          < OK, LE NOMBRE EST POSITIF...
         QUIT        XXQUIT          < E R R E U R   P R O G R A M M E ...
         JMP         SPNOM2          < ET ON ABANDONNE...
SPNOM1:  EQU         $
         PSR         A,B             < SAUVEGARDES...
<
< CHIFFRE DES CENTAINES :
<
         CP          C10             < UN SEUL CHIFFRE ???
         JL          SPNOM3          < OUI...
         CP          C100            < DEUX CHIFFRES ???
         JL          SPNOM4          < OUI...
         SARD        NBITMO          < NON, TROIS, CADRAGE,
         DV          C100            < (A)=CHIFFRE DES CENTAINES,
                                     < (B)=RESTE (DIZAINES ET UNITES).
         BSR         ASPCHI          < CONVERSION ET INSERTION DANS LE BUFFER
                                     < SI LE CHIFFRE DES CENTAINES N'EST PAS
                                     < NUL.
         LR          B,A             < RECUPERATION DU RESTE,
SPNOM4:  EQU         $
         SARD        NBITMO          < CADRAGE,
         DV          C10             < (A)=CHIFFRE DES DIZAINES,
                                     < (B)=RESTE (UNITES).
         BSR         ASPCHI          < CONVERSION ET INSERTION DANS LE BUFFER
                                     < SI LE CHIFFRE DES DIZAINES N'EST PAS
                                     < NUL.
         LR          B,A             < (A)=CHIFFRE DES UNITES,
SPNOM3:  EQU         $
         BSR         ASPCHI          < QUE L'ON INSERE SYSTEMATIQUEMENT DANS
                                     < LE BUFFER...
<
< ET RETOUR :
<
         PLR         A,B
SPNOM2:  EQU         $
         RSR
         PAGE
<
<
<        G E S T I O N   D E   L A   R E P E T I T I O N  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME GENERE
<                    LA COMMANDE "RXYZ;", ET L'
<                    ENVOIE AU DISQUE VIDEO.
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DU BLOC DE SEQUENCE COURANT.
<
<
SPREP:   EQU         $
<
< INITIALISATIONS :
<
         PSR         A,B,X
         LA          AMR
         STA         ABUF            < INITIALISATION DU RELAI VERS LE BUFFER
                                     < VARIABLE DE FACON A ACCEDER A "RXYZ;",
         LXI         LMDKV-Z+I       < ET INITIALISATION DE L'INDEX D'INSER-
                                     < TION.
<
< GENERATION DE LA
< COMMANDE "RXYZ;" :
<
         LA          REPET           < (A)=FACTEUR DE REPETITION COURANT,
         CPZ         OPTREP          < OPTIMISE-T'ON ???
         IF          NEXIST-K,,XEIF%,
         IF          ATTENTION : CE TEST EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JE          SPREP3          < NON...
         CP          REPETC          < OUI, EST-CE LE PRECEDENT ???
         JE          SPREP2          < OUI, ON OPTIMISE...
SPREP3:  EQU         $
         STA         REPETC          < MEMORISATION DU 'REPET' COURANT...
         MP          AMULTI          < FACTEUR MULTIPLICATEUR,
         DV          ADIVIS          <                         ET DIVISEUR :
         JAG         SPREP4          < OK...
         LAI         R0              < LORSQUE LA VALEUR TROUVEE EST NEGATIVE
                                     < OU NULLE, ON PREND LE MINIMUM...
SPREP4:  EQU         $
         BSR         ASPNOM          < ET CONVERSION DECIMALE...
         LAI         FINDKV
         BSR         ASPCAR          < ET MISE EN PLACE DU LIMITEUR...
         LR          X,A
         CPI         LMR-Z+I         < ET VALIDATION DE L'INDEX FINAL...
         JLE         SPREP1          < OK...
         QUIT        XXQUIT          < E R R E U R   P R O G R A M M E ...
SPREP1:  EQU         $
<
< ENVOI DE LA COMMANDE :
<
         STA         DEMR+COESC      < ET MISE EN PLACE DE LA LONGUEUR DE LA
                                     < COMMANDE "RXYZ;",
         LAD         DEMR
         SVC                         < QUE L'ON ENVOIE...
         BSR         ASPSYN          < ET SYNCHRONISATION...
<
< ET RETOUR :
<
SPREP2:  EQU         $
         PLR         A,B,X
         RSR
         PAGE
<
<
<        G E S T I O N   D E   L A   D I F F U S I O N  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME GENERE
<                    LA COMMANDE "LXYZ XYZ;", OU LA
<                    COMMANDE 'R/C' SI LES ADRESSES
<                    DE DEBUT ET DE FIN SONT EGALES,
<                    ET L'ENVOIE AU DISQUE VIDEO.
<
<
<        ARGUMENT :
<                    (W)=ADRESSE DU BLOC DE SEQUENCE COURANT.
<
<
SPSEQ:   EQU         $
<
< INITIALISATIONS :
<
         PSR         A,B,X
         LA          AML
         STA         ABUF            < INITIALISATION DU RELAI VERS LE BUFFER
                                     < VARIABLE DE FACON A ACCEDER A "RXYZ;",
         LXI         LMDKV-Z+I       < ET INITIALISATION DE L'INDEX D'INSER-
                                     < TION.
<
< GENERATION DE LA
< COMMANDE "LXYZ XYZ;" :
<
         LA          ADEBUT          < (A)=ADRESSE DE DEBUT,
         ADRI        -I,A
         CP          AFINC           < SUIT-ON LA SEQUENCE PRECEDENTE ???
         JNE         SPSEQ3          < NON, DONC "L..." EST OBLIGATOIRE...
         ADRI        I,A             < OUI, ALORS :
         CP          AFIN            < N'Y-A-T'IL QU'UNE SEULE IMAGE ???
         LAD         DEMRC           < (OUI A PRIORI...)
         JE          SPSEQ2          < OUI, DONC "L..." EST INUTILE...
SPSEQ3:  EQU         $
         LA          ADEBUT          < NON, (A)=ADRESSE DE DEBUT,
         BSR         ASPNOM          < ET CONVERSION DECIMALE,
         CP          AFIN            < ADRESSES DE DEBUT ET DE FIN SONT-ELLES
                                     < EGALES ???
         JE          SPSEQ4          < OUI, IL SUFFIT D'ENVOYER "LXYZ;"...
         LAI         KSP             < NON :
         BSR         ASPCAR          < INSERTION D'UN ESPACEMENT...
         LA          AFIN            < (A)=ADRESSE DE FIN,
         BSR         ASPNOM          < CONVERSION DE L'ADRESSE DE FIN.
SPSEQ4:  EQU         $
         LAI         FINDKV
         BSR         ASPCAR          < ET MISE EN PLACE DU LIMITEUR...
         LR          X,A
         CPI         LML-Z+I         < ET VALIDATION DE L'INDEX FINAL...
         JLE         SPSEQ1          < OK...
         QUIT        XXQUIT          < E R R E U R   P R O G R A M M E ...
SPSEQ1:  EQU         $
<
< ENVOI DE LA COMMANDE :
<
         STA         DEML+COESC      < ET MISE EN PLACE DE LA LONGUEUR DE LA
                                     < COMMANDE "LXYZ XYZ;".
         LAD         DEML
SPSEQ2:  EQU         $
         SVC                         < ET ENVOI DE LA COMMANDE DE DIFFUSION DE
                                     < SEQUENECE "LXYZ XYZ;" OU 'R/C'...
         BSR         ASPSYN          < ET SYNCHRONISATION...
<
< ET RETOUR :
<
         LA          ADEBUT
         STA         ADEBUC          < MEMORISATION DE LA
         LA          AFIN
         STA         AFINC           <                    SEQUENCE COURANTE...
         PLR         A,B,X
         RSR
         PAGE
<
<
<        S O U S - P R O G R A M M E   D E   S Y N C H R O N I S A T I O N  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME ATTEND
<                    LES REPONSES DU DISQUE VIDEO,
<                    ET EVENTUELLEMENT EDITE SES
<                    REPONSES.
<
<
SPSYN:   EQU         $
<
< INITIALISATIONS :
<
         PSR         A,B,X
<
< LECTURE DE LA REPONSE,
< ET EDITION EVENTUELLE :
<
         LAD         DEMRER
         SVC                         < LECTURE DE LA REPONSE,
         IF          NEXIST-K,,XEIF%,
         IF          ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CPZ         OPTMES          < FAUT-IL EDITER LES REPONSES ???
         JE          SPSYN1          < NON...
         ACTD        XXXSIZ          < OUI :
                                     < (B)=NOMBRE DE CARACTERES RENVOYES...
         ADRI        LMBDKV-LMDKV,B  < QUE L'ON MODIFIE POUR INSERER UN MESSAGE
                                     < INITIAL ('LMBDKV'), ET SUPPRIMER LA FIN
                                     < DE MESSAGE...
         STB         DEMREW+COESC    < QUE L'ON INSERE DANS LA DEMANDE...
         LAD         DEMREW
         SVC                         < ET QUE L'ON ENVOIE...
SPSYN1:  EQU         $
<
< ET RETOUR :
<
         PLR         A,B,X
         RSR
         PAGE
<
<
<        P R O G R A M M E   D E   D I F F U S I O N  :
<
<
DEBUT:   EQU         $
<
< INITIALISATION DES REGISTRES :
<
         LRM         L,W,K
         WORD        LOC+DEPBAS      < INITIALISATION DE LA BASE LOCALE,
         WORD        LISTE           < ET DE 'W' SUR LA SEQUENCE A DIFFUSER...
         WORD        STACK-DEPILE    < ET ENFIN DE 'K'...
         STZ         REPETC          < CLEAR DE NOMBRE DE REPETITION COURANTE,
                                     < AFIN D'OPTIMISER LES ENVOIS...
         STZ         ADEBUC          < INITIALISATION DE LA
         DC          ADEBUC
         STZ         AFINC           <                      SEQUENCE COURANTE ;
         DC          AFINC
                                     < N'OUBLIONS PAS QUE L'IMAGE '0 N'EXISTE
                                     < PAS...
<
< CLEAR DU BUFFER D'ANTICIPATION :
<
         LAD         DEMCL
         SVC
<
< BOUCLE DE DIFFUSION :
<
LOOP1:   EQU         $
FINSEQ:: VAL         NEXIST          < INDICATEUR DE FIN DE SEQUENCE DANS LE
                                     < CHAMP 'REPET'.
         CPZ         REPET           < EST-CE LA FIN ???
         IF          FINSEQ-K,,XEIF%,
         IF          ATTENTION : CE TEST EST IDIOT !!!
XEIF%:   VAL         ENDIF
         JE          LOOP2           < OUI, ON ARRETE...
         JG          LOOP3           < OK, ON CONTINUE EN SEQUENCE...
<
< CAS DES POINTS D'ARRET :
<
         QUIT        XXQUIT          < P O U R   L E S   P A T C H E S ...
         JMP         LOOP1           < ET ON NE MODIFIE PAS 'W' AFIN DE RESTER
                                     < SUR LE MEME DESCRIPTEUR QU'ON A PU
                                     < MODIFIER SOUS 'DEBUG', AFIN DE SUPPRI-
                                     < MER LE POINT D'ARRET...
<
< CAS DES DESCRIPTEURS NORMAUX :
<
LOOP3:   EQU         $
         BSR         ASPREP          < NON, ON GERE LES REPETITIONS,
         BSR         ASPSEQ          < PUIS LA DIFFUSION PROPREMENT DITE...
         ADRI        LSEQ,W          < PUIS ON PASSE A L'ENTREE SUIVANTE...
         JMP         LOOP1           < SI CE N'EST PAS FINI...
<
< FIN D'EDITION :
<
LOOP2:   EQU         $
         QUIT        XXQUIT          < ON ATTEND...
         JMP         DEBUT           < ET ON RECOMMENCE...
         PAGE
<
<
<        S E Q U E N C E   P R O P R E M E N T   D I T E  :
<
<
LISTE:   EQU         $
<
< QUELQUES INITIALISATIONS :
<
A::      VAL         K               < 'A' DESIGNERA L'ADRESSE COURANTE ; ON
                                     < L'INITIALISE SUR L'IMAGE '0 QUI N'EXIS-
                                     < TE PAS...



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.