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-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.