PROG
ZERO: EQU $
DZS '10 < INTERFACE AVEC 'CMS5'...
WORD DEBUT
WORD CAMT < POINT D'ENTREE...
DEBUT: EQU $
LRP L
BR -1,L < ET ON RENTRE DANS LE PROGRAMME...
<
<
< C O N S T A N T E S :
<
<
LCARTE:: VAL 80 < NOMBRE DE CARACTERES PAR CARTE.
NOCMO:: VAL 2 < NOMBRE D'OCTETS PAR MOT.
CCI:: VAL 1 < 'QUIT' DE RETOUR AU CCI...
FCCI:: VAL '02 < APPEL DU CCI INTERPRETATIF.
FWV:: VAL '02 < ECRITURE SUR LA VISU.
FR:: VAL '00 < LECTURE ASCI SUR CR1,
FW:: VAL '02 < ECRITURE SEQUENTIELLE SUR MT1,
FTM:: VAL '04 < ECRITURE D'UN TAPE-MARK.
VISU:: VAL '02 < NVP DE LA VISU.
CR:: VAL '0A < NVP DU LECTEUR DE CARTES,
MT:: VAL '0B < NVP DU DEROULEUR DE BANDES.
FCBA:: VAL 'FA00 < CONVERSION BINAIRE --> ASCI.
MOCD:: VAL '00FF < ACCES A L'OCTET DROIT.
EOT:: VAL '04 < CARACTERE DE FIN DE MESSAGE.
IJIJDX:: VAL 1
<
<
< L O C A L
<
<
LOCAL
LOC: EQU $
<
< BUFFERS ET MESSAGES :
<
BUFC: DZS LCARTE/NOCMO < BUFFER CARTE COURANTE,
BUFCF: DZS LCARTE/NOCMO < BUFFER DE LA CARTE FIN, QUI EST RENCONTRE
< EN PREMIERE POSITION POUR IDENTIFICATION.
M1: BYTE 19;'6D
ASCI "ASSIGN IMPOSSIBLE!"
ASSCR: ASCI "!ASSIGN "
BYTE CR=FCBA(MOCD;"=";"C";"R";"1";EOT
ASSMT: ASCI "!ASSIGN "
BYTE MT=FCBA(MOCD;"=";"M";"T";"1";EOT
ASSCL: ASCI "!CLOSE"
BYTE EOT;0
<
< DEMANDES A 'CMS5' :
<
DEMCF: BYTE CR;FR < LECTURE DE LA CARTE DE FIN.
WORD BUFCF-ZERO*NOCMO
WORD LCARTE
DEMC: BYTE CR;FR < LECTURE DE LA CARTE COURANTE.
WORD BUFC-ZERO*NOCMO
WORD LCARTE
DEMT: BYTE MT;FW < ECRITURE DE LA CARTE COURANTE.
WORD BUFC-ZERO*NOCMO
WORD LCARTE
DEMTM: BYTE MT;FTM < ECRITURE D'UN TAPE-MARK.
DEMASC: BYTE 0;FCCI < !ASSIGN A=CR1.
WORD ASSCR-ZERO*NOCMO
WORD LCARTE
DEMAST: BYTE 0;FCCI < !ASSIGN B=MT1.
WORD ASSMT-ZERO*NOCMO
WORD LCARTE
DEMCLO: BYTE 0;FCCI < !CLOSE
WORD ASSCL-ZERO*NOCMO
WORD LCARTE
DEMOUT: BYTE VISU;FWV < ENVOI D'UN MESSAGE SUR LA VISU.
WORD 0;0
<
< RELAIS :
<
ABUFC: WORD BUFC-IJIJDX,X < RELAI VERS LE BUFFER COURANT,
ABUFCF: WORD BUFCF-IJIJDX,X < RELAI VERS LE BUFFER DE FIN.
<
< SOUS-PROGRAMME :
<
APRINT: WORD PRINT < EDITION D'UN MESSAGE.
<
< CONSTANTES :
<
KIN: WORD -1 < COMPTEUR DES ENTRIES...
BLANC: ASCI " "
<
< PILE :
<
PILE: DZS 20
PAGE
PROG
<
<
< C A R T E A B A N D E :
<
<
CAMT: EQU $
LRM L,K
WORD LOC+128
WORD PILE-1
IC KIN
JE CAMT1 < PREMIERE FOIS...
<
< C'EST LA FIN :
<
CAMT2: EQU $
LAD DEMCLO
SVC 0
QUIT CCI < ET RETOUR AU CCI...
STZ KIN
DC KIN
JMP CAMT < CAS D'UN !GO...
<
< SORTIE EN ERREUR :
<
CAMT3: EQU $
LAD M1
BSR APRINT < EDITION D'UN MESSAGE...
JMP CAMT2 < ET ABORT...
<
< CAS DE LA PREMIERE FOIS :
<
CAMT1: EQU $
LAD DEMASC
SVC 0 < TENTATIVE DE !ASSIGN A=CR1...
JNE CAMT3 < IMPOSSIBLE...
LAD DEMAST
SVC 0 < TENTATIVE DE !ASSIGN A=MT1...
JNE CAMT3 < IMPOSSIBLE...
<
< LECTURE DE LA CARTE DE FIN :
<
LAD DEMCF
SVC 0
<
< LECTURE DES CARTES COURANTES :
<
CAMT4: EQU $
LA BLANC
LXI LCARTE/NOCMO
CAMT7: EQU $
STA &ABUFC < MISE A BLANC DU BUUFER CARTES AU
< CAS OU IL Y AURAIT UN EOT...
JDX CAMT7
LAD DEMC
SVC 0 < LECTURE DE LA CARTE COURANTE...
LXI LCARTE/NOCMO < EST-CE LA CARTE DE FIN ???
CAMT5: EQU $
LA &ABUFC
CP &ABUFCF < EST-CE LA DERNIERE ???
JNE CAMT6 < NON, IL FAUT L'ENREGISTRER...
JDX CAMT5 < OUI, PEUT-ETRE...
LAD DEMTM < ET OUI,
SVC 0 < ON ECRIT UN TAPE-MARK...
JMP CAMT2 < ET ON ARRETE...
CAMT6: EQU $
ACTD 3 < B=NOMBRE D'OCTETS LUS...
LR B,A
ADRI NOCMO-1,A
SLRS NOCMO=0
SLLS NOCMO=0
STA DEMT+2 < AFIN DE N'ECRIRE QUE CE QUI A ETE
< LU, MAIS SUR UNE LONGUEUR PAIRE...
LAD DEMT
SVC 0 < ENREGISTREMENT DES CARTES SUR BANDE...
JMP CAMT4 < VERS LA CARTE SUIVANTE...
PAGE
<
<
< E D I T I O N M E S S A G E :
<
<
< ARGUMENT :
< A=ADRESSE DU MESSAGE.
<
<
PRINT: EQU $
PSR A,X,C
LR A,C < C=ADRESSE DU MESSAGE...
SLLS NOCMO=0
ADRI NOCMO-1,A
STA DEMOUT+1 < ADRESSE OCTET DU MESSAGE,
LBY 0,C
STA DEMOUT+2 < ET LONGUEUR...
LAD DEMOUT
SVC 0 < EDITION DU MESSAGE...
PLR A,X,C
RSR
END
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.