PAGE
EOT #SIP DEFINITION CMS5#
NMPROC: VAL "XX" < ????!!! (A CAUSE DE #CTE ITEM#)
IF ORDI-"T",XWOR%,,XWOR%
IDP "MASK - VERSION T1600 SOUS CMS4"
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
IDP "MASK - VERSION SOLAR SOUS CMS5"
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
SVCM1: VAL '01 < CODE DU 'SVC' MAITRE PERMETTANT LE
< RELEASE D'UN SEMAPHORE.
XWOR%: VAL 0
EOT #SIP DEFINITION ITEM#
<
<
< P I L E D E R E C U R S I V I T E :
<
<
< FORMAT :
< LA PILE 'PIR' EST FAITE D'ENTREE DOUBLE-
< MOTS ASSURANT LA RECURSIVITE DU LANGAGE
< DE DESCRIPTION DES SCENARI.
<
<
IR: VAL 0 < MOT0 : CAUSE DE L'EMPILEMENT :
< BIT1=1 : PUSH POUR REPETITIONS ,
< BIT2=1 : PUSH POUR APPEL PROG.,
< BIT3=1 : PUSH POUR SAUT PROG.
CODREP: VAL '40 < PUSH POUR REPETITIONS.
BITREP: VAL 1 < BIT DE REPETITIONS.
CODPRO: VAL '20 < PUSH POUR APPEL PROGRAMME.
BITPRO: VAL 2 < BIT APPEL PROGRAMME.
< A T T E N T I O N : BITPRO
< UTILISE AVEC BITDEF SIGINFIE
< QU'ON APPELLE UN PROGRAMME
< AVEC CHGT D'ITEM COURANT.
CODDEF: VAL '10 < PUSH POUR DEFINITION PROGRAMME.
BITDEF: VAL 3 < BIT DE SAUT DEFINITION PROG.
CDCP: VAL 1 < MOT1 : COMPTE DES 'DO' , ET
< LE COMPTE ALGEBRIQUE DES
< PARENTHESES.
CD: VAL 2*CDCP+0 < OCTET0(MOT1)=NBRE DE REPETITIONS
< RESTANT A FAIRE (INDEX DE TYPE
< OCTET) ,
CP: VAL 2*CDCP+1 < OCTET1(MOT1)=COMPTE ALGEBRIQUE
< DES PARENTHESES RENCONTREES
< SOUS CE NIVEAU :
< '(' : +1 ,
< ')' : -1.
LEPR: VAL 2 < NBRE DE MOTS OCCUPES PAR UNE
< ENTREE DE LA PILE PIR.
LPR: VAL 12 < NBRE D'ENTREES DE PIR.
XPR: VAL LEPR*LPR-LEPR
<
<
< D E S C R I P T E U R V I S U - E S C L A V E S :
<
<
DSEC VISESC
VISES: EQU $
MODE: WORD 0 < 0 : VISU ASSIGNEE (!ASSIGN),
< 1 : ASSIGNATION SIMULEE (NVP=).
NSPVIS: WORD 0 < NSP DE LA VISU ASSIGNNE A
< CET NVP : !ASSIGN NVP=NSP.
ADCTVI: WORD 0 < @DCT DE CETTE VISU.
DUREE: WORD 0 < DUREE RESTANT A PARCOURIR
< JUSQU'A LA FIN D'UNE COMMANDE 'W'.
HORLOG: WORD 0 < TEMPS COURANT EN MULTIPLE DE
< 2 SECONDES.
NOCT: WORD 0 < CODEM DE LA LECTURE COURANTE.
VIEG: WORD 0 < INDEX COURANT DE L'ITEM
< ASSOCIE A CETTE VISU.
NOMIT: DZS 4 < NOM DE L'ITEM ASSOCIE.
CONST0: EQU $ < LISTE DES CONSTANTES SUR
< LESQUELLES PEUVENT PORTER
< DES OPERATIONS.
NCONST: VAL 16 < NBRE DE CONSTANTES (0 A NCONST-1).
NCONSG: VAL NCONST-12 < NBRE DE CONSTANTES GLOBALES
< (0 A NCONSG-1) PARMI LES
< NCONST CONSTANTES.
DZS NCONST
CCONST: WORD 0 < NUMERO DE LA CONSTANTE
< COURANTE.
APRC: WORD PIR,X < RELAI COURANT VERS PIR.
BPR: WORD PIR < BASE DE PIR,
TPR: WORD PIR+XPR < TOP DE PIR.
PIR: EQU $ < PILE DE RECURSIVITE.
WORD 0;0 < BLOCAGE 1ERE ENTREE.
DZS XPR
LVISES: VAL $-VISES < LONGUEUR DE LA PARTIE DU
< DESCRIPTEUR A RAZER.
NVPVIS: WORD 0 < NVP DE LA VISU.
NOMVIS: BYTE 5;'6D
ASCI "NVPN"
LLVIS: VAL $-VISES < LONGUEUR TOTALE DU CONTEXTE.
<
<
< L O C A L :
<
<
TABLE
ZERO: EQU $
DZS 'C
<
< INTERFACE DE '!CALL' :
<
NTASK: ASCI "MASK"
BYTE '04;'D0
WORD SIZE < NOMBRE D'OCTETS NECESSAIRES.
ADEBUT: WORD DEBUT
WORD TASK < ENTRY POINT DU MODULE.
PROG
DEBUT: EQU $
LRP L
BR -1,L < ENTRY DANS LE MODULE.
XDEBUT: VAL $-ADEBUT
DZS DEBUT-ZERO-XDEBUT
JMP DEBUT < TOUT CECI POUR LA RAISON SUI-
< VANTE : LORSQU'ON ARRIVE DE
< !CALL, ON A : PRESC='10, ET SI
< ON EFFECTUE UN ALT-MODE, ON
< TOMBE SUR LE MOT ADEBUT, ASSIMILE
< A UN 'JMP', QUI NOUS FERA
< RETOMBER GRACE AU DZS QUI
< PRECEDE SUR LE DEBUT DU PROGRAMM.
<
<
< I T E M C O U R A N T :
<
<
NITEM: WORD 0;0;0 < PAS D'ITEM COURANT.
BYTE '04;0
LNITEM: VAL $-NITEM
DZS LTN-LNITEM
ITEM: DZS LTNI-LTN
<
< LOCAL PROPREMENT DIT :
<
MMODE: BYTE 10;" "
ASCI "(!ASSIGN) "
MITEM: BYTE 5;" "
ASCI "ITEM"
MINEF: BYTE 11;'6D
ASCI "NON EMISE!"
MVIS: BYTE 4;"="
ASCI "VIS "
CSYS: ASCI "!L :SY"
BYTE "S";'04
LSYS: VAL $-CSYS*2
LOCAL
LOC: EQU $
<
< MESSAGES DIVERS :
<
MSYS: BYTE 7;'6D
ASCI "ACN???"
MARRET: BYTE 4;" "
ASCI "FIN "
MERR: BYTE 3;" "
ASCI "??"
MNUL: BYTE 4;0;0;0;0 < "NULL"...
MERR1: BYTE 1;0 < MESSAGE VARIABLE...
MRCLF: BYTE 2;'6D;" ";0
AMMODE: WORD MMODE
AMITEM: WORD MITEM
AMINEF: WORD MINEF
AMVIS: WORD MVIS
MEGAL: BYTE 1;"="
MENTER: BYTE 7;'6D
ASCI "ENTER!"
MINTER: BYTE 1;">"
MASS: ASCI "!ASSIGN "
BYTE 0;"=";"S";'04
LMASS: VAL $-MASS < LONGUEUR CARTE !ASSIGN.
<
< MOT DE PASSE :
<
NLS
MPASS: BYTE '03;'1D
MPASS1: BYTE '00;":"
ASCI "SYS1470975114380:JFC"
MPASS2: BYTE '00;'10;'04;0
MAGIC: WORD 7 < CONSTANTE MAGIQUE...
LST
MALT: BYTE '7D;'84 < POUR L'ENVOI D'UN ALT-MODE.
<
< CONSTANTES DE L'UTILISATEUR ET DE LA VISU ASSIGNEE A '0B :
<
ESC1: WORD 0 < NSPESC DE CET UTILISATEUR.
NSPIN: WORD 0 < NSPIN DE CET UTILISATEUR.
<
< MESSAGE COURANT :
<
ABUF: WORD 0 < RELAI RELATIF MESSAGE COURANT.
ABUFA: WORD 0 < RELAI ABSOLU MESSAGE COURANT.
XBUF: WORD 0 < INDEX COURANT MESSAGE COURANT.
BUF: DZS 40
BYTE '04;0 < PAR PRUDENCE : CAS DES
< MESSAGES SANS 'EOT'.
<
< RELAIS DIVERS :
<
AWORK: WORD 0 < REALI DE TRAVAIL.
ASEND: WORD SEND < ROUTINE MAITRE 'WRITE 1 CAR.'.
APRINT: WORD PRINT < ROUTINE D'EMISSION MESSAGE.
ATEOT: WORD TEOT < TEST FIN DE MESSAGE.
AGTCAR: WORD GTCAR < ACCES CARACTERE POUR LES
< CODAGES DE NOMS D'ITEM.
AGETCO: WORD GETCO < DECODAGE BINAIRE 1-9, A-Z.
ACOD: WORD CODAGE < CODAGE DES NOMS D'ITEM.
ATASK: WORD TASK
ASENDV: WORD SENDV < ESSAI D'ENVOI A UNE VISU.
ATIME: WORD 0 < @DE LA DATE/HEURE DU SYSTEME.
ANIT0: WORD NITEM+0
ANIT1: WORD NITEM+1
ANIT2: WORD NITEM+2
ANITEM: EQU ANIT0 < RELAI VERS LE NOM DE
< L'ITEM COURANT.
ACOMD: WORD COMD,X < TABLE D'ANALYSE DES COMMANDES.
KOMPT: WORD 0 < COMPTEUR DES NVP INTERESSANTS.
LIMIT: WORD 0 < CONTIENT EN TEMPORAIRE
< LE CARACTERE COURANT DE FIN DE
< MESSAGE EQUIVALENT A 'EOT'
< POUR CHAQUE ITEM.
C10: WORD 10
C16: WORD 16
CFFF: WORD '0FFF < RAZ DES BITS 0 A 3.
F3: WORD 0 < FONCTION DE CODAGE NOMIT.
ALLVIS: WORD LLVIS < LONGUEUR TOTALE DU CONTEXTE.
KCAR: WORD 0 < COMPTEUR DES CARACTERES MESSAGES.
COMC: WORD 0 < SAVE LA COMMANDE COURANTE.
IENTER: WORD 0 < 0 : PAS DE 'I' EN COURS.
AMAJIE: WORD MAJIEG
AERR: WORD ERREUR
AERR1: WORD ERR1
AFSEND: WORD FSENDV
AANALY: WORD ANALYS < ANALYSE DU MESSAGE COURANT.
AFINIT: WORD FINITE
AEXTAS: WORD EXTAS < ROUTINE DE PARCOURS DE TASSGN.
BEXTAS: WORD MEXTAS < PARCOURS MAITRE DE TASSGN.
AASIGN: WORD ASSIGN < SIMULATION DES ASSIGNATIONS.
<
< DESCRIPTEURS VISUS-ESCLAVES :
<
ADESC: WORD DESC,X < LISTE DES DESCRIPTEURS.
MDESC: WORD 0 < ADESC ABSOLUTISE.
DESC: EQU $
WORD 0 < NVP=0,
WORD 0 < NVP=1,
WORD 0 < NVP=2,
WORD NSP3,X < NVP=3,
WORD NSP4,X < NVP=4,
WORD NSP5,X < NVP=5,
WORD NSP6,X < NVP=6,
WORD NSP7,X < NVP=7,
WORD NSP8,X < NVP=8,
WORD NSP9,X < NVP=9.
WORD 0 < NVP=A,
WORD 0 < NVP=B.
CDESC: WORD 0 < @RELATIVE DESCRIPTEUR COURANT.
<
< NOTA : LORSQUE LE BIT0 D'UN RELAI EST A 1,
< CELA SIGNIFIE QUE LE NVP CORRESPONDANT
< N'EST PAS ASSIGNE ; SI LE RELAI EST A 0,
< LE NVP NE PEUT ETRE ASSIGNE.
<
<
< DEMANDES A CMS4 :
<
DEM1C: WORD '0101 < ENTREE 1 CARACTERE.
WORD BUF-ZERO*2
WORD 1
DEMIN: WORD '0101 < LECTURE ASCI AVEC ECHO.
WORD BUF-ZERO*2
WORD 80
DEMOUT: WORD '0202 < DEMANDE D'EDITION DE MESSAGES.
WORD 0 < @OCTET DU MESSAGE.
WORD 0 < NBRE DE CARACTERES DU MESSAGES.
CCI: WORD '0001 < ACCES AU CCI.
CCINT: WORD '0002 < APPEL CCI NON INTERACTIF.
WORD BUF-ZERO*2 < SUR LE MESSAGE COURANT.
WORD 80
DSYS: WORD '0002 < ENVOI DE "!L :SYS"...
WORD CSYS-ZERO*2
WORD LSYS
SLEEP: WORD '0005;0;0 < DEMANDE DE TEMPORISATION.
SCH: WORD '0006 < DEMANDE DE RETOUR AU SCHEDULER.
<
< ACCES A L'ITEM COURANT :
<
IEG: WORD 0 < INDEX COURANT DE L'ITEM.
AITEM: WORD ITEM,X < RELAI D'ACCES A L'ITEM.
ANOMC: WORD 0 < RELAI TEMPORAIRE VERS LE
< NOMIT EN COURS DE CODAGE.
NCP: WORD NBCAR*NBLIG < NBRE D'OCTETS D'UN ITEM.
DEMSGN: WORD '8502 < ACCES A UN ITEM.
WORD NITEM-ZERO*2
WORD 2*LTNI
WORD -1
<
< L I S T E D E S E V E N E M E N T S :
<
LEVENT: WORD '0000;'0000 < 1 BIT PAR EVENEMENT (0-31).
<
< P I L E D E T R A V A I L :
<
STACK: DZS 16
<
< C O N T E X T E S V I S U S :
<
NSP3: DZS LVISES
WORD 3
BYTE 5;'6D
ASCI "NVP3"
NSP4: DZS LVISES
WORD 4
BYTE 5;'6D
ASCI "NVP4"
NSP5: DZS LVISES
WORD 5
BYTE 5;'6D
ASCI "NVP5"
NSP6: DZS LVISES
WORD 6
BYTE 5;'6D
ASCI "NVP6"
NSP7: DZS LVISES
WORD 7
BYTE 5;'6D
ASCI "NVP7"
NSP8: DZS LVISES
WORD 8
BYTE 5;'6D
ASCI "NVP8"
NSP9: DZS LVISES
WORD 9
BYTE 5;'6D
ASCI "NVP9"
<
< L I S T E D E S C O M M A N D E S :
<
COMD: EQU $-" "
WORD COMEN1 < 'SPACE'
WORD CARTC < !
WORD ERR1 < "
WORD FDODO < #
WORD ERR1 < $
WORD RECUR < %
WORD ERR1 < &
WORD ERR1 < '
WORD BREC < (
WORD ENDR < )
WORD PPASS < *
WORD CHGIT < +
WORD ERR1 < ,
WORD SUPIT < -
WORD ERR1 <.
WORD E10 < /
WORD ERR1 < 0
WORD COMPT < 1
WORD COMPT < 2
WORD COMPT < 3
WORD COMPT < 4
WORD COMPT < 5
WORD COMPT < 6
WORD COMPT < 7
WORD COMPT < 8
WORD COMPT < 9
WORD ERR1 < :
WORD ERR1 < ;
WORD COMEN1 < <
WORD EOT < =
WORD COMEN2 < >
WORD ERR1 < ?
WORD GCONST < @
WORD ASSGN < A
WORD ERR1 < B
WORD GOCCI < C
WORD ERR1 < D
WORD ERR1 < E
WORD FINRAZ < F
WORD ERR1 < G
WORD TEMPO < H
WORD ENTERM < I
WORD ERR1 < J
WORD ERR1 < K
WORD ERR1 < L
WORD ERR1 < M
WORD ERR1 < N
WORD ERR1 < O
WORD ERR1 < P
WORD ERR1 < Q
WORD EVENT < R
WORD EVENT < S
WORD EVENT < T
WORD ERR1 < U
WORD ERR1 < V
WORD WTEMPO < W
WORD SALTM < X
WORD ERR1 < Y
WORD ERR1 < Z
PROG
USE C,VISES
PAGE
<
<
< E M I S S I O N M E S S A G E :
<
<
< ARGUMENT :
< A=@MOT DU MESSAGE.
<
<
PRINT: EQU $
PSR X,C
LR A,C < C=@MESSAGE.
ADR A,A
ADRI 1,A < A=@OCTET DU MESSAGE.
STA DEMOUT+1
LBY 0,C < A=LONGUEUR DU MESSAGE.
STA DEMOUT+2
LAD DEMOUT
SVC 0 < EDITION DU MESSAGE.
PLR X,C
RSR
PAGE
<
<
< T E S T F I N D E M E S S A G E :
<
<
< ARGUMENT :
< X=INDEX DE BUF, DONNE LE
< RANG DU CARACTERE A TESTER.
<
<
< RESULTAT :
< A=CARACTERE TESTE (SI CELUI-CI
< ETAIT R/C, IL EST REMPLACE
< PAR 'EOT'),
< CODE DE CONDITIONS POSITION-
< NES POUR TEST EN RETOUR JE/JNE...
<
<
TEOT: EQU $
LBY &ABUF < A=CARACTERE A TESTER.
ANDI '7F < CARACTERE SUR 7 BITS.
CPI '04
JE TEOT1 < C'EST EOT...
CPI '0D
JNE TEOT1 < CE N'EST PAS R/C...
LAI '04 < C'EST R/C, ON LE
STBY &ABUF < REMPLACE PAR 'EOT'.
TEOT1: EQU $
RSR
PAGE
<
<
< S I M U L A T I O N E N T R E E M E S S A G E :
<
<
WORD LOC+'80
TASK: EQU $ < ENTRY POINT DU MODULE.
DEB: EQU $
LRP L
LA -1,L
LR A,L
LAI DEBUT-ZERO
WORD '1EB5 < PRESC(ESCLAVE)<--'DEBUT'.
LAD STACK-1
LR A,K
<
< PLACONS-NOUS SI POSSIBLE SOUS ":SYS" :
<
DEB2: EQU $
LAD DSYS
SVC 0 < ENVOI DE "!L :SYS" :
JE DEB1 < OK...
LAD MSYS
BSR APRINT < IMPOSSIBLE,
LAD CCI
SVC 0 < ON VA AU CCI,
JMP DEB2 < ET ON BOUCLE EVENTUELLEMENT...
DEB1: EQU $
LAD MENTER
BSR APRINT < ENVOI D'UN MESSAGE AVANT LE CCI.
LAD CCI
SVC 0 < ON RETOURNE AU CCI ; CECI SERA
< SURTOUT UTILISE SUITE A UN
< ALT-MODE, POUR FAIRE DES !ASSIGN.
<
< ACCES A LA DCT DE CET UTILISATEUR :
<
WORD '1E45 < RENVOIE : A=IDESC.
ADRI NSPESC,A
SBT 0 < AFIN D'ACCEDER A DCTSY INDEXEE
< PAR LE NSP DE CET UTILISATEUR.
WORD '1E15 < RENVOIE : B=@DCTESC.
LR B,A
STA ESC1 < SAVE @DCTESC.
ADRI YASSGN,A < POUR ACCES AU NVP='01.
WORD '1E15 < RENVOIE : B='00,NSPIN.
STB NSPIN < SAVE LE NSPIN DE CET UTILISATEUR.
<
< PREPARATION A L'ACCES A LA DATE/HEURE :
<
LAI NSPDAT
SBT 0
WORD '1E15 < RENVOIE : B=@LISTE DES COMPOSAN-
< TES DE LA DATE/HEURE.
STB ATIME < ET SAVE CETTE @.
STZ LEVENT < A CAUSE DES
STZ LEVENT+1 < ALT-MODES !!!
<
< PREMIERE SIMULATION D'ASSIGNATION :
<
BSR AEXTAS < AFIN DE FAIRE UNE EDITION
< CORRECTE DES NVP --> NSP.
BSR AASIGN
<
< EXPLORATION DE TASSGN, ET ENVOI DES MESSAGES :
<
LOOP14: EQU $
BSR AEXTAS < EXPLORATION DE TASSGN.
LOOP10: EQU $
LXI 0 < X=1ER NVP A TESTER.
LYI NVPMAX+1 < Y=1ER NVP INEXISTANT.
STZ KOMPT < RAZ DU COMPTEUR DES NVP.
LOOP11: EQU $
LA &ADESC < ACCES AU DESCRIPTEUR (X).
JALE LOOP12 < A NE PAS TESTER, OU NON
< ASSIGNE.
PSR X,Y
LR A,C < C=@DESCRIPTEUR.
LOOP30: EQU $
CPZ NOMIT < Y-A-T'IL UN ITEM ASSOCIE ???
JNE LOOP21 < OUI, ON VA LE LIRE...
<
< INITIALISATION DES NOMS D'ITEMS ASSOCIES :
<
LAD MRCLF
BSR APRINT < ENVOI D'UN MESSAGE.
LAD NOMVIS
BSR APRINT < EMISSION DU NVP AUQUEL EST
< ASSOCIE L'ITEM DEMANDE.
LA AMITEM
BSR APRINT
LAD MEGAL
BSR APRINT < ENVOI DU LIMITEUR '='.
LAD DEMIN
SVC 0 < ENTREE D'UN NOM PRESUME.
LAD BUF
ADRI -1,A < PAR COMPATIBILITE AVEC CODAGE.
SBT 0
STA ABUF < RELAI VERS LE BUFFER D'ENTREE.
BSR ACOD < CODAGE SUR 6 CARACTERES.
JMP LOOP30 < ET C'EST REPARTI...
<
< MISE EN PLACE DU NOM DE L'ITEM COURANT :
<
LOOP21: EQU $
LA NOMIT+0
CP &ANIT0
JNE LOADI < L'ITEM ASSOCIE N'EST PAS
< L'ITEM RESIDENT : VERS LE LOAD
< DE CELUI-CI.
LA NOMIT+1
CP &ANIT1
JNE LOADI < ITEM ASSOCIE NON RESIDENT.
LA NOMIT+2
CP &ANIT2
JE NLOAD < L'ITEM ASSOCIE EST DEJA
< RESIDENT, INUTILE DONC DE
< LE RECHARGER...
LOADI: EQU $ < CHARGEMENT DE L'ITEM ASSOCIE.
LAD NOMIT < A=@EMETTEUR,
LB ANITEM < B=@RECEPTEUR,
LXI 3 < X=3 CARACTERES A DEPLACER,
MOVE < MISE EN PLACE DU NOM DE
< L'ITEM COURANT.
LAD DEMSGN
SVC 0 < TENTATIVE DE LECTURE DE
< L'ITEM ASSOCIE A LA VISU
< ASSIGNEE A CE NVP.
JE NLOAD < OK, L'ITEM ASSOCIE EXISTE.
STZ &ANIT0 < LORS DES ERREURS DE CHAR-
STZ &ANIT1 < GEMENT, ON SUPPRIME LE
STZ &ANIT2 < NOM DE L'ITEM COURANT.
JMP LOOP13
NLOAD: EQU $ < L'ITEM ASSOCIE EST LA...
IC KOMPT < OK, ON COMPTE LE NVP.
LXI 0
LBY &AITEM < RECUPERATION DU 1ER CARACTERE
< DE L'ITEM COURANT,
STA LIMIT < QUI DEFINIT, POUR CET ITEM
< LE CARACTERE DE FIN DE MESSAGE
< EQUIVALENT A 'EOT'.
BSR ASENDV < ET ON VA ESSAYER D'ENVOYER
< LE MESSAGE COURANT DE CETTE
< VISU...
LOOP13: EQU $
PLR X,Y
LOOP12: EQU $
ADRI 1,X < PASSAGE AU NVP SUIVANT.
CPR X,Y < EXISTE-T'IL...
JNE LOOP11 < OK, ON LE TESTE.
CPZ KOMPT < SINON, A'T'ON TROUVE AU MOINS
< UN NVP INTERESSANT ???
JNE LOOP10 < OUI, DONC ON REBOUCLE.
BSR AASIGN < ESSAI DE SIMULATION !ASSIGN.
LAD CCI < NON, ALORS ON ATTEND
SVC 0 < EN RETOURNANT AU CCI.
JMP LOOP14 < PUIS ON RECOMMENCE SI !GO.
PAGE
PROG P1
<
<
< F I N E T R A Z U N N V P :
<
<
< FONCTION :
< 'F' A LA MEME FONCTION QUE '/',
< MAIS DE PLUS, L'INDEX ITEM EST
< REMIS EN TETE DE L'ITEM (1),
< L'ITEM ASSOCIE, AINSI QUE L'ITEM
< RESIDENT SONT SUPPRIMES.
< RAPPELONS QUE '/' NE FAIT QUE
< DESASSIGNER LE NVP !!!
<
<
FINRAZ: EQU $
STZ IEG
IC IEG < IEG <-- 1.
STZ NOMIT < SUPPRESSION ITEM ASSOCIE.
STZ &ANIT0 < SUPPRESSION ITEM RESIDENT.
JMP E10 < VERS LE TRAITEMENT DE '/'.
<
<
< E N V O I D E S M E S S A G E S :
<
<
< ARGUMENT :
< C=@DESCRIPTEUR DE LA VISU VERS LAQUELLE
< ON DOIT TENTER L'ENVOI D'UN MESSAGE.
<
<
SENDV: EQU $
LOOP2: EQU $
LAD BUF
SBT 0
STA ABUF < ABUF RELAYE BUF A PRIORI.
STZ XBUF
IC XBUF < XBUF=1 A PRIORI.
<
< ENTREE DU MESSAGE COURANT :
<
LOOP3: EQU $
LYI 80 < NBRE D'OCTETS PAR CARTE.
LXI 0 < INDEX INITIAL BUFFER.
STZ KCAR < RAZ COMPTEUR DES CARACTERES
< DU MESSAGE COURANT (NON
< COMPRIS L'EOT).
LA VIEG < INDEX COURANT ITEM-VISU,
STA IEG < QUE L'ON MET EN TEMPORAIRE.
GETCAR: EQU $
LA IEG
CP NCP < VALIDATION IEG
JL E1 < OK.
E10: EQU $
<
< DESASSIGNATION DU NVP :
<
CPZ MODE < !ASSIGN OU NVP= ???
JNE SIMU1 < ASSIGNATION SIMULEE (NVP=).
LAD MASS < A=@EMETTEUR.
LB ABUF
RBT 0+NBITMO < B=@RECEPTEUR.
LXI LMASS < X=NBRE DE MOTS A DEPLACER.
MOVE < MISE DE !ASSIGN DANS BUF.
LA NVPVIS < A=NVP A DESASSIGNER.
ADRI '30,A < CONVERSION ASCI DU NVP.
LXI LMASS*2-4
STBY &ABUF < MISE DU NVP DANS !ASSIGN NVP=S.
LAD CCINT
SVC 0 < ENVOI DU !ASSIGN NVP=S.
SIMU1: EQU $
BR AFINIT < DEBORDEMENT : FIN D'ITEM, ON
< ARRETE LA POUR CETTE VISU.
<
< ACCES AU CARACTERE COURANT :
<
E1: EQU $
PSR X
LR A,X
LBY &AITEM < A=OCTET COURANT DE L'ITEM.
CP LIMIT < EST-CE LE CARACTERE DE FIN
< DE MESSAGE COURANT ???
JNE GET3 < NON.
LAI '04 < OUI, ON LE REMPLACE PAR 'EOT'.
GET3: EQU $
IC IEG < PROGRESSION IEG.
PLR X
CPZR X < EST-CE LE 1ER CARACTERE BUFFER ???
JE GET1 < OUI, IL RESTE TEL QUEL...
TBT 8 < EST-CE UN CTRL-XXX ???
JNC GET1 < NON, CARACTERE NORMAL.
RBT 8 < OUI, A=CTRL-XXX.
ADRI -'40,A
GET1: EQU $
STBY &ABUF
CPI '04 < EST-CE UN 'EOT' ???
JE GET2 < OUI, FIN DE MESSAGE.
CPI '0D < EST-CE UN 'RETURN' ???
JE GET2 < OUI, FIN DE MESSAGE.
IC KCAR < COMPTAGE DES CARACTERES
< DIFFERENTS DE 'LIMIT'.
ADRI 1,X < PROGRESSION INDEX BUFFER.
CPR X,Y < 80 OCTETS ???
JNE GETCAR < NON, AU SUIVANT.
GET2: EQU $
<
< P R E - A N A L Y S E :
<
STZ IENTER < 0 : PAS DE 'I' A PRIORI.
ANALYS: EQU $
LXI 0 < INDEX INITIAL BUFFER.
<
< PRE-ANALYSE DU MESSAGE :
<
< DEFINITION DU PREMIER CARACTERE :
<
< 'SPACE' COMMENTAIRE,
< < COMMENTAIRE,
< > TEXTE A EDITER,
< I MESSAGE COURANT A ENTER SUR NVP='01.
< A SIMULATION DES ASSIGNATIONS
< NVP --> NSP VISU.
< ! CARTE CONTROLE DESTINEE AU CCI
< DE LA VISU LOCALE,
< C ACCES AU CCI LOCALE,
< + SUIVI PAR UN 'NVP' (3-9),
< PERMET DE DEFINIR L'ITEM ASSOCIE
< A CE 'NVP'.
< - SUPPRIME L'ITEM ASSOCIE A UN NVP,
< NOTA : POUR + ET - LE NVP
< PEUT S'ECRIRE @, AUQUEL CAS
< ON PREND LE NVP COURANT.
< = MESSAGE CONTENANT UN 'EOT' EN FIN,
< # IDEM A '=', MAIS AVEC BLOCAGE
< PREALABLE DE TOUT LE SYSTEME
< PENDANT 2 SECONDES.
< '1' A '9' MESSAGE SANS 'EOT' DE LONGUEUR
< DE 1 A 9 CARACTERES,
< * DEMANDE DU MOT DE PASSE DYNAMIQUE,
< X ENVOI D'UN ALT-MODE,
< / FIN DE LA LISTE DES MESSAGES.
< F FIN DE LISTE ET RAZ,
< %K( DEBUT DE RECURSIVITE,
< ) FIN DE RECURSIVITE.
< @K DEFINITION DE CCONST (=K),
< @K=XXX INITIALISATION DE LA CONST K,
< @K+XXX INCREMENTATION DE CONST K,
< @K-XXX DECREMENTATION DE CONST K.
< XXX PEUT S'ECRIRE : CONSTANTE HEXADECIMALE,
< OU @L (CONST L),
< OU @LN (CONST L DU NVP=N),
< HK TEMPORISATION DE K SECONDES.
< MAIS BLOQUE L'ENSEMBLE DES NVP !!!
< WK MISE EN ATTENTE DE K SECONDES
< DE L'ITEM COURANT (NE BLOQUE PAS
< LES AUTRES !!!).
< RK RESET EVENEMENT K,
< SK SET EVENEMENT K, SI K>=16,
< TK (K<16) SI L'EVENEMENT K EST ARRIVE,
< ON ATTEND, SINON, ON LE MET
< A 1 ET ON CONTINUE EN
< SEQUENCE (TEST & SET),
< TK (K>=16) SI L'EVENEMENT K EST ARRIVE,
< ON CONTINUE EN SEQUENCE,
< SINON, ON L'ATTEND.
<
<
< IMPORTANT :
< TOUS LES MESSAGES DEFINIS CI-DESSUS
< DOIVENT SE TERMINES PAR UN LIMITEUR
< DU TYPE 'EOT' (VOIR LE 1ER CARACTERE
< DE CHAQUE ITEM).
<
<
< IMPORTANT :
< SI LE PREMIER CARACTERE EST EN EXPOSANT,
< LA SUITE DU MESSAGE DOIT ETRE VIDE, ET EST REMPLACEE
< PAR LA CONSTANTE COURANTE (CCONST) CODEE
< EN ASCI SUR 1 A 9 CHIFFRES :
< 1-9 --> 1 A 9 CHIFFRES,
< LES AUTRES COMMANDES DONNANT 4 CHIFFRES.
<
LBY &ABUF < X=0 (SVC) : ACCES AU 1ER CARACTERE
TBT 8 < EST-IL EN EXPOSANT ???
JNC NORM1 < NON, MODE NORMAL...
<
< CAS OU UNE CONSTANTE VA ETRE CODEE EN ASCI :
<
RBT 8
LYI 4 < 4 CARACTERE DE CODAGE.
CPI "1"
JL NORM2 < ON N'EST PAS ENTRE 1 ET 9.
CPI "9"
JG NORM2 < ON N'EST PAS ENTRE 1 ET 9.
ADRI -'30,A < ENTRE 1 ET 9, LA COMMANDE
LR A,Y < DONNE LE NBRE DE CARACTERES
< CODES.
NORM2: EQU $
LXI 1
BSR ATEOT < TEST DE MESSAGE VIDE ???
JNE ERR1 < NON, ERREUR !!!
PSR W
LAD CONST0
AD CCONST
LR A,W < W=@CONSTANTE COURANTE.
LB 0,W < B=CONSTANTE COURANTE.
LR Y,A
CPI 4 < CODE-T'ON PLUS OU MOINS DE
< 4 CARACTERES ???
JLE NORM7 < 4 OU MOINS DE 4 CARACTERES.
ADRI -4,A < A=NBRE DE CARACTERES EXCE-
< DANT LES 4.
LR A,X < X=1, 2,.. (NBRE DE '0').
LYI 1 < Y=INDEX DE STORE '0'.
LAI "0" < CARACTERES INSERES PREA-
< LABLEMENT...
NORM8: EQU $
XR X,Y
STBY &ABUF < INSERTION DES '0' PRELIMINAIRES.
XR X,Y
ADRI 1,Y < INDEX DES '0'.
JDX NORM8 < AU SUIVANT.
LR Y,X < X=INDEX DES CHIFFRES A SUIVRE.
LYI 4 < Y=4 CARACTERES A CODER.
JMP NORM9 < VERS LE CODAGE...
NORM7: EQU $
LBI 0 < CLEAR B.
SLLS 2 < CONVERSION EN NBRE DE BITS.
LR A,X
LA 0,W < A=CONSTANTE COURANTE.
SLRD 0,X < CADRAGE CORRECT DANS B.
NORM6: EQU $
LXI 1 < X=INDEX DE CODAGE.
NORM9: EQU $
PLR W
NORM3: EQU $
LAI 0
SLLD 4 < DECONCATENATION.
CPI 9
JLE NORM5 < CHIFFRE DECIMAL.
ADRI "A"-"9"-1,A < CODAGE ASCI.
NORM5: EQU $
ADRI "0",A < CODAGE ASCI SUITE.
STBY &ABUF < ET MISE DANS LE BUFFER ASCI.
ADRI 1,X < PROGRESSION INDEX BUFFER,
ADRI -1,Y < DECOMPTE DES CARACTERES GENERES.
CPZR Y < C'EST FINI ???
JG NORM3 < NON...
LAI '04 < OUI, ON SIMULE UN 'EOT'.
STBY &ABUF < MIS DANS LE BUFFER.
LXI 0
LBY &ABUF
RBT 8 < A=COMMANDE COURANTE...
<
< T R A I T E M E N T C O M M A N D E
< C O U R A N T E :
<
NORM1: EQU $
CPI " "
JL ERR1 < ERREUR DE SYNTAXE.
CPI "Z"
JG ERR1 < ERREUR DE SYNTAXE.
LR A,X < X=INDEX COMMANDE.
STA COMC < SAVE LA COMMANDE COURANTE.
BR &ACOMD < VERS LE MODULE SPECIFIQUE.
<
< E R R E U R S D E S Y N T A X E :
<
ERR1: EQU $
SBT 7 < MISE D'UNE LONGUEUR=1
STA MERR1 < DEVANT LE CARACTERE ERRONE.
LAD NOMVIS
BSR APRINT < ENVOI DU NVP EN CAUSE.
LAD MERR1
BSR APRINT < ENVOI DU CARACTERE EN CAUSE.
LAD MERR
BSR APRINT < ENVOI DE ??
BR AMAJIE < VERS LA MAJ DE IEG...
<
< E N V O I A L T - M O D E :
<
SALTM: EQU $
LAD MALT
SBT 0
STA ABUF < ABUF RELAYE LE ALT-MODE.
DC XBUF < XBUF=0.
JMP EOT < ET C'EST TOUT...
<
< E N V O I M E S S A G E A V E C
< D O D O P R E A L A B L E :
<
FDODO: EQU $
LAI 2
STA SLEEP+2
LAD SLEEP
SVC 0 < MISE EN ATTENTE PENDANT 2S.
JMP EOT < PUIS ESSAI D'ENVOI MESSAGE.
<
< A P P E L C C I L O C A L I N T E R P R E T A T I F :
<
CARTC: EQU $
LAD CCINT
SVC 0 < APPEL DU CCI NON INTERACTIF.
JNE E4 < ERREUR DE CARTE CONTROLE.
BSR AEXTAS < APRES CHAQUE APPEL DU CCI,
< ON REPARCOURT TASSGN.
E8: EQU $
BR AMAJIE
<
< A C C E S C C I L O C A L I N T E R A C T I F :
<
GOCCI: EQU $
LAD CCI
SVC 0 < ALLER AU CCI...
BR AMAJIE < APRES UN !GO...
<
< C H A N G E M E N T D E L ' I T E M
< A S S O C I E A U N N V P :
<
< S U P P R E S S I O N :
<
SUPIT: EQU $
LR A,B < SAVE B=FONCTION.
LXI 2
BSR ATEOT < NVP SUIVI D'UN EOT ???
JNE E4 < NON, ERREUR !!!
LR B,A < RESTAURE A=FONCTION.
<
< A J O U T :
<
CHGIT: EQU $
LR A,B < SAVE LA FONCTION DEMANDEE
< DANS B ('+' OU '-').
LXI 1
LBY &ABUF < RECUPERATION DU NVP PRESUME.
ADRI -'30,A < CONVERSION BINAIRE.
JAL E4 < ERREUR DE SYNTAXE.
CPI '09 < EST UN CHIFFRE DECIMAL ???
JLE CHGIT2 < OUI, OK.
ADRI -"A"+"9"+1,A < NON, CONVERSION HEXADECIMALE.
CPI '09 < EST-CE UN CHIFFRE HEADECIMAL ???
JG CHGIT2 < PEUT-ETRE...
JL E4 < NON, ERREUR !!!
LA NVPVIS < CAS DU CARACTERE '@', ON PREND
< COMME NVP, LE NVP DU DESCRIP-
< TEUR COURANT.
CHGIT2: EQU $
CPI NVPMAX+1 < VALIDATION.
JGE E4 < ERREUR DE NVP.
LR A,X < X=NVP DEMANDE.
LA &ADESC < RECUPERATION DU DESCRIPTEUR
< ASSOCIE A CE NVP.
JAE E4 < NVP INACESSIBLE.
PSR C < SAVE LE C COURANT
RBT 0 < RAZ INVALIDATION A PRIORI.
LR A,C < C=@DESCRIPTEUR ASSOCIE A (X).
STZ NOMIT < SUPPRESSION A PRIORI...
LR B,A < RECUPERATION DE LA FONCTION.
CPI "+" < EST-CE UNE ADJONCTION ???
JNE CHGIT1 < NON, OK SUPPRESSION.
BSR ACOD < OUI, ON VA CODER.
CHGIT1: EQU $
LR C,A < SAVE L'@DESCRIPTEUR QUE L'ON
< VIENT DE MODIFIER.
PLR C < RESTAURE LE C COURANT.
CPR A,C < A-T'ON EN FAIT MODIFIER LE
< DESCRIPTEUR COURANT ???
JE E100 < OUI, ON NE VA PAS METTRE
< IEG A JOUR, EN EFFET, LE
< CODAGE L'A REMIS A 1 !!!
BR AMAJIE < VERS LA MAJ DE L'INDEX IEG.
NLS
<
< DEMANDE DU MOT DE PASSE DYNAMIQUE :
<
PPASS: EQU $
LAD MPASS
SBT 0
STA ABUF < ABUF RELAYE LE MOT DE PASSE.
DC XBUF < XBUF=0.
<
< E N V O I M O T D E P A S S E
< D Y N A M I Q U E :
<
PASS: EQU $
LA ATIME
ADRI 5,A < POUR ACCEDER AUX SECONDES.
WORD '1E15
LR B,A
ANDI 'FF < A=NBRE DE SECONDES.
CPI 50 < A-T'ON LE TEMPS DE L'ENVOYER ???
JG PASS < NON, ON BOUCLE SUR CETTE
< SEQUENCE...
LA ATIME < A=@DE LA DATE/HEURE.
ADRI 4,A < POUR ACCEDER AUX MINUTES.
WORD '1E15
LR B,A
ANDI 'FF < A=NBRE DE MINUTES.
SLRD NBITMO < OK, A=0 ET B=NBRE DE MINUTES.
DV C10
LR B,A < A=CHIFFRE DES UNITES.
HZERO:: VAL "0"
HA:: VAL "A"
HNEUF:: VAL "9"
M0001:: VAL '0001
ORI HZERO < ??!???!?!
EORI HZERO?M0001 < IGNOBLE TRUANDAGE...
MP MAGIC < PERMUTATION DES BITS...
DV C16
LR B,A
CP C10 < CHIFFRE OU LETTRE ???
JL PASS9 < CHIFFRE...
ADRI HA-HNEUF-1,A < LETTRE...
PASS9: EQU $
ADRI HZERO,A < ET CONVERSION ASCI...
STBY MPASS1 < ET MISE DANS LE MOT DE PASSE...
LAI NSPUPD
SBT 0
WORD '1E15
LR B,A
WORD '1E15 < (B)=NUMERO DU RELEASE COURANT.
LAI 0
DV C10
LR B,A
ORI '30 < (A)=CHIFFRE DES UNITES DU NUMERO DE
STBY MPASS2 < RELEASE DE CMS5 MIS DANS LE MOT DE
< PASSE...
JMP EOT < OK, C'EST TOUT.
LST
E4: EQU $
BR AERR < TRAITEMENT DES ERREURS.
<
< TEST DES MESSAGES SANS 'EOT' :
<
COMPT: EQU $
E5: EQU $
ADRI -'30+1,A < OK, CONVERSION BINAIRE+1.
LR A,X < X INDEXE LE 1ER CARACTERE QUI
< SUIT LE DERNIER CARACTERE
< SIGNIFICATIF.
LAI '80+'04 < CODE DE L''EOT' AVEC LE BIT0
< POSITIONNE A 1 AFIN QU'IL NE
< SOIT PAS EMIS PAR SEND.
STBY &ABUF < MISE EN FIN DE MESSAGE.
<
< M E S S A G E S :
<
EOT: EQU $
<
< TEST D'AUTO-ASSIGN :
<
LA NSPVIS < NSP DEMANDE,
CP NSPIN < EST-CE CELUI DE LA VISU
< DE DIALOGUE ???
JNE WAIT < OK, ON PEUT EMETTRE...
LA COMC < NSPVIS=NSPIN : ERREUR, LE
< PROGRAMME NE PEUT FAIRE
< 2 CHOSES EN MEME TEMPS (ATTEN-
< DRE UN MESSAGE, ET SE L'EMET-
< TRE !!!) : ERREUR...
JMP ERR1 < ENVOI COMMANDE COURANTE...
<
< A T T E N T E E V E N T U E L L E
< D ' U N E V I S U E N L E C T U R E :
<
WAIT: EQU $
LAD MNUL
BSR APRINT < ON TEMPORISE, AFIN D'ETRE SUR DE NE
< PAS RETOMBER SUR UNE DEMANDE ANTERIEURE..
LA ADCTVI < A=@DCT VISU.
ADRI TETE,A < A=TETE DE LA FILE D'ATTENTE
< SUR CETTE VISU.
WORD '1E15 < RENVOIE : B=@DEMANDE DE TETE
< SUR CETTE VISU.
LR B,A
JAE E6 < PAS DE DEMANDE EN ATTENTE, ON
< REND LA MAIN PROVISOIREMENT...
< SUR CETTE VISU, ON ATTEND...
LR A,X < SAVE X=@DEMANDE DE SERVICE.
ADRI OPDEM,A < A=@DE LA FONCTION DEMANDEE
< DANS LA DEMANDE DE TETE.
WORD '1E15 < RENVOIE : B=FONCTIOB DEMANDEE.
LR B,A
ANDI '07 < MASCAGE DU BIT 12.
CPI 1 < S'AGIT-IL D'UNE LECTURE???
JLE E7 < OK, IL S'AGIT D'UNE LECTURE.
E6: EQU $
CPZ IENTER < LE MESSAGE QUE L'ON NE PEUT
< EMETTRE A-T'IL ETE RENTRE
< PAR 'I' ???
JE E100 < NON...
LA AMINEF < OUI, IL FAUT SIGNALER
BSR APRINT < QU'IL N'A PAS ETE EMIS,
< ET QU'IL VA FALLOIR LE
< RERENTRER...
E100: EQU $
BR AFSEND < ON REND LA MAIN PROVISOIREMENT
< LORSQU'IL N'Y A RIEN A FAIRE...
E7: EQU $
<
< LA VISU ATTEND UNE LECTURE, LET'S GO...
<
LR B,A < A=FONCTION REELLEMENT DEMANDEE.
CPI '09 < EST-CE 'LECTURE GRAPHIQUE' ???
LBI 5 < OUI A PRIORI : B=5 OCTETS A LIRE.
JE E20 < ET OUI, 'LECTURE GRAPHIQUE'...
LR X,A < A=@DEMANDE DE SERVICE,
ADRI CODEM,A < A=@DE SON CODEM.
WORD '1E15 < RENVOIE : B=COMPTE D'OCTETS
< DE LA DEMANDE COURANTE LECTURE.
E20: EQU $
STB NOCT < ET SAVE IT...
<
< B O U C L E D E S I M U L A T I O N
< D E L ' E N T R E E D ' U N
< M E S S A G E S U R U N E V I S U :
<
LOOP: EQU $
LR C,A
STA CDESC < SAUVEGARDE DE L'ADRESSE
< DU DESCRIPTEUR COURANT.
WIT: EQU $
LA ADCTVI < A=@DCTVISU.
ADRI SIT,A < A=@SIT DE LA VISU.
WORD '1E15 < DEMANDE DANS B DU SIT-VISU.
SWBR B,A < AFIN DE TESTER SON SIGNE.
JAL ITAT < OK, IT ATTENDUE.
WITNXT: EQU $
LAD SCH
SVC 0 < NON, IL FAUT ATTENDRE QUE
< LA TACHE SOIT EN ATTENTE IT.
JMP WIT < VERS UN NOUVEAU TEST.
ITAT: EQU $
RX:: VAL 2 < POUR ATTEINDRE LE REGISTRE X(VIS),
ETANXT:: VAL 14 < NUMERO DU BIT SIGNIFIANT 'IN',
JF:: VAL "JF" < CODE PERMETTANT DE VALIDER 'X'...
LA ADCTVI < A=ADRESSE(DCT(VIS)),
ADRI RX,A < A=ADRESSE(R(VIS)),
WORD '1E15 < B=(X(VISU)),
LRM A
WORD JF)ETANXT < A=VALEUR DE 'X' LORSQUE LA VISU ATTEND
< UNE INTERRUPTION 'IN'...
CPR A,B < ALORS EST-CE 'IN' ???
JNE WITNXT < NON, ON REBOUCLE SUR 'SIT'...
LA ASEND < A=@ROUTINE MAITRE.
WORD '1EC5 < SIMULATION MAITRE DE LA
< RECEPTION D'UN CARACTERE.
CPZ NOCT < A-T'ON ENVOYE SUFFISAMENT
< D'OCTETS AU HANDLER VISU ???
JE LOOP20 < OUI, ON ARRETE LA...
LX XBUF
IC XBUF < PROGRESSION INDEX DU BUFFER.
BSR ATEOT < TEST DE DERNIER CARACTERE...
JNE LOOP < NON, ON CONTINUE...
<
<
< F I N D E L ' E M I S S I O N
< M E S S A G E O U D U
< T R A I T E M E N T C O M M A N D E :
<
LOOP20: EQU $
<
< MISE A JOUR DE L'INDEX COURANT DE L'ITEM VISU :
<
MAJIEG: EQU $
LA IEG
STA VIEG
<
< RETOUR, FIN TEMPORAIRE POUR CETTE VISU :
<
FSENDV: EQU $
RSR
<
< FIN DE LA LISTE DES MESSAGES :
<
LOOPF: EQU $
<
< SUPPRESSION DU DESCRIPTEUR DE CETTE VISU :
<
FINITE: EQU $
LAD NOMVIS
BSR APRINT < EDITION DU NVP EN CAUSE,
LAD MARRET
BSR APRINT < PUIS DU MESSAGE 'FIN'.
LX NVPVIS < X=NVP AUQUEL EST ASSIGNEE
< CETTE VISU.
LA &ADESC
SBT 0 < INVALIDATION DU CONTEXTE.
STA &ADESC
STZ NSPVIS < AFIN DE RENDRE COMPATIBLES
STZ ADCTVI < LES !ASSIGN ET LEUR SIMULA-
< TION : AINSI SI UNE ASSI-
< GNATION NVP --> NSP EST
< SIMULEE, NSPVIS#0, ET AINSI,
< LORS DU PARCOURS DE TASSGN,
< BIEN QUE LE NVP NE SOIT PAS
< REELLEMENT ASSIGNE, SON
< RELAI NE SERA PAS INVALIDE...
BR AMAJIE < VERS LA MISE A JOUR DE
< L'INDEX COURANT DE L'ITEM-VISU.
<
< EMISSION D'UNE ERREUR :
<
ERREUR: EQU $
LAD NOMVIS
BSR APRINT < EDITION NOM DE LA VISU.
LAD MERR
BSR APRINT < EDITION DE '??'.
BR AMAJIE < VERS LA MAJ DE L'INDEX ITEM-VISU.
PAGE
<
<
< C O M M E N T A I R E S :
<
<
COMEN2: EQU $
LA KCAR
ADRI -1,A < SUPPRESSION DU 1ER CARACTERE.
JALE COMEN1 < RIEN A EDITER...
LXI 0
STBY &ABUF < LE 1ER OCTET DU MESSAGE COURANT
< RECOIT SA LONGUEUR.
LAD BUF
BSR APRINT < ENVOI DU MESSAGE COURANT SUR
< NVP='02.
COMEN1: EQU $
BR AMAJIE < IL NE S'AGISSAIT QUE D'UN
< COMMENTAIRE DANS LE TEXTE
< DE L'ITEM.
PAGE
<
<
< E N T R E E D I R E C T E D U
< M E S S A G E C O U R A N T :
<
<
ENTERM: EQU $
IC IENTER < 1 : 'I' EN COURS.
CPZ DUREE < EST-ON EN FAIT DANS UNE
< COMMANDE 'W' INTRODUITE
< SOUS 'I' ???
JNE NENTER < OUI, DONC PAS DE NOUVEAU
< MESSAGE A RENTRER !!!
LXI 1
BSR ATEOT < EOT DERRIERE 'I' ???
JNE RECU19 < NON, ERREUR !!!
LAD NOMVIS
BSR APRINT < EDITION DU NVP COURANT.
LAD MINTER
BSR APRINT < ENVOI INVITATION...
LAD DEMIN
SVC 0 < ENTREE DU MESSAGE COURANT.
ENTER7: EQU $
BR AANALY < VERS SON ANALYSE INSTANTANEE...
<
< SIMULATION D'UNE COMMANDE 'W' :
<
NENTER: EQU $
LXI 0 < A METTRE EN TETE DU BUFFER,
LAI "W" < UNE BELLE COMMANDE 'W'...
STBY &ABUF
JMP ENTER7 < ET ON VA L'ANALYSER...
PAGE
<
<
< T E M P O R I S A T I O N :
<
<
TEMPO: EQU $
LXI 1
LBY &ABUF < CARACTERE SUIVANT 'H'.
BSR AGETCO < DECODAGE BINAIRE.
STA SLEEP+2
LXI 2
BSR ATEOT < EOT DERRIERE ???
JNE RECU19 < NON...
LAD SLEEP
SVC 0 < ATTENTE...
BR AMAJIE < VERS LA MAJ DE IEG...
<
<
< T E M P O R I S A T I O N S U R L E N V P
< C O U R A N T U N I Q U E M E N T :
<
<
WTEMPO: EQU $
CPZ DUREE < Y-A-T'IL UNE COMMANDE 'W'
< EN COURS ???
JE TEMPO1 < NON, INITIALISATION DE 'W'...
<
< CAS D'UNE COMMANDE 'W' EN COURS :
<
WORD '1E85 < A=HEURE COURANTE (/2).
CP HORLOG < A-T'ON CHANGE DE TRANCHE
< DE 2 SECONDES DEPUIS LA
< DERNIERE MISE A L'HEURE ???
JE TEMPO2 < NON, RIEN A FAIRE !!!
STA HORLOG < OUI, MISE A JOUR...
DC DUREE < DECOMPTE DU TEMPS ECOULE.
JNE TEMPO2 < IL EN RESTE ENCORE...
BR AMAJIE < C'EST FINI : DUREE=0.
<
< INITIALISATION D'UNE COMMANDE 'W' :
<
TEMPO1: EQU $
LXI 2
BSR ATEOT < EOT DERRIERE ???
JNE RECU19 < NON, ERREUR...
LXI 1
LBY &ABUF < ACCES A LA DUREE DEMANDEE.
BSR AGETCO < DECODAGE SI OK.
ADRI 1,A < ON INCREMENTE DE 1, CAR ON
< VA DIVISER PAR 2.
SLRS 1 < CAR '1E85 DONNE DES TEMPS
< EXPRIMES EN MULTIPLE DE
< 2 SECONDES.
STA DUREE < DUREE#0.
WORD '1E85 < A=HEURE COURANTE (/2).
STA HORLOG < 1ERE MISE A L'HEURE.
TEMPO2: EQU $
BR AFSEND < ON NE FAIT PAS PROGRESSER
< IEG AFIN DE RESTER SUR 'W'...
PAGE
<
<
< G E S T I O N D E S E V E N E M E N T S :
<
<
< FONCTIONS :
< ON DISPOSE DE 32 EVENEMENTS (1-9, A-W),
< SUR LESQUELS ON PEUT FAIRE DES
< SET, RESET, ET SURTOUT DES TESTS;
< LORS D'UN TEST, SI L'EVENEMENT EST POSITIONNE,
< ON CONTINUE EN SEQUENCE (MAJIEG), SINON,
< ON ATTEND QU'IL LE SOIT (FSENDV).
<
< A T T E N T I O N :
< 1- SI K<16 : LE SET N'EXISTE PAS, ET
< LA FONCTION TEST EST EN FAIT UN TEST &
< SET : SI L'EVENEMENT K EST ARRIVE ON
< SE BLOQUE, SINON, ON LE MARQUE, ET ON
< CONTINUE EN SEQUENCE : PERMET L'EXCLUSION !!!
< 2- SI K>=16 : IL S'AGIT ALORS D'UN TEST
< TOUT COURT : SI L'EVENEMENT N'EST PAS
< ARRIVE, ON L'ATTEND, SINON, ON CONTINUE
< EN SEQUENCE...
<
<
EVENT: EQU $
LR A,Y < Y=FONCTION DEMANDEE (R/S/T).
LXI 2
BSR ATEOT < EOT DERRIERE ???
JNE RECU19 < NON, ERREUR...
LXI 1
LBY &ABUF < ACCES AU NOM D'EVENEMENT.
BSR AGETCO < CONVERSION BINAIRE.
CPI 32 < VALIDATION EVENEMENT ???
JGE RECU17 < N'EXISTE PAS, ERREUR.
CPI 16 < DISCRIMINATION TEST&SET DE TEST.
LR A,X < X=NUMERO DE L'EVENEMENT.
LR Y,A < A=FONCTION ASCI.
JL EVENT3 < K<16 : 'TEST & SET'.
<
<
< S E T / R E S E T / T E S T :
<
<
ADRI -"S",A < A=-1 SI R, 0 SI S, +1 SI T.
CPI 0 < DISCRIMINATION DES FONCTIONS.
LA LEVENT < ACCES A LA LISTE DES
LB LEVENT+1 < EVENEMENTS COURANTS.
JL EVENTR < RESET.
JE EVENTS < SET.
<
< TEST EVENEMENT (X) :
<
EVENTT: EQU $
TBT 0,X
JC EVENT1 < (X) EST ARRIVE : MAJIEG.
BR AFSEND < (X) NON ARRIVE, ON ATTEND.
<
< RESET EVENEMENT (X) :
<
EVENTR: EQU $
RBT 0,X
JMP EVENT2
<
< SET EVENEMENT (X) :
<
EVENTS: EQU $
SBT 0,X
EVENT2: EQU $ < MAJ DE LA LISTE DES EVENEMENTS.
STA LEVENT
STB LEVENT+1
EVENT1: EQU $ < ON CONTINUE EN SEQUENCE.
BR AMAJIE
<
<
< R E S E T / T E S T & S E T :
<
<
EVENT3: EQU $
ADRI -"S",A < A=-1 SI R, 0 SI S, +1 SI T.
JAE RECU19 < S N'EXISTE PAS SI K<16.
CPI 0 < DISCRIMINATION T/R.
LA LEVENT < CHARGEMENT DE LA
LB LEVENT+1 < LISTE DES EVENEMENTS.
JL EVENTR < TRAITEMENT DE RESET.
<
< TEST&SET EVENEMENT (X) :
<
TBT 0,X < (X) EST-IL ARRIVE ???
JNC EVENTS < NON, ALORS IL ARRIVE, ON
< SIMULE UN SET.
BR AFSEND < OUI, ALORS ON SE BLOQUE
< DESSUS.
< (PERMET L'EXCLUSION !!!)
PAGE
<
<
< R E C U P E R A T I O N C O N S T A N T E :
<
<
< ARGUMENT :
< A=CARACTERE ASCI,
<
<
< RESULTAT :
< A=VALEUR 1-9 OU A-Z.
<
<
GETCO: EQU $
ADRI -'30,A < CODAGE BINAIRE...
JALE GETCO1 < ERREUR.
CPI 9 < CHIFFRE DECIMAL ???
JLE RECU18 < OUI, OK.
ADRI -"A"+"9"+1,A < CODAGE BINAIRE SUITE...
CPI 9
JL GETCO1 < ERREUR.
JG RECU18 < OK.
<
< CAS DE LA CONSTANTE '@' : ON RECUPERE CCONST :
<
PSR W
LAD CONST0
AD CCONST
LR A,W < W=@CCONST.
LA 0,W < A=CONSTANTE COURANTE.
PLR W
JALE GETCO1 < ERREUR : REFUS CONSTANTE <=0 !!!
RECU18: EQU $
RSR
GETCO1: EQU $
ADRI -1,K < ANNULATION BSR.
JMP RECU19 < VERS MESSAGE ERREUR...
PAGE
<
<
< D E B U T D E R E C U R S I V I T E :
<
<
RECU19: EQU $
LXI 0 < INDEX CARACTERE 0.
RECU17: EQU $
LBY &ABUF < ACCES CARACTERE (X).
BR AERR1 < VERS L'EMISSION ERREUR...
<
< POINT D'ENTREE :
<
RECUR: EQU $
CPZ IENTER < EST-ON SOUS 'I' ???
JNE RECU19 < OUI, '(' REFUSE !!!
LXI 1
LBY &ABUF < ACCES CARACTERE SUIVANT %.
BSR AGETCO < DECODAGE BINAIRE DE (A).
LR A,Y < Y=NBRE DE REPETITIONS (1 A Z).
LXI 2
LBY &ABUF < ACCES AU CARACTERE SUIVANT...
CPI "("
JNE RECU17 < ERREUR, CE N'EST PAS ( !!!!
LXI 3
BSR ATEOT < EOT DERRIERE ???
JNE RECU19 < NON, ERREUR...
LBI CODREP < B=CODREP, ET Y=NBRE REPETITIONS.
<
<
< P U S H R E C U R S I V I T E :
<
<
< ARGUMENTS :
< B#0=CAUSE DU PUSH : EMPILEMENT REEL DANS PIR ;
< ='40 : PUSH POUR REPEAT ,
< ='20 : PUSH POUR APPEL PROGRAMME ,
< ='10 : PUSH POUR SAUT DEFINITION PROGRAMME ,
< ='20+'10 : PUSH POUR APPEL PROGRAMME , AVEC
< CHANGEMENT D'ITEM COURANT.
< Y=NBRE DE REPETITIONS A FAIRE SOUS CE NIVEAU (SI
< B#0).
<
<
PRIMPS: EQU $
<
< CAS DES PUSH VERITABLES :
<
LA APRC < ACCES AU RELAI COURANT DE PIR.
RBT 0 < RAZ DU BIT INDEX.
LXI CDCP < RETOUR EN ERREUR A PRIORI.
CP TPR < EST-ON AU SOMMET DE PIR ???
JGE RECU19 < STACK OVERFLOW....
LA APRC
ADRI LEPR,A < NON CALCUL @ENTREE SUIVANTE.
STA APRC < MAJ DU RELAI COURANT DE PIR.
<
< INITIALISATION DE LA NOUVELLE ENTREE DE PIR :
<
SWBR Y,A < Y=COMPTE DE REPETITIONS.
ORI 1 < CP=1 : COMPTE PARENTHESES.
STA &APRC < RANGEMENT DE CD ET CP.
LXI IR < RETOUR OK.
SWBR B,A < OCTET0(A)=CAUSE DU PUSH.
AD IEG < ET CONCATENATION INDEX COURANT.
ADRI -1,A
TBT BITREP < EST-CE UN PUSH POUR REPEAT ???
SBCR A < SI OUI , RETOUR SUR '('.
STA &APRC
BR AMAJIE < VERS LA MAJ DE VIEG...
<
<
< D E B U T D E R E C U R S I V I T E :
<
<
BREC: EQU $
LXI CP
LBY &APRC
ADRI 1,A < COMPTAGE DES PARENTHESES.
STBY &APRC
LXI 1
LBY &ABUF
CPI '04
JNE RECU19 < ERREUR DE SYNTAXE...
BR AMAJIE < OK...
<
<
< F I N D E R E C U R S I V I T E :
<
<
ENDR: EQU $
CPZ IENTER < EST-ON SOUS 'I' ???
JNE RECU19 < OUI, ')' REFUSE !!!
LXI 1
BSR ATEOT < EOT DERRIERE ')' ???
JNE RECU19 < NON, ERREUR...
<
<
< P U L L R E C U R S I V I T E :
<
<
< ARGUMENT :
< B#0 : PULL VERITABLE ,
< =0 : DECOMPTER UNIQUEMENT LES ')'.
<
<
PRIMPL: EQU $
<
< DECOMPTE DES PARENTHESES :
<
LXI CP
LBY &APRC < A=CP COURANT SOUS CE NIVEAU.
JAE RECU19 < TROP DE ')' !!!
ADRI -1,A
STBY &APRC < MAJ DU CP COURANT.
JANE RECU20 < JUSTE DECOMPTAGE DES ')'...
LXI CD
LBY &APRC < A=CD COURANT.
JAE RECU20 < CAS DE LA 1ERE ENTREE DANS PIR,
< IL NE FAUT PAS DEPILER ...
ADRI -1,A < DECOMPTE DES REPETITIONS.
JAG E14 < IL RESTE AU MOINS UNE REPETITION.
JAL RECU19 < ERREUR DE SYNTAXE...
<
< CAS CD=0 : PULL VERITABLE :
<
LA APRC
RBT 0 < ACCES A L'@ENTREE COURANTE.
CP BPR < EST-ON AU BAS DE LA PILE ???
JLE RECU19 < OUI, ERREUR...
E90: EQU $
LA APRC
ADRI -LEPR,A < NON , RETOUR SUR L'ENTREE
< PRECEDENTE.
STA APRC < ET MAJ DU RELAI COURANT.
<
< SORTIE OK...
<
RECU20: EQU $
BR AMAJIE
<
< ACS OU CD#0 : 2L RESTE AU MOINS UNE REPETITION :
<
E14: EQU $
STBY &APRC < MAJ DU CD COURANT.
LXI IR
LA &APRC
LR A,B < B=ENTREE IR DE PIR.
TBT BITPRO < EST-CE UN RETOUR PROGRAMME ???
AND CFFF < RAZ DES BITS 0,1,2,3.
STA IEG < A=INDEX DE DEBUT DE REPETITION.
JMP RECU20 < VERS LA SORTIE OK...
PAGE
<
<
< G E S T I O N D E S C O N S T A N T E S @ :
<
<
< FONCTION :
< @K; CCONST <-- K,
< @K=XXX; INITIALISATION DE LA CONSTANTE
< K, ET CCONST <-- K,
< @K+XXX, INCREMENTATION DE LA CONSTANTE
< K, ET CCONST <-- K,
< @K-XXX, DECREMENTATION DE LA CONSATNTE
< K, ET CCONST <-- K.
< XXX EST SOIT UNE CONSTANTE HEXADECIMALE,
< SOIT @L (CONST L),
< SOIT @LN (CONST L DU NVP=N, N POUVANT
< ETRE ECRIT @, CE QUI SIGNIFIE ALORS :
< PRENDRE LE NVP COURANT),
<
<
< IMPORTANT :
< CONSTANTES GLOBALES : K VA DE 0 A NCONSG-1,
< (ELLES SONT COMMUNES A
< TOUS LES NVP),
< CONSTANTES LOCALES : K VA DE NCONSG A NCONST-1.
<
<
GCONST: EQU $
LXI 1
LBY &ABUF < ACCES CARACTERE SUIVANT.
ADRI -'30,A < DECODAGE BINAIRE.
JAL RECU19 < ERREUR DE SYNATXE...
CPI 9 < CHIFFRE DECIMAL ???
JLE GCONS8 < OUI.
ADRI -"A"+"9"+1,A < DECODAGE (SUITE).
CPI 9
JL RECU19 < ERREUR DE SYNATXE...
GCONS8: EQU $
CPI NCONST-1 < VALIDATION...
JG RECU19 < ERREUR DE SYNTAXE...
STA CCONST < OK, SAVE LE NOUVEAU CCONST.
PSR W
LR A,W
LAD CONST0
ADR A,W < W=@CONSTANTE COURANTE.
<
< TEST PRELIMINAIRE DE L'OPERATEUR :
<
LXI 2
BSR ATEOT < INITIALISATION CCONST ???
JE GCONS7 < C'ESTFINI, JUSTE MAJ DE CCONS.
<
< DETECTION DE LA CONSTANTE :
<
LXI 3
LBY &ABUF
CPI "@" < EST-CE LE TYPE @K @L ???
JE GCONS9 < OUI....
LBI 0 < INITIALISATION DE B.
GCONS1: EQU $
BSR ATEOT < FIN DE MESSAGE ???
JE GCONS4 < OUI, FIN DU DECODAGE.
ADRI -'30,A < DECODAGE BINAIRE.
JAL GCONS2 < ERREUR DE SYNTAXE...
CPI 9 < CHIFFRE DECIMAL ???
JLE GCONS3 < OUI...
ADRI -"A"+"9"+1,A < DECODAGE (SUITE).
CPI 'A < VALIDATION CHIFFRE A-F ???
JL GCONS2 < ERREUR DE SYNATXE.
CPI 'F < VALIDATION CHIFFRE A-F ???
JG GCONS2 < ERREUR DE SYNTAXE...
GCONS3: EQU $
SCRS 4
SCLD 4 < CONCATENATION A B...
ADRI 1,X < PROGRESSION INDEX BUFFER.
JMP GCONS1 < AU SUIVANT...
<
< TRAITEMENT DE L'OPERATEUR :
<
GCONS4: EQU $
LXI 2
LBY &ABUF
LY 0,W < Y=CONSTANTE DEMANDEE.
CPI "+"
JE GCONS5 < INCREMENTATION.
CPI "-"
JNE GCONS6
NGR B,B < DECREMENTATION.
JMP GCONS5 < VERS L'INCREMENTATION.
GCONS6: EQU $
CPI "="
JNE GCONS2 < ERREUR DE SYNTAXE...
LYI 0 < INITIALISATION CONSTANTE.
GCONS5: EQU $
ADR B,Y
GCONSB: EQU $
LA CCONST < A=NOM DE LA CONSTANTE DEMANDEE.
CPI NCONSG < EST-ELLE LOCALE ???
JGE GCONSE < OUI.
<
< STORE UNE CONSTANTE GLOBALE :
<
LB CCONST < SAVE B=NOM DE LA CONSTANTE
< DEMANDEE.
PSR C < SAVE LE CONTEXTE COURANT.
LXI NVPMAX+1 < X=1ER NVP INEXISTANT.
GCONSF: EQU $
LA &ADESC < ACCES AU DESCRIPTEUR DU
< NVP=(X)-1.
JALE GCONSG < NON ASSIGNE (<0) OU NON
< NON ASSIGNABLE (=0).
LR A,C
LAD CONST0
ADR B,A < RECUPERATION NOM CONSTANTE.
LR A,W < W=@ DE LA CONSTANTE DANS
< LE CONTEXTE (C).
STY 0,W < STORE LA CONSTANTE GLOBALE
< CCONST.
GCONSG: EQU $
JDX GCONSF < AU CONTEXTE PRECEDENT...
PLR C < RESTAURE LE CONTEXTE COURANT.
JMP GCONS7 < ET C'EST TOUT...
<
< STORE UNE CONSTANTE LOCALE :
<
GCONSE: EQU $
STY 0,W < MAJ DE LA CONSTANTE DEMANDEE.
GCONS7: EQU $
PLR W
BR AMAJIE < ET C'EST TOUT...
<
< RETOURS EN ERREUR :
<
GCONS2: EQU $
PLR W
GCONSH: EQU $
LXI 0
LBY &ABUF
BR AERR1 < VERS LE MESSAGE D'ERREUR...
<
< INITIALISATION CONSTANTE-CONSTANTE :
<
GCONS9: EQU $
LXI 5
BSR ATEOT < INITIALISATION LOCALE ???
LBI 0 < B=0 : ACCES CONSTANTE LOCALE
< A PRIORI.
JE GCONSC < CAS DE L'EOT : MODE LOCAL.
ADRI -'30,A < EST-CE LE MODE GLOBAL ???
JAL GCONS2 < ERREUR...
CPI '09
JLE GCONSD < OK, NVP<=9.
ADRI -"A"+"9"+1,A
CPI '09
JG GCONSD < OK, NVP>9.
JL GCONS2 < ERREUR...
LA NVPVIS < CAS DE @ : ON PREND LE NVP COURANT...
GCONSD: EQU $
CPI NVPMAX+1 < VALIDATION DU NVP DEMANDE...
JGE GCONS2 < ERREUR, N'EXISTE PAS...
LR A,X < X=NVP DEMANDE.
CPZ &ADESC < EST-IL ASSIGNE ???
JLE GCONS2 < NON, ERREUR !!!
SB NVPVIS
MP ALLVIS < B=DISTANCE SEPARANT LES CONSTANTES
< DU NVP COURANT DE CELLES DU NVP
< DEMANDE (EN MOTS).
LXI 6
BSR ATEOT < EOT DERRIERE ???
JNE GCONS2 < NON, ERREUR...
GCONSC: EQU $
LXI 4
LBY &ABUF < ACCES A LA 2EME CONSTANTE.
ADRI -'30,A < DECODAGE BINAIRE.
JAL GCONS2 < ERREUR.
CPI 9 < EST-CE DE 0 A 9 ???
JLE GCONSA < OUI.
ADRI -"A"+"9"+1,A < NON, SUITE DECODAGE.
CPI 9
JL GCONS2 < ERREUR DE SYNTAXE.
GCONSA: EQU $
CPI NCONST-1 < VALIDATION DU NOM ???
JG GCONS2 < ERREUR, N'EXISTE PAS...
PSR W < SAVE C@CONSTANTE RESULTAT.
LR A,W
LAD CONST0
ADR B,W < PRISE EN COMPTE DES MODES
< LOCAUX (B=0), ET GLOBAUX (B#0).
ADR A,W < W=@CONSTANTE ARGUMENT.
LB 0,W < B=VALEUR DE @L.
PLR W < RESTAURE L'@CONSTANTE.
JMP GCONS4 < VERS L'ACCES A L'OPERATEUR...
PAGE
<
<
< S I M U L A T I O N M A I T R E 1 C A R A C T E R E :
<
<
< FONCTION :
< CETTE ROUTINE MAITRE EMET UN CARACTERE
< DU MESSAGE COURANT A DESTINATION
< DU HANDLER DE LA VISU ASSIGNEE
< A '0B SI LE CODE ASCI DE CELUI-CI EST
< IBFERIEUR A '80; EN PARTICULIER
< LA FIN DE MESSAGE EST L'EOT ('04) : SI CELUI-CI
< N'EST PAS A EMETTRE, ON LUI DONNE
< LE CODE '80+'04...
<
<
WORD LOC+'80 < VALEUR RELATIVE DE L.
SEND: EQU $
LRP L
LA -1,L < A=@RELATIVE LOCAL.
AD 10,W < W=@DCTESC, ET 10,W=SLOESC.
LR A,L < L=@ABSOLUE LOCAL.
LA ABUF < ACCES A ABUF.
AD 10,W < ABSOLUTISATION DE ABUF.
STA ABUFA
LA CDESC < A=@RELATIVE DESCRIPT. COURANT.
AD 10,W < ABSOLUTISATION PAR SLOESC.
LR A,C < C=@ABSOLU DESCRIPTEUR COURANT.
LA ADCTVI
LR A,W < W=@DCTVISU.
<
< VALIDATIONS DE L'APPEL :
<
LA SIT,W
SWBR A,A
JAGE $ < ON N'EST PAS EN ATTENTE D'IT !!!
LRM A
WORD JF)ETANXT
CP RX,W
JNE $ < ON N'EST PAS EN ATTENTE D'UNE ENTREE !!!
<
< SIMULATION DE LA RECEPTION D'UN CARACTERE :
<
LX XBUF < X=INDEX COURANT DU BUFFER CARTE.
LBY &ABUFA < A=CARACTERE COURANT.
CPI '80 < CODE A EMETTRE ???
JGE SEND1 < NON...
SBT 0 < AFIN D'AVOIR A<0.
STA ETAT,W < QUE L'ON MET DANS L'ETAT DE
< LA VISU ASSIGNEE A '0B.
DC NOCT < ET UN OCTET DE MOINS...
IF ORDI-"T",XWOR%,,XWOR%
RLSE SIT,W < ET ON SIMULE UNE PSEUDO-IT VIS.
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
LAD SIT,W < A=ADRESSE DU 'SIT' D'INTERRUPTION, ET
SVC SVCM1 < SIMULATION D'UNE PSEUDO-INTERRUPTION
< SUR LA VISU...
XWOR%: VAL 0
SEND1: EQU $
RSR < ET C'EST TOUT...
PAGE
<
<
< S I M U L A T I O N ! A S S I G N :
<
<
ASSGN: EQU $
LXI 1
BSR ATEOT < EOT DERRIERE ???
JNE GCONSH < NON, ERREUR...
BSR AASIGN < ENTREE DES ASSIGNATIONS
< NVP --> NSP VISU.
BR AMAJIE < ET C'EST TOUT.
<
<
< E N T R E E D E S N V P --> N S P :
<
<
ASSIGN: EQU $
PSR X,C
LAD BUF
SBT 0
STA ABUF < POUR LA 1ERE FOIS !?!?!??!
LXI 0 < X=1ER NVP A TESTER.
EXPL1: EQU $
LA &ADESC < DESCRIPTEUR DU NVP COURANT (X).
JAE EXPL4 < NON ASSIGNABLE (=0).
<
< CAS D'UN NVP ASSIGNABLE :
<
PSR X
LR A,B < SAVE L'@ DESCRIPTEUR, AINSI
< QUE L'ETAT VALIDE (BIT0).
RBT 0
LR A,C < C=@DESCRIPTEUR DU NVP=(X).
EXPL5: EQU $
LAD NOMVIS
BSR APRINT < ENVOI DU NVP.
LA AMVIS
BSR APRINT < ENVOI INVITATION.
CPZR B < LE NVP EST-IL DEJA ASSIGNE ???
JG EXPL6 < DEJA ASSIGNE (>0).
<
< CAS D'UN NVP NON ASSIGNE :
<
LAD DEM1C
SVC 0 < ENTREE NUMERO VISU.
LXI 0 < INDEX CARACTERE ENTRE.
<
< REPONSES RECONNUES :
< EOT,R/C NE PAS TOUCHER A CE NVP,
< NUMERO DE 1 A.. ASSIGNER CE NVP A LA VISU
< DONT LE NUMERO EST DONNE.
<
BSR ATEOT < NVP A NE PAS INITIALISER ???
JE EXPL2 < R/C IDEM A 'EOT'...
ADRI -'30+NSPVI1-1,A < DECODAGE BINAIRE.
CPI NSPVI1 < VALIDATION...
JL EXPL3 < ERREUR...
CPI NSPVIN < VALIDATION...
JG EXPL3 < ERREUR...
STA NSPVIS < OK, SAVE LE NSP DE CETTE VISU.
SBT 0 < BIT0=1 : ACCES @DCT PAR NSP,
WORD '1E15 < B=@DCT VISU.
STB ADCTVI < SAVE L'@DCT DE CETTE VISU.
LR C,A < A=@DESCRIPTEUR, AVEC BIT0=0.
PLR X < RESTAURE X=NVP-1.
STA &ADESC < AUTORISATION DE CE NVP.
STZ MODE
IC MODE < MODE=1 : NVP=....
STZ NOMIT < AFIN DE FORCER UNE REDEMANDE
< DU NOM D'ITEM ASSOCIE; CECI
< EST TRES UTILE A LA SUITE
< DES ALT-MODES; EN DECONNECTANT
< UN NVP DE SON NSP, ET EN LE
< RECONNECTANT TOUT DE SUITE,
< ON REINITIALISERA TOUT LE
< CONTEXTE DE CE NVP...
EXPL4: EQU $
ADRI 1,X < NVP SUIVANT...
LR X,A
CPI NVPMAX+1 < EXISTE-T'IL ???
JL EXPL1 < OUI...
PLR X,C
RSR < ET C'EST TOUT...
<
< CAS DES NVP INTOUCHES :
<
EXPL2: EQU $
PLR X < RESTAURE LE NVP,
JMP EXPL4 < ET AU PRECEDENT...
<
< CAS DES FAUTES DE SYNTAXE :
<
EXPL3: EQU $
LAD MERR
BSR APRINT
JMP EXPL5 < ET NOUVEL ESSAI !!!
<
< CAS D'UN NVP DEJA ASSIGNE :
<
EXPL6: EQU $
LA NSPVIS < A=NSP DE LA VISU REELLE.
ADRI '30-NSPVI1+1,A < CONVERSION EN UN NUMERO.
SBT 7 < OCTET0(A)=LONGUEUR DU
< MESSAGE=1.
STA BUF
LAD BUF
BSR APRINT < EDITION DE LA VISU ASSOCIEE
< AU NVP COURANT.
CPZ MODE < !ASSIGN OU SIMULATION ???
JNE EXPL7 < OK, SIMULATION...
LA AMMODE < ET NON, !ASSIGN,
BSR APRINT
JMP EXPL2 < ON NE PEUT FAIRE '-' !!!
EXPL7: EQU $
LAD MINTER
BSR APRINT < ENVOI D'UNE INVITATION.
LAD DEM1C
SVC 0 < ENTREE DE LA REPONSE.
LXI 0 < INDEX CARACTERE ENTRE.
<
< REPONSES RECONNUES :
< EOT,R/C NE PAS TOUCHER A CETTE ASSIGNATION,
< - FAIRE LA DESASSIGNATION.
<
BSR ATEOT < ???
JE EXPL2 < RIEN A FAIRE...
CPI "-"
JNE EXPL7 < ERREUR, ON REDEMANDE !!!
<
< DESASSIGNATION :
<
SBT 0+NBITMO < BIT0(B)=1.
PLR X < RESTAURE LE NVP+1.
STB &ADESC < INVALIDATION DU CONTEXTE.
STZ NSPVIS < AFIN DE PERMETTRE L'EXPLORA-
STZ ADCTVI < TION DE TASSGNE RELATIVE A CE NVP.
JMP EXPL1 < ON VA RETRAITER CE NVP; AINSU
< ON PEUT TOUT DE SUITE LE REAS-
< SIGNER !!!
PAGE
<
<
< P A R C O U R S D E T A S S G N :
<
<
EXTAS: EQU $
LA BEXTAS
WORD '1EC5 < EXECUTION MAITRE DE 'MEXTAS'.
RSR
<
< ROUTINE MAITRE DE PARCOURS DE TASSGN :
<
WORD LOC+'80 < @RELATIVE DU LOCAL.
MEXTAS: EQU $
LRP L
LA -1,L < A=@RELATIVE LOCAL.
AD 10,W < ABSOLUTISATION PAR SLOESC.
LR A,L < L=@ABSOLUE LOCAL.
LA ADESC < A=RELAI RELATIF DESCRIPTEURS.
AD 10,W < ABSOLUTISATION PAR SLOESC.
STA MDESC < RELAI ABSOLU DES DESCRIPTEURS.
LYI NVPMAX+1 < Y=1ER NVP INEXISTANT.
LXI 0 < X=1ER NVP A TESTER.
<
< BOUCLE DE RECUPERATION DES NVP :
<
MEXT1: EQU $
LA &MDESC < A=@DESCRIPTEUR ASSOCIE
< AU NVP=(X).
JAE MEXT2 < CAS DES NVP A NE PAS TESTER.
JAL MEXT5 < NVP NON ASSIGNE...
PSR A,C
AD 10,W < ABSOLUTISATION DE L'@DESCRIPTEUR.
LR A,C < C=@ABSOLUE DESCRIPTEUR.
CPZ NSPVIS < LE NVP COURANT N'AURAIT-IL
< PAS ETE L'OBJET D'UNE
< SIMULATION D'ASSIGNATION ???
PLR A,C
JNE MEXT2 < OUI, NSPVIS#0, DONC ON
< NE RETESTE PAS CE NVP !!!
MEXT5: EQU $
SBT 0 < INVALIDATION A PRIORI.
STA &MDESC
RBT 0 < A=@RELATIVE DU DESCRIPTEUR.
AD 10,W < ABSOLUTISATION PAR SLOESC.
LR A,B < B=@ABSOLUE DESCIPTEUR.
LBY &TASSGN,W < A=NSP ASSIGNE AU NVP=(X).
MEXT4: EQU $
JAE MEXT2 < INTERESSANT.
CPI 2 < TEST DES !ASSIGN NVP=I/O ???
JG MEXT3 < NON.
PSR X < OUI, SAVE LE NVP COURANT.
LR A,X < POUR ACCES AUX NVP=1/2.
LBY &TASSGN,W < ACCES AU NSP ASSIGNE AU
< NVP=1/2.
PLR X < RESTAURE LE NVP COURANT.
JMP MEXT4 < ET ON RECOMMENCE.
MEXT3: EQU $
CPI NSPVI1
JL MEXT2 < ININTERESSANT.
CPI NSPVIN
JG MEXT2 < ININTERESSANT.
PSR X,L
LR A,X < X=NSP ASSIGNE AU NVP.
BSR ACADCT,C < RENVOIE : A=L=@DCT(X=NSP).
XR B,C < C=@DESCRIPTEUR, B=@COMMON CMS4.
STA ADCTVI < SAVE L'@DCT VISU,
STX NSPVIS < SAVE LE NSP DE CETTE VISU.
STZ MODE < MODE=0 : !ASSIGN...
XR B,C < C=@COMMON CMS4, B=@DESCRIPTEUR.
PLR X,L
LR B,A < A=@ABSOLUE DU DESCRIPTEUR.
SB 10,W < RELATIVISATION DE (A).
STA &MDESC < AUTORISATION DU DESCRIPTEUR.
MEXT2: EQU $
ADRI 1,X < AU NVP SUIVANT.
CPR X,Y < EXISTE-T'IL ???
JNE MEXT1 < OK, ALLONS-Y...
RSR < ET NON, ON S'EN VA...
PAGE
PROG P2
DST P1
<
<
< C O D A G E < N O M > E N < N O M C > :
<
<
< FONCTION :
< CETTE ROUTINE CODE SUR 6 CARACTERES
< <NOMC> LES 'N' CARACTERES <NOM>
< D'UN NOEUD.
< CECI EST FAIT SUIVANT UN SUPERBE
< ALGORITHME DE COMPACTAGE PAS MAL
< UNIVOQUE ...
<
<
< ARGUMENT :
< C=@DESCRIPTEUR ASSOCIE AU NVP COURANT.
<
<
< RESULTAT :
< X=0 (OK).
<
<
CODAGE: EQU $
STZ VIEG
IC VIEG < A CHAQUE (RE-)DEFINITION
< D'ITEM, ON (RE-)INITIALISE
< VIEG SUR LE 2EME CARACTERE
< DE L'ITEM, AFIN DE SAUTER
< LA DEFINITION DU CARACTER
< DE FIN DE MESSAGE ASSOCIE A
< CET ITEM.
<
< INITIALISATION DES CONSTANTES :
<
LAD CONST0-1
SBT 0
STA AWORK < RELAI D'ACCES A LA LISTE
< DES CONSTANTES.
LXI NCONST < X=INDEX D'ACCES.
RZCONS: EQU $
STZ &AWORK < RAZ DES CONSTANTES.
ADRI -1,X
LR X,A
CPI NCONSG < EST-ON ARRIVE AUX CONSTANTES
< GLOBALES ???
JG RZCONS < NON, ON CONTINUE...
STZ CCONST < CCONST <-- 0.
<
< INITIALISATION PILE DE RECURSIVITE :
<
LAD PIR
STA BPR < BASE DE PIR,
SBT 0
STA APRC < RELAI COURANT PIR,
LAD PIR+XPR
STA TPR < TOP DE PIR.
LXI XPR
RZPIR: EQU $
ADRI -1,X < ENTREE PRECEDENTE.
STZ &APRC < RAZ PILE DE RECURSIVITE.
CPZR X
JG RZPIR < AU MOT PRECEDENT...
<
< SUPPRESSION DE L'ITEM RESIDENT :
< AINSI, ON PEUT MODIFIER UN ITEM
< AU COURS D'UNE SESSION DE 'MASK',
< ET PRENDRE EN COMPTE SA NOUVELLE
< VERSION APRES UN !GO...
<
STZ &ANIT0 < POUR FORCER UN RECHARGEMENT...
<
< INITIALISATION DU CODEUR :
<
LAD NOMIT < A=@NOMIT COURANT.
SBT 0 < BIT D'INDEX.
STA ANOMC < GENERATION D'UN RELAI TEMPORAIRE
< VERS LE NOM CODE COURANT.
STZ F3 < RAZ DE LA FONCTION F3.
LYI 3 < 2*3 CARACTERES A METTRE A BLANC.
LXI 0 < INDEX DE MISE A BLANC.
LAI '20
SBT 2 < A='SPACE''SPACE'.
ETI1: EQU $
STA &ANOMC < MISE DE <NOMC> A 'SPACE'.
ADRI 1,X < INDEX DE RAZ.
CPR X,Y
JNE ETI1 < NEXT...
LYI -1 < Y=LONGUEUR COURANTE.
< =F1=LONGUEUR DU MOT ENTRE.
LBI 0 < B=F2.
<
< UTILISATION DES REGISTRES :
<
< B=F2=EOR(K(I)) : EOR SUR TOUS LES
< CARACTERES DE K(4) A K(L).
< F2=EOR(K(4),K(5),...,K(L)) ,
< Y=LONGUEUR COURANTE DU NOM ,
< =F1=LONGUEUR COURANTE DU MOT ENTRE (NBRE DE
< CARACTERES NON COMPRIS 'EOT') ,
< F3=CF. F2 , MAIS A CHAQUE EOR , LE
< RESULTAT INTERMEDIAIRE EST DECALE
< CIRCULAIREMENT.
<
<
< RECUPERATION DES 3 PREMIERS CARACTERES :
<
BSR AGTCAR < A=K(1).
JE ETI2 < MOT VIDE, C'EST FINI.
STBY &ANOMC < STORE : C(1)=K(1).
BSR AGTCAR < A=K(2).
JE ETI2 < LE MOT N'A QU'UNE LETTRE.
STBY &ANOMC < C(2)=K(2).
BSR AGTCAR < A=K(3).
JE ETI2 < LE MOT N'A QUE 2 LETTRES.
STBY &ANOMC < C(3)=K(3).
<
< CODAGE DES CARACTERES K(4),...,K(L) :
<
ETI3: EQU $
BSR AGTCAR < A=K(I) , I=4,...,L.
< (L DESIGNANT LA LONGUER DU
< MOT A CODER).
JE ETI4 < ARRET DU CODAGE SUR 'EOT'.
ADR Y,A < LE CARACTERE COURANT (A) EST
< PONDERE PAR SA POSITION (X).
< DANS LE MOT.
< K(I)=K(I)+I.
EORR A,B < CALCUL DE F2 :
< F2=EOR(F2,K(I)).
ADR A,B < F2=F2+K(I).
EOR F3 < CALCUL DE F3 :
< A=EOR(F3,K(I)).
SCLS 1 < DECALAGE CIRCULAIRE.
STA F3 < F3=SCLS(EOR(F3,K(I)),1).
JMP ETI3 < CODAGE DU CARACTERE SUIVANT.
<
< MISE SOUS FORME ASCI DES FONCTIONS F2 & F3 :
<
ETI4: EQU $
LBY F3 < A=OCTET0(F3).
AD F3 < A=F3+OCTET0(F3).
ANDI '7F < A=OCTET0(F3)+OCTET1(F3).
< (SUR 7 BITS).
CPI "Z"
JLE ETI5
ADRI -'30,A < F3 EST MIS SOUS LA FORME D'UN
< CODE INFERIEUR AU 'Z'.
ETI5: EQU $
CPI " "
JG ETI6
ADRI '30,A < F3 EST DONC ENTRE LE 'Z'
< (COMPRIS) ET LE 'SPACE' (NON
< COMPRIS).
ETI6: EQU $
< ON A ICI :
< A=F3=CARACTERE ASCI DE '!' (='21) A 'Z' (='5A) ;
< L'AMBIGUITE EST DONC POUR F3 DE '5A-'21.
XR A,B < B=F3 , A=F2 A METTRE EN FORME.
ANDI '7F < MISE SUR 7 BITS.
CPI "Z"
JLE ETI7
ADRI -'30,A < ON RAMENE F2 A UN CODE INFERIEUR
< A CELUI DU 'Z'.
ETI7: EQU $
CPI "0"
JGE ETI8
ADRI '20,A < ON TENTE DE RAMENER F2 APRES
< LE CODE DU '0' (ZERO).
JMP ETI7 < POURSUIVONS LA TENTATIVE...
ETI8: EQU $
< ON A ICI :
< A=F2=CARACTERE ASCI ALLANT DU '0' (COMPRIS)
< AU 'Z' (COMPRIS) ; L'AMBIGUITE DE F2 EST DONC
< DE '30-'5A :
< AMBIGUITE(F2)<AMBIGUITE(F3).
SWBR A,A
ORR B,A < A=F2.F3.
STA NOMIT+2 < STORE : C(5)=F2, C(6)=F3.
<
< CODAGE DE LA LONGUEUR DU MOT :
<
ETI2: EQU $
< ON A ICI :
< Y=LONGUEUR DU MOT ENTRE (NON COMPRIS 'EOT').
LR Y,A
ADRI '30,A < ON MET LA LONGUEUR SOUS FORME
< D'UN CARACTERE ASCI QUI NOUS
< DONNE F1 DONT L'AMBIGUITE EST
< DE '30-.... , MAIS INFERIEUR A
< CELLE DE F2 , ET DONC A CELLE
< DE F3 A FORTIORI.
LXI 3 < INDEX DE C(4).
STBY &ANOMC < STORE : C(4)=F1.
LXI 6 < INDEX DE C(7).
LAI '04 < 'EON' DE FIN DE NOM CODE.
STBY &ANOMC < STORE : C(7)='EON'.
LXI 0 < RETOUR OK.
RSR
PAGE
<
<
< A C C E S A U N C A R A C T E R E :
<
<
< FONCTION :
< CETTE ROUTINE FAIT PROGRESSER L'INDEX
< CARACTERE COURANT (X) , LA LONGUEUR COURANTE
< DU MOT (X) ET ACCEDE LE CARACTERE COURANT ,
< APRES INCREMENTATION DE X ; ENFIN
< ELLE DIT SI LE CARACTERE ACCEDE EST
< OU N'EST PAS 'EOT'.
<
<
< NOTA :
< UNE REPONSE EQUIVALENTE EST DONNEE
< DANS LE CAS OU LA LONGUEUR COURANTE
< ATTEINTE EST LA LONGUEUR MAX QUE
< PEUT ATTEINDRE UN <NOM>.
<
<
GTCAR: EQU $
ADRI 1,Y < PROGRESSION LONGUEUR SUIVANTE.
LR Y,X
ADRI 2,X < X=INDEX CARACTERE DANS 'BUF'.
BSR ATEOT < ACCES CARACTERE COURANT, ET
< TEST DE FIN DE MESSAGE...
LR Y,X < POUR LE STOCKAGE DES 3
< PREMIERS CARACTERES.
RSR
PAGE
<
<
< G E N E R A T I O N D U M O D U L E :
<
<
FTASK: EQU $ < 1ER MOT APRES LE MODULE.
LGIT: VAL FTASK-ZERO*2
SIZE: EQU ZERO+LGIT < LONGUEUR OCTET DU MODULE EXPRI-
< ME A L'AIDE D'UN SYBOLE TRANSLA-
< TABLE POUR REFERENCE EN AVANT.
LOCAL
LOC2: EQU $
DEMCCI: WORD '0001 < APPEL DU CCI.
LONGR: VAL FTASK-NTASK < NBRE DE MOTS DU MODULE.
DEMGEN: WORD '8402 < DEMANDE DE STORE AU SGN.
WORD NTASK-ZERO*2
WORD LONGR*2
WORD 6
PILE1: DZS 10
PROG
WORD LOC2+'80
GENERE: EQU $
LRP L
LA -1,L
LR A,L
LAD PILE1-1
LR A,K
GEN1: EQU $
LAD DEMGEN
SVC 0 < TENTATIVE DE STORE 'TASK'.
JE GEN2 < OK, FIN.
LAD DEMCCI < STORE IMPOSSIBLE, IL Y A ERREUR
SVC 0 < D'ASSIGNATION : RETOUR TEMPORAIRE
JMP GEN1 < AU CCI, PUIS ON RETENTE...
GEN2: EQU $
LAD DEMCCI
SVC 0 < OK, ON FAIT UN RETOUR DEFINITIF
JMP GEN2 < AU CCI.
END GENERE
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.