IF GOEI,X100,,X100
NMPROC: VAL "GO" < NOM DU PROCESSEUR.
IDP "GO - RELEASE 01/06/1979"
X100: VAL 0
IF GOEI,,X100,
NMPROC: VAL "EI" < NOM DU PROCESSEUR.
IDP "EI - RELEASE 01/06/1979"
X100: VAL 0
IDP "JOHN F. COLONNA"
EOT #SIP DEFINITION ITEM#
<
<
< C O R P S I T E M D E S E R V I C E :
<
<
SERASE: VAL 0 < SERASE=0 : EFFACER L'ECRAN APRES,
< #0 : NE PAS EFFACER L'ECRAN
SDUREE: VAL 1 < CONTIENT LA DUREE EN SECONDES
< DES PAUSES SYNCHRONES.
SDUREA: VAL 2 < CONTIENT EN ASCI LA DUREE
< EN MINUTES DES PAUSES SYNCHRONES.
SDEBS: VAL 1 < ADRESSE DE DEBUT DE SEQUENCE.
SFINS: VAL 2 < ADRESSE FIN SEQUENCE.
SMOVE: VAL 3 < QUE FAIRE ??? LES BITS SUIVANTS
< INDIQUENT CE QU'IL FAUT FAIRE
< VAEC CET ITEM ; SI SMOVE=0 ,
< IL S'AGIT D'UN 'SURCH & PLAY'.
SPLAY: VAL 0 < PLAY EN CONTINU (SMOVE<0).
SURCH: VAL 1 < POSITIONNEMENT PUIS STOP.
SARRET: VAL 2 < STOP MAGNETOSCOPE.
LIC: VAL 2 < LONGUEUR CORPS ITEMS 'C'/'E' ,
< EN OCTETS.
LIW: VAL 6 < LONGUEUR ITEM 'W' (EN OCTETS).
< (LONGUEUR DU CORPS)
LIS: VAL 8 < LONGUEUR OCTETS DU CORPS
< D'UN ITEM 'S'.
EOT #SIP DEF PROCESSEUR#
PAGE
<
<
< N O E U D S D E T R A V A I L :
<
<
TABLE
NOEUD1: EQU BRANCH
WORD EIGRAF < @DE LANCEMENT DE 'EI' (COMPATIBLE
< AVEC 'CALL' : ELLE EST DONNEE
< EN SLO+'10).
WORD 0 < POUR FAIRE +1 SUR $.
PROG
EI: EQU $ < POINT D'ENTREE LORS D'UN APPEL
< PAR LE CCI DE CMS4 (P='12).
LRP L
BR -2,L < VERS L'INITIALISATION.
TABLE
X3: VAL $-NOEUD1
DZS LNOEUD-X3 < SUITE DE L'ESPACE DE NOEUD1.
WORD NOEUD1+XNOMC,X < RELAI D'ACCES A <NOMC1>.
WORD NOEUD1+XNOM,X < RELAI D'ACCES A <NOM1>.
NOEUD2: DZS LNOEUD < NOEUD-FILS.
WORD NOEUD2+XNOMC,X < RELAI D'ACCES A <NOMC2>.
WORD NOEUD2+XNOM,X < RELAI D'ACCES A <NOM2>.
PAGE
<
<
< P I L E D E T R A V A I L :
<
<
PILE: VAL 'FF0-6 < 6 MOTS SONT RESERVES POUR
< LA PILE DE TRAVAIL AU SOMMET
< DE L'ESPACE MEMOIRE.
PAGE
<
<
< I T E M 1 E T I T E M 2 :
<
<
ITEM1: EQU ZERO+PILE-LTNI
ITEM2: EQU ITEM1-LTNI
PAGE
<
<
< L O C A L :
<
<
LOCAL LOCEI
LOC: EQU $
<
< B U F F E R S E T
< M E S S A G E S :
<
BUFFER: WORD 0 < BUFFER DE DEBLOCAGE DES PAUSES.
MRCLF: BYTE 1;'6D
MQCM: BYTE 9;'6D
ASCI "REPONSE>"
MRCCI: BYTE 11;'6D
ASCI "RETOUR CCI"
MABS: BYTE 23;'6D
MABSH: WORD 0 < ABSENCE EN HEURES.
ASCI "H "
MABSM: WORD 0 < ABSENCE EN MINUTES.
ASCI "M "
MABSS: WORD 0 < ABSENCE EN SECONDES.
ASCI "S D'ABSENCE."
MDUREE: BYTE 15;'6D
WORD 0 < POUR METTRE LA DUREE ASCI
< DES PAUSES SYNCHRONES (MINUTES).
ASCI "MN DE PAUSE."
MPAUSE: BYTE 6;"P"
ASCI "AUSE> "
MNOM: BYTE 9;'6D
ASCI "ORIGINE>"
MERN: BYTE 5;'6D
ASCI "!ERN"
MERI: BYTE 5;'6D
ASCI "!ERI"
MIT: BYTE 13;'6D
ASCI "ITEM DESIRE="
MEDN: BYTE 4;'6D
ASCI "-->"
MDATE: ASCI "!DAT"
BYTE "E";'04
<
< B L O C D E S A U V E G A R D E L O R S
< D E S R E T O U R S AU C C I :
<
SAVE: ASCI "SAV:"
IDNC: BYTE '60;'04 < OCTET0(IDNC)=SYSID(UTILISATEUR)
< +'60 ; ON NE PEUT METTRE BRUTA-
< LEMENT LE SYSID DANS LE <NOM> ,
< EN EFFET ON AURAIT DES PROBLEMES
< AVEC LE SYSID=4 (CF. 'EOT' !!!)
CLENC: BYTE 0;"S"+'20 < CLEF DE VALIDATION DE L'INFOR-
< MATION QUI SUIT ; ON A :
< OCTET0(CLENC)=SYSID(UTILISATEUR).
SAVNC: DZS 3 < <NOMC> DU NOEUD COURANT SUR
< 3 MOTS.
HEURNC: WORD 0 < HEURE DE LA SAUVEGARDE EXPRI-
< MEE EN MULTIPLES DE 2 SECONDES.
LSAVE: VAL $-SAVE*2 < LONGUEUR EN OCTETS DU <NOM>+
< <VALEUR>.
<
< D E M A N D E S A C M S 4 :
<
DEBLOC: WORD '0101 < DEMANDE DE DEBLOCAGE PAUSE.
WORD BUFFER-ZERO*2
WORD 1 < 1 CARACTERE DE DEBLOCAGE SUFFIT.
DEMIN: WORD '0101 < DEMANDE D'ENTREE AVEC ECHO.
WORD NOEUD2-ZERO+XNOM*2
WORD LNOM < LONGUEUR MAX DE <NOM>.
DEMIT: WORD '0101 < ENTREE DU NOM D'UN ITEM.
WORD ITEM1-ZERO+XNOM*2
WORD LNOM
DEMEDN: WORD '0202 < EDITION DU NOM D'UN ITEM,
WORD ITEM1-ZERO+XNOM*2
WORD LNOM < LA LONGUEUR EST VARIABLE...
DEMOUT: WORD '0202 < DEMANDE DE SORTIE.
WORD 0 < @OCTET DU BUFFER.
WORD 7 < 7 CARACTERES DU <NOMC> A SORTIR.
DEMERA: WORD '0205 < EFFACEMENT DE L'ECRAN.
DEMSGN: WORD '0402 < INITIALEMENT UN STORE DE 'EI '
< LUI-MEME.
WORD NOEUD1-ZERO*2 < @BRANCHE D'OVERLAY.
WORD ZERO-NOEUD1+PILE-LTNI-LTNI*2
WORD -1 < LA VALEUR SUIT IMMEDIATEMENT
< LE NOM.
DEMSAV: WORD '0402 < BLOC DE SAUVEGARDE DU NOEUD
< COURANT PAR L'INTERMEDAIARE
< DU SGN.
WORD SAVE-ZERO*2 < @OCTET DU BLOC DE SAUVEGARDE.
WORD LSAVE < TAILLE EN OCTETS <NOM>+<VALEUR>.
WORD -1 < LA <VALEUR> SUIT LE <NOM>.
CCI: WORD '0001
DEMCCI: EQU CCI < ON NE SAIT JAMIS ...
SLEEP: WORD '0005 < DEMANDE DE MISE EN SOMMEIL.
WORD 0
WORD 0 < TEMPS EN SECONDES DEMANDE.
COMAND: WORD '0002 < ACCES AU CCI NON INTERACTIF.
WORD 0 < @OCTET DE LA CARTE.
WORD 80 < LONGUEUR MAX D'UNE CARTE.
<
< C O N S T A N T E S :
<
KIN: WORD -1 < POUR RETOURNER A 'GE' SOUS 'GO'...
IF GOEI,,X100,
EIGO: WORD 0 < INDICATEUR DU PROCESSUR EXECUTE :
X100: VAL 0
IF GOEI,X100,,X100
EIGO: WORD 1 < INDICATEUR DU PROCESSER EXECUTE :
X100: VAL 0
< -1 : GENERATION DE 'EI' ET 'GO' ,
< 0 : PROCESSUR 'EI' ,
< 1 : PROCESSEUR 'GO'.
NGE: ASCI "GE" < POUR NOMMER 'GE'.
NGR: ASCI "G3" < NOM DE L'EDITEUR GRAPHIQUE.
NEX: ASCI "3D" < NOM DU PROCESSEUR GRAPHIQUE.
NED: ASCI "ED" < NOM DU PROCESSEUR 'ED'.
NPH: ASCI "PH" < NOM DE L'ANALYSEUR DU FRANCAIS.
NVI: ASCI "VI" < NOM DU PROCESSEUR VIDEO.
NSC: ASCI "SC" < NOM DU PROCESSEUR FILM DIGITAL.
EAO: ASCI ":EAO" < ACN DU SYSTEME D'ENSEIGNEMENT.
ALTNI2: WORD LTNI*2 < LONGUEUR TOTALE EN OCTETS
< DES ITEMS (EN-TETE+CORPS).
ALTNI: WORD LTNI < LONGUEUR TOTALE EN MOTS ITEM.
F3: WORD 0 < STOCKAGE INTERMEDIAIRE DE F3 :
< F3=SIGMA(EOR(I*K(I))).
< (APPROXIMATIVEMENT ????....)
LOVL: WORD ZERO-NOEUD1+PILE-LTNI-LTNI*2
< LONGUEUR EN OCTETS DES BRANCHES
< D'OVERLAY.
C10: WORD 10 < POUR LES CONVERSIONS DECIMALES.
C16: WORD 16 < CONVERSION BCD-->ASCI.
C60: WORD 60 < 1 MINUTE=60 SECONDES.
C3600: WORD 3600 < 1 HEURE=3600 SECONDES.
NPROC: WORD 0 < POUR RECUPERER LE NOM DU
< PROCESSEUR GRAPHIQUE POUR
< LES ITEMS DE TYPE 'D'.
<
< ENVOI EN ZDC :
<
VALZDC: WORD 0 < MOT DE SYNCHRONISATION...
ZDC2: DZS XXNOMC/XXNOCM < <NOMC> QUE L'ON ECHANGE...
BYTE XXEOT;0
LONZDC:: VAL $-VALZDC*2
AZDC: WORD ZDC2,X < POUR DEPLACER <NOMC>...
DEMZDC: WORD '0008 < ACCES <NOMC> EN ZDC.
WORD VALZDC-ZERO*2
WORD LONZDC
WORD 'FFC0
DELZDC: WORD '000A < ENVOI DE L'ACQUITTEMENT ZDC.
WORD VALZDC-ZERO*2
WORD ZDC2-VALZDC*2
WORD 'C000
<
< A D R E S S E S D E T A B L E S :
<
AN1: WORD NOEUD1 < ADRESSE DU NOEUD1.
AN2: WORD NOEUD2 < ADRESSE DU NOEUD2.
AI1: WORD ITEM1 < ADRESSE DE ITEM1.
AI2: WORD ITEM2 < ADRESSE DE ITEM2.
AKI1: WORD ITEM1+XWORK2,X < RELAI VERS LE CORPS DE L'ITEM1.
ACOM: WORD COM,X < RELAI DE LA TABLE D'EXECUTION
< DE L'ITEM COURANT (ITEM1).
APILE: WORD PILE-1 < VALEUR INITIALE DU REGISTRE K.
<
< R E L A I S D E S R O U T I N E S :
<
AOVL: WORD OVL < INTERFACE DE CHARGEMENT DES
< BRANCHES D'OVERLAY.
ACODAG: WORD CODAGE < CODAGE DES <NOM> EN <NOMC>.
APRINT: WORD PRINT < ENVOI D'UN MESSAGE.
ACALCI: WORD CALCCI < APPEL CCI NON INTERACTIF.
AGTCAR: WORD GETCAR < ROUTINE D'ACCES A UN CARACTERE.
ACONV: WORD CONV < CONVERSIONS DECIMALES.
ASGN: WORD SGN < ACCES AU SGN POUR 'LOAD-VALUE
< SOUS :SYS'.
ASAV: WORD SAV < ACCES AU SGN LORS DE LA SAU-
< VEGARDE DU NOEUD COURANT.
AERR: WORD ERREUR < ERREURS DEFINITIVES ...
APGO: WORD PGO < ENTRY SECONDAIRE DE 'GO'.
APEI: WORD PEI < ENTRY SECONDAIRE DE 'EI'.
AGOBGE: WORD E500 < RETOUR EN ERREUR A 'GE'.
PAGE
<
<
< T A B L E D ' E X E C U T I O N D E S I T E M S :
<
<
< FONCTION :
< CETTE TABLE EST INDEXEE PAR LE
< TYTPE DE L'ITEM COURANT (ITEM1) A
< UNE TRANSLATION PRES ('41) . ELLE
< PERMET D'ACCEDER UN MODULE D'EXECUTION
< DU CONTENU DE L'ITEM1.
<
<
COM: EQU $-'41 < ON COMMENCE AU TYPE 'A'.
WORD ERREUR < A
WORD ERREUR < B
WORD GOCCI < C : RETOUR AU CCI.
WORD DESSIN < D : EXECUTION PROG. GRAPHQIUE.
AERASE: WORD ERASE < E : EFFACEMENT ECRAN.
WORD ERREUR < F
AGOGE: WORD GOGE < G : RETOUR A !GE.
WORD ERREUR < H
WORD FILMD < I : FILM DIGITAL.
WORD ERREUR < J
WORD ERREUR < K
WORD ERREUR < L
WORD QCM < M : QUESTIONS A CHOIX MULTIPLE.
WORD ERREUR < N
WORD ERREUR < O
WORD PROG < P : RUNNER-PROCESSEUR GRAPHIQUE.
WORD ERREUR < Q
WORD REPON < R : REPONSE EN FRANCAIS.
WORD VIDEO < S : SEQUENCE VIDEO.
WORD TEXTE < T : AFFICHAGE D'UN TEXTE.
WORD ERREUR < U
WORD VIDE < V : ITEM VIDE.
WORD WAIT < W : PAUSE.
WORD ERREUR < X
WORD ERREUR < Y
WORD ERREUR < Z
PAGE
<
<
< 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 :
< W=@NOEUD.
<
<
< RESULTAT :
< X=0 (OK).
<
<
PROG
USE W,NOEUD
CODAGE: EQU $
<
< INITIALISATION DU CODEUR :
<
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'.
E1: EQU $
STA &ANOMC < MISE DE <NOMC> A 'SPACE'.
ADRI 1,X < INDEX DE RAZ.
CPR X,Y
JNE E1 < NEXT ....
LXI -1 < X=INDEX CARACTERE.
< =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)) ,
< X=INDEX CARACTERES (IN ET OUT) ,
< =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 E2 < MOT VIDE , C'EST FINI.
STBY &ANOMC < STORE : C(1)=K(1).
BSR AGTCAR < A=K(2).
JE E2 < LE MOT N' A QU'UNE LETTRE.
STBY &ANOMC < C(2)=K(2).
BSR AGTCAR < A=K(3).
JE E2 < LE MOT N'A QUE 2 LETTRES.
STBY &ANOMC < C(3)=K(3).
<
< CODAGE DES CARACTERES K(4),...,K(L) :
<
E3: EQU $
BSR AGTCAR < A=K(I) , I=4,...,L.
< (L DESIGNANT LA LONGUER DU
< MOT A CODER).
JE E4 < ARRET DU CODAGE SUR 'EOT'.
ADR X,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 E3 < CODAGE DU CARACTERE SUIVANT.
<
< MISE SOUS FORME ASCI DES FONCTIONS F2 & F3 :
<
E4: 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 E5
ADRI -'30,A < F3 EST MIS SOUS LA FORME D'UN
< CODE INFERIEUR AU 'Z'.
E5: EQU $
CPI " "
JG E6
ADRI '30,A < F3 EST DONC ENTRE LE 'Z'
< (COMPRIS) ET LE 'SPACE' (NON
< COMPRIS).
E6: 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 E7
ADRI -'30,A < ON RAMENE F2 A UN CODE INFERIEUR
< A CELUI DU 'Z'.
E7: EQU $
CPI "0"
JGE E8
ADRI '20,A < ON TENTE DE RAMENER F2 APRES
< LE CODE DU '0' (ZERO).
JMP E7 < POURSUIVONS LA TENTATIVE ....
E8: 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 NOMC+2 < STORE : C(5)=F2 , C(6)=F3.
<
< CODAGE DE LA LONGUEUR DU MOT :
<
E2: EQU $
< ON A ICI :
< X=LONGUEUR DU MOT ENTRE (NON COMPRIS 'EOT').
LR X,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>.
<
<
USE W,NOEUD
GETCAR: EQU $
ADRI 1,X < PROGRESSION DE L'INDEX CARACTERE
< COURANT (AVANT ACCES !!!!).
< ET PROGRESSION DE LA LONGUEUR
< COURANTE.
LR X,A < ACCES A LA LONGUEUR COURANTE.
CPI LNOM < EST-ON AU BOUT DU <NOM> SANS
< AVOIR RENCONTRE D''EOT' ???
JE E140 < OUI , ON FAIT COMME SI....
LBY &ANOM < A=K(X).
CPI '04 < EST-CE 'EOT' ????
E140: EQU $
RSR
PAGE
<
<
< E N V O I D ' U N M E S S A G E :
<
<
< FORMAT DES MESSAGES :
< OCTET0=LONGUEUR DU MESSAGE ,
< OCTET1,...=TEXTE DU MESSAGE.
<
<
< ARGUMENT :
< A=@MESSAGE.
<
<
< DETRUIT LA BASE C.
<
<
PRINT: EQU $
LR A,C < C ADRESSE LE MESSAGE A ENVOYER.
ADR A,A
ADRI 1,A < ADRESSE OCTET DU MESSAGE.
STA DEMOUT+1 < MISE EN PLACE DE L'@OCTET DU
< MESSAGE DANS DEMOUT.
LBY 0,C < A=LONGUEUR DU MESSAGE.
STA DEMOUT+2 < MISE EN PLACE DU COMPTE D'OCTETS
< DANS DEMOUT.
LAD DEMOUT
SVC 0 < ENVOI DE LA DEMANDE A CMS4.
RSR < LES CONDITIONS DE RETOUR SONT
< IGNOREES.
PAGE
<
<
< A P P E L C C I N O N I N T E R A C T I F :
<
<
< ARGUMENT :
< A=@MOT DE LA CARTE A ENVOYER AU CCI.
<
<
CALCCI: EQU $
ADR A,A < A=@OCTET DE LA CARTE.
STA COMAND+1 < MISE EN PLACE DE L'@ OCTET
< DE LA CARTE DANS LA DEMANDE.
LAD COMAND
SVC 0 < ENVOI DE LA CARTE AU CCI.
RSR
PAGE
<
<
< A C C E S A U S G N :
<
<
< FONCTION :
< CETTE ROUTINE PERMET DE FAIRE
< UN 'LOAD VALEUR'.
< CETTE ROUTINE TRAVAILLE EN BASCULE
< SUR LES MODES 'LOAD SOUS :SYS' , ET
< 'LOAD SOUS <ACN>' ; LE BASCULEMNT
< SE FAIT EN CAS D'ERREUR.
<
<
< ARGUMENTS :
< A=LONGUEUR OCTETS DE LA VALEUR ATTENDUE ,
< W=@MOT DE LA ZONE MEMOIRE OU RANGER LA VALEUR.
<
<
< RESULTAT :
< INDICATEURS POSITIONNES EN CAS D'ERREUR ,
< (POUR PERMETTRE DES TESTS JE/JNE)
< X=CONDITIONS DE RETOUR DU SGN.
<
<
SGN: EQU $
STA DEMSGN+2 < MISE EN PLACE DU COMPTE D'OCTETS
< DE DEMSGN.
LR W,A < A=@MOT DE LA VALEUR.
ADR A,A < A=@OCTET DE LA VALEUR.
STA DEMSGN+1 < MISE EN PLACE DE L'@OCTET
< DU BUFFER DANS DEMSGN.
LYI 1 < DECOMPTEUR DES TENTATIVES.
<
< BOUCLE DE BASCULE DES ACN :
<
E100: EQU $
LAD DEMSGN < A NOTER QU'ON A DEJA : NVP=6.
SVC 0 < ENVOI DE LA DEMANDE A CMS4.
JE E101 < OK , LE CHARGEMENT S'EST BIEN
< TERMINE , RETOUR OK.
ADRI -1,Y < DECOMPTE DES TENTATIVES.
CPZR Y < 1ERE OU 2EME TENTATIVE ????
JL E101 < C'ETAIT LA 2EME , ON FAIT DONC
< UN RETOUR EN ERREUR ; A NOTER
< QUE LES INDICATEURS SONT
< POSITIONNES SUR #0 , PUISQUE Y<0.
<
< 2EME TENTATIVE :
<
LA DEMSGN
IBT 6 < ON ECHANGE NVP=5/6 , POUR
IBT 7 < NVP=6/5 ....
STA DEMSGN < MAJ DEMSGN.
JMP E100 < VERS LA 2EME TENTATIVE.
<
< RETOUR DE LA ROUTINE :
<
E101: EQU $
RSR < X CONTIENT LES CONDITIONS DE
< RETOUR DE CMS4.
PAGE
<
<
< A C C E S S G N P O U R ' S A V E ' :
<
<
< ARGUMENT :
< A=NVP D'ACCES AU SGN.
<
<
< RESULTATS :
< X=CONDITIONS DE RETOUR DU SGN ,
< INDICATEURS POSITIONES (OK OUI/NON).
<
<
SAV: EQU $
STBY DEMSAV < MISE EN PLACE DU NVP DE DEMSAV.
LAD DEMSAV
SVC 0 < ENVOI DE LA DEMANDE.
RSR
PAGE
<
<
< C O N V E R S I O N D E C I M A L E :
<
<
< ARGUMENT :
< A=NBRE BINAIRE INFERIEUR A 100.
<
<
< RESULTAT :
< A=NBRE CONVERTIE EN ASCI (2 CARACTERES).
<
<
CONV: EQU $
PSR B < SAVE B.
LR A,B
LAI 0
DV C10 < A=CHIFFRE DES DIZAINES ,
< B=CHIFFRE DES UNITES.
JAE E207 < SI LES DIZAINES SONT NULLES ,
< ON FAIT LA CONVERSION SOUS
< FORME D'UN CARACTERE 'NULL'.
ORI '30 < SINON , CONVERSION ASCI.
SWBR A,A < LE CHIFFRE DES DIZAINES EST
< MIS EN OCTET0(A).
E207: EQU $
ORR B,A
ORI '30 < CONVERSION DU CHIFFRE DES
< DES UNITES (OCTET1(A)) EN ASCI.
PLR B < RESTAURE B.
RSR
PAGE
<
<
< P R O C E S S E U R D E P A R C O U R S D U
< G R A P H E D ' E N C H A I N E M E N T
< D E S I T E M S :
<
<
< FONCTION :
< CE PROCESSEUR EST DOUBLE , ET
< EST APPELE POUR 2 FONCTIONS DISTINCTES
< 'GO' : PERMET DE LANCER LE PROCESSUS ,
< EN DEMANDANT LE NOEUD DE DEPART
< DANS LE GRAPHE D'ENCHAINEMENT ;
< 'EI' : ENCHAINE ENSUITE LES ITEMS
< ENTRE EUX , EN PARCOURANT LE GRAPHE
< D'ENCHAINEMENT DANS LE SENS :
< NOEUD-PERE-->NOEUD-FILS ; LE CHOIX DU
< FILS SE FAIT EN FONCTION DES
< CONDITIONS DE RETOUR D'UN ITEM ,
< CONDITIONS QUE L'ON TROUVE DANS
< 'CDRET' . EN CHAQUE NOEUD DU
< GRAPHE , ON 'EXECUTE' L'ITEM QUI
< Y EST ATTACHE.
<
<
< LE NOEUD COURANT EST IMPLANTE EN NOEUD2 !!!!
<
<
WORD LOC+'80 < VALEUR INITIALE DE L.
WORD NOEUD1 < VALEUR INITIALE DE W=@NOEUD1.
EIGRAF: EQU $
LRP K
ADRI -1,K
PLR L,W < INITIALISATION DE
< DE L (SUR LE LOCAL) , ET
< DE W (SUR NOEUD1).
LB APILE
LR B,K < INITIALISATION DE K.
PAGE
<
<
< R U N D U B I - P R O C E S S E U R :
<
<
< DIFFERENCIATION DES 2 PROCESSEURS :
< EIGO=0 : 'EI' : PARCOURS DU GRAPHE ,
< EIGO=1 : 'GO' : INITIALISATION DU PARCOURS.
<
<
USE W,NOEUD
LAI 6
STBY DEMSGN < DEMSGN EST MISE EN MODE
< 'LOAD-VALUE SOUS :SYS'.
<
< MISE EN PLACE DU NOEUD COURANT NOEUD2 :
<
ADRI LTN,W < W=@NOEUD2.
<
< TEST DES ALT-MODES :
<
IC KIN < COMPTAGE DES ENTREES...
JE NALTM < LA PREMIERE, ON Y VA...
BR AGOGE < CAS DES SUIVANTES...
NALTM: EQU $
<
< DISCRIMINATION DE 'EI' ET 'GO' :
<
CPZ EIGO < QUI EST LA ???
JE PEI < C'EST 'EI' ...
PAGE
<
<
< ' G O ' : I N I T I A L I S A T I O N
< O U R E - I N I T I A L I S A T I O N D U
< P A R C O U R S :
<
<
< FONCTION :
< PGO EST UTILISE SOIT POUR INTIALISER
< LE PARCOURS DU GRAPHE , SOIT POUR
< LE REINITIALISER , SUITE A UN RETOUR
< PROVISOIRE AU CCI , PAR UN ITEM 'C' ;
<
<
< NOEUD COURANT :
< NOEUD2.
<
<
PGO: EQU $
<
< INITIALISATION DE LA ZONE
< DE TRANSMISSION DES ARGUMENTS :
<
STZ CDRET-LTN,W < OK A PRIORI.
STZ MODCAL-LTN,W
<
< PREPARATION DE L'APPEL DE 'EI' ; EN
< FAIT LES CODES SONT
< IDENTIQUES , L'APPEL PEUT DONC
< ETRE SIMULE :
<
STZ EIGO < EIGO=0 : C'EST DONC 'EI' !?!!?
<
< TEST SUR UNE RESTAURATION EVENTUELLE :
<
WORD '1E45 < RENVOI : A=SYSID(UTILISATEUR).
LR A,B < SAUVEGARDE B=SYSID(UTILISATEUR).
ORI '60 < CONVERSION EN UNE MINUSCULE ASCI.
STBY IDNC < GENERATION DU <NOM> DE L'EVENTUEL
< BLOC 'SAVE'.
LAI 5 < NVP='LOAD SOUS <ACN>.
BSR ASAV < TENTATIVE DE RECUPERATION
< D'UN BLOC 'SAVE'.
JNE E200 < LE BLOC 'SAVE' N'EXISTEPAS ,
< ON FAIT DONC UNE INITIALISATION.
<
< VALIDATION D'UN BLOC 'SAVE' EXISTANT :
<
LBY CLENC < A=OCTET0(CLEF DE VALIDATION).
CPR A,B < OCTET0(CLEF DE VALIDATION)=?
< SYSID(UTILISATEUR) ????
JNE E200 < NON , ON FAIT DONC UNE INITIA-
< LISATION DU PARCOURS DU GRAPHE.
LA CLENC
ANDI 'FF < A=OCTET1(CLEF DE VALIDATION).
CPI "S"+'20 < VALIDATION ??
JNE E200 < CLEF NON VALIDE : INITIALISATION
< DU PARCOURS DU GRAPHE.
<
< OK , RESTAURATION DU NOEUD COURANT :
<
LR W,B < B=@NOEUD2=@RECEPTEUR.
LAD SAVNC < A=@EMETTEUR=@BLOC 'SAVE'.
LXI 3 < 2*3 OCTETS A DEPLACER.
MOVE
<
< DELETE DU BLOC 'SAVE' :
<
LAI 3 < NVP='DELETE VALUE'.
BSR ASAV < ON NE TESTE PAS LES CONDITIONS
< DE RETOUR DU SGN.
<
< CALCUL DU TEMPS ECOULE ENTRE LE
< RETOUR AU CCI , ET LA RESTAURATION :
<
WORD '1E85 < RENVOI : A=HEURE EXPRIMEE EN
< MULTIPLES DE 2 SECONDES.
SB HEURNC < A LAQUELLE ON RETRANCE L'HEURE
< DE RETOUR AU CCI.
SLRD 15 < A=0 & B=TEMPS D'ABSENCE
< EXPRIME EN SECONDES.
DV C3600 < A=DUREE ECOULEE EN HEURES ,
< B=DUREE RESIDUELLE EN SECONDES.
BSR ACONV < CONVERSION DE LA DUREE-HEURES
< EN 2 CARACTERES ASCI.
STA MABSH < MAJ DU MESSAGE MABS.
LAI 0
DV C60 < A=DUREE EXPRIMEE EN MINUTES ,
< B=DUREE RESIDUELLE EN SECONDES.
BSR ACONV < CONVERSION DE LA DUREE EN
< MINUTES , EN ASCI.
STA MABSM < MAJ DU MESSAGE MABS.
LR B,A < A=DUREE RESIDUELLE EN SECONDES.
BSR ACONV < CONVERSION DE LA DUREE EN
< SECONDES EN ASCI.
STA MABSS < MAJ DU MESSAGE MABS.
LAD MABS
BSR APRINT < ENVOI A L'UTILISATEUR DE LA
< DUREE DE L'ABSENCE.
JMP E202 < VERS LA POURSUITE DU PARCOURS
< DANS LE GRAPHE.
< (AVEC D'ABORD LE RECHARGEMENT
< DU NOEUD COURANT).
<
< CAS D'UNE INITIALISATION VRAIE DU PARCOURS :
<
E200: EQU $
<
< DEMANDE DU NOM DU NOEUD DE DEPART :
<
LAD MNOM
BSR APRINT < ENVOI D'UN MESSAGE D'INVITATION
< A DONNER LE NOEUD DE DEPART.
LAD DEMIN
SVC 0 < LECTURE DU <NOM> DU NOEUD1.
< ON A ICI :
< W=@NOEUD2.
BSR ACODAG < CODAGE DE <NOM> EN <NOMC>.
JMP E31 < VERS LE CHARGEMENT DU NOEUD DE
< DEPART DU GRAPHE.
PAGE
<
<
< C H A R G E M E N T D ' U N I T E M
< A L A D E M A N D E :
<
<
< FONCTION :
< LORSQU'UN NOEUD N'A PAS
< D'ITEM ASSOCIE, OU BIEN LORSQU'UN
< CHARGEMENT D'ITEM SE FAIT MAL, ON
< SE BRANCHE ICI ; CE MODULE DEMANDE
< LE NOM D'UN ITEM, LE COMPACTE, ET
< FAIT COMME SI IL AVAIT ETE RENCONTRE
< DANS LE GRAPHE...
<
<
< NOTA :
< SI LE MESSAGE EST VIDE (EOT OU
< R/C) ON FAIT COMME SI LE TYPE 'V'
< ETAIT RENCONTRE...
<
<
LI3: EQU $
LAD MERI
BSR APRINT < MESSAGE D'ERREUR DE CHARGEMENT.
LI1: EQU $
LA AI1
LR A,W < W=@ITEM1.
SBT 0 < A=RELAI VERS LE NOM COMPACTE.
STA ANOMCI-HITEM,W < GENERATION DU RELAI 'ANOMCI'.
ADRI NOMI-HITEM,A < A=RELAI VERS LE NOM.
STA ANOMI-HITEM,W < GENERATION DU RELAI 'ANOMI'.
LAD MIT
BSR APRINT < ENVOI D'UNE INVITATION...
LAD DEMIT
SVC 0 < ENTREE DU NOM REEL DE L'ITEM1.
WORD '1E35 < B=BOX DE LA LECTURE VISU.
LR B,A < A=NBRE DE CARACTERES ENTRES
CPI 1 < MESSAGE VIDE (EOT OU R/C) ???
JE LI4A1 < OUI, ON VA RECUPERER SON <NOMC> DANS LA
< ZDC SI 'R/C' OU LE CONSIDERER VIDE ('V')
< SI <EOT>...
BSR ACODAG < CALCUL DE <NOMC> DE L'ITEM1.
JMP LI2 < ET ON FAIT COMME SI DE
< RIEN N'ETAIT !!!
<
< CAS DES NOMS VIDES :
<
LI4A1: EQU $
LXI 0
LBY &ANOMI-HITEM,W < (A)=PREMIER CARACTERE :
CPI XXEOT < <EOT> ???
JE LI4 < OUI, ON FAIT COMME SI TYPE 'V'...
CPI '0D < 'R/C' ???
JNE $ < !???!??!??!?
<
< CAS DES 'R/C', ACCES A LA ZDC :
<
LAD DEMZDC
ZDCIN1: EQU $
SVC 0 < ACCES A LA ZDC :
CPZ VALZDC < EST-ELLE VALIDE ???
JE ZDCIN1 < NON, ON ATTEND...
STZ VALZDC < OUI, ON L'ACQUITTE...
LAD DELZDC
SVC 0 < ACQUITTEMENT...
<
< TRANSFERT DU <NOMC> :
<
LXI XXNOMC < (X)=INDEX DES CARACTERES :
ZDCIN2: EQU $
LBY &AZDC
STBY &ANOMCI-HITEM,W < TRANSFERT DU <NOMC>...
ADRI -1,X
CPZR X
JGE ZDCIN2
<
< EDITION DU <NOM> :
<
LRP C < ON NE SAIT JAMAIS...
LA ALTNI2 < (A)=NOMBRE D'OCTETS A CHARGER,
BSR ASGN < ET CHARGEMENT DE L'ITEM DESIRE, AFIN DE
< POUVOIR EDITER SON <NOM>...
JNE LI3 < ERREUR...
LXI 3
LBY &ANOMCI-HITEM,W < (A)=CARACTERE CODANT LA LONGUEUR,
ADRI -'30,A < QUE L'ON DECODE,
STA DEMEDN+2 < ET QUE L'ON MET DANS LA DEMANDE...
LAD MEDN
BSR APRINT < EDITION DE "-->",
LAD DEMEDN
SVC 0 < PUIS DU <NOM>...
JMP LI5 < ET ON FAIT COMME SI DE RIEN N'ETAIT...
PAGE
<
<
< ' E I ' : P A R C O U R S D U G R A P H E :
<
<
< UTILISATION DE LA BASE C :
< EN DEHORS DE LA ROUTINE DE 'PRINT' ,
< ELLE CONTIENT EN GENERAL UNE ADRESSE
< DE RETOUR PERMETTANT D'ITERER LES
< DEMANDES D'ACCES AU SGN APRES AVOIR
< FAIT UN RETOUR AU CCI.
<
<
< UTILISATIONS DES NVP :
< NVP=10 : CU2 (MAGNETOSCOPES) ,
< NVP=11 : CU3 (BAIE DE COMMUTATION) , OU
< TY1.
<
<
< NOEUD COURANT :
< NOEUD2.
<
<
PEI: EQU $
<
< R E C H A R G E M E N T D U N O E U D C O U R A N T :
<
< ON A ICI :
< W=@NOEUD2.
LAD NCEI-LTN,W < A=@ZONE OU EST SAUVEGARDE
< LE <NOMC> DU NOEUD COURANT.
LR W,B < B=@DU <NOMC> DANS NOEUD2.
LXI XXNOMC/XXNOCM < UN <NOMC> FAIT 2*3 CARACTERES.
MOVE < RESTAURATION DE <NOMC> DU
< NOEUD COURANT DANS NOEUD2.
E202: EQU $ < ENTRY 'GO' REINITIALISATION.
LAI '04
STBY NOMC+3 < MISE EN PLACE DE L'EOT DE
< FIN DU <NOMC>.
LRP C < C=@DE RETOUR EN CAS D'ERREUR SGN.
LAI 2*LNOEUD < NBRE D'OCTETS D'UN NOEUD.
BSR ASGN < DEMANDE DE RECHARGEMENT DU
< NOEUD COURANT EN NOEUD2 ; IL
< S'AGIT BIEN D'UN RECHARGEMENT ,
< CAR IL ETAIT CHARGE AVANT
< L'EXECUTION DE L'ITEM PRECEDENT
< QUI LUI ETAIT CONNECTE ; SI ON
< ON LE RECHARGE C'EST QU'ON
< CHERCHE SES FILS.
JNE E200 < CAS DES ERREURS DE CHARGEMENT :
< VERS UNE (RE-)INITIALISATION
< DU PARCOURS DU GRAPHE : ON PEUT
< DONC AINSI ABANDONNER LE
< PARCOURS D'UN GRAPHE LORS D'1NE
< RENTREE DANS !GE EN TAPANT
< 'EI' A LA PLACE DE 'GO' (QUI
< LUI , IRAIT RELIRE L'EVENTUEL
< BLOC DE SAUVEGARDRE...)
<
< VALIDATION DU FILS DEMANDE :
<
LX CDRET-LTN,W < X=CDRET ; CDRET DONNE LE
< NUMERO (DE 0 A 7) DU FILS
< DEMANDE DU NOEUD COURANT.
LR X,A < A=CDRET.
CPI EI-ZERO
JL VFILS < VERS LA VALIDATION DU FILS.
<
< CAS OU CDRET>=@E1 : IL VIENT D'Y AVOIR UN ALT-MODE :
<
LXI 2 < ON FORCE ALORS LE FILS NUMERO 2.
JMP ALTM < VERS LA RECHERCHE DU FILS 2.
VFILS: EQU $ < VALIDATION SI PAS D'ALT-MODE.
JAL ERREUR < BIZARRE : CDRET,W<0 ?!!?!!?
CPI 7 < VALIDATION DU CDRET.
JG ERREUR < BIZARRE : CDRET,W>7 !?!?!?!
<
< OK , CDRET VALIDE :
<
ALTM: EQU $ < CAS DES ALT-MODES.
LA FAMILY < A=FAMILLE DU NOEUD COURANT.
TBT 8,X < TEST DU FILS (CDRET).
JNC NINEX < LE FILS DEMANDE N'EXISTANT
< PAS , ON VA REBOUCLER SUR LE
< NOEUD COURANT !!! C'EST
< BIEN FAIT POUR LUI ...
<
< C H A R G E M E N T D U F I L S
< C O M M E N O U V E A U N O E U D C O U R A N T :
<
LR X,A < A=NUMERO DU FILS DEMANDE.
ADR A,A
ADR X,A < A=3*(CDRET).
ADRI FILS-NOEUD,A
ADR W,A < A=@<NOMC>(FILS)=@EMETTEUR.
LR W,B < B=@NOEUD2=@RECEPTEUR.
LXI XXNOMC/XXNOCM < UN <NOMC> FAIT 2*3 CARACTERES.
MOVE < MISE DU FILS DU NOEUD COURANT ,
< COMME NOUVEAU NOEUD COURANT
< EN NOEUD2.
<
< SAUVEGARDE DU NOUVEAU NOEUD COURANT :
<
E31: EQU $ < ENTRY 'GO' INITIALISATION.
LAD NCEI-LTN,W
LR A,B < B=@ZONE DE SAUVEGARDE DU NOEUD
< COURANT=@RECEPTEUR.
LR W,A < A=@<NOMC>(NOUVEAU NOEUD
< COURANT)=@EMETTEUR.
LXI XXNOMC/XXNOCM < UN <NOMC> FAIT 2*3 CARACTERES.
MOVE < SAUVEGARDE DU NOUVEAU NOEUD
< COURANT AVANT LA BRANCHE
< D'OVERLAY (HABILE ?!?!)
<
< R E B O U C L A G E E V E N T U E L
< S U R L E N O E U D C O U R A N T :
<
NINEX: EQU $
LRP C < C=@DE RETOUR SI ERREUR SGN.
LAI 2*LNOEUD < A=NBRE D'OCTETS OCCUPES PAR
< UN NOEUD.
BSR ASGN < CHARGEMENT DU NOUVEAU NOEUD
< COURANT.
JNE E30 < ERREUR DE CHARGEMENT !?!?!?
<
< VALIDATION DU NOEUD COURANT :
<
LXI 7
LBY &ANOMC < ACCES AU 'TYPE'.
CPI 'CE < EST-CE LE TYPE-NOEUD ???
< (CARACTERE 'N' AVEC BIT0=1).
LXI '04 < CODE D'ERREUR 'NOM INEXISTANT'
< A PRIORI.
< (SI OK , X=4 EST UTILISE PAR
< LE MOVE QUI VA SUIVRE).
JNE E30 < LA VALEUR QUE L'ON VIENT DE
< CHARGER N'EST PAS DE TYPE 'NOEUD'
< ON FAIT COMME SI LE NOEUD N
< EXISTAIT PAS (CF. X='04).
<
< C H A R G E M E N T D E L ' I T E M
< C O N N E C T E A U N O E U D C O U R A N T :
<
< ON A ICI :
< X=4 : UTILISE LORS DU MOVE ....
LA INDIC
TBT BITEM < Y-A-T'IL BIEN UN ITEM CONNECTE ??
JNC LI1 < NON, ON VA DEMANDER UN NOM
< A L'UTILISATEUR....
<
< DEPLACEMENT DU <NOMC> DE L'ITEM DANS ITEM1 :
<
LR W,A < A=@NOEUD2.
ADRI ITEM-NOEUD,A < A=@<NOMC>(ITEM)=@EMETTEUR.
LB AI1 < B=@ITEM1=@RECEPTEUR.
< ON A ICI :
< X=4 : POUR DEPLACER 7 OCTETS.
MOVE < <NOMC>(ITEM) EST MIS DANS ITEM1.
<
< CHARGEMENT DE L'ITEM CONNECTE
< AU NOEUD COURANT EN ITEM1 :
<
LR B,W < W=@ITEM1.
LI2: EQU $ < ENTRY UTILISEE SUITE A L'ENTREE
< D'UN NOM D'ITEM1 PAR L'UTILISATEUR
LRP C < C=@DE RETOUR SI ERREUR SGN.
LA ALTNI2 < A=NBRE MAX OCTETS D'UN ITEM.
BSR ASGN < CHARGEMENT ITEM1.
JNE LI3 < DANS LE CAS D'UNE ERREUR
< DE CHARGEMENT, ON DEMANDE OU
< REDEMANDE UN NOM D'ITEM....
<
< ACCES AU TYPE DE L'ITEM :
<
LI5: EQU $
USE W,HITEM
LA IINDIC
STA NPROC < SAVE AU CAS OU L'ITEM SERAIT
< DE TYPE 'D'.
LBY IINDIC < A='TYPE-ITEM'.
JANE E300 < OK , LE TYPE N'EST PAS 'VIDE'.
LI4: EQU $ < CAS OU UN ITEM VIDE EST
< SIMULE LORS DE LA DEMANDE D'UN
< ITEM...
LAI "V" < CAS DU TYPE 'VIDE' ('V').
E300: EQU $
CPI "A" < VALIDATION DU 'TYPE-ITEM'.
JL ERREUR < BIZARRE !!!?!?
CPI "Z" < VALIDATION DU 'TYPE-ITEM'.
JG ERREUR < BIZARRE !?!!?
LR A,X < X='TYPE-ITEM' SI NON-VIDE.
<
< REINITIALISATIONS :
<
USE W,NOEUD
E33: EQU $
LB AN2
LR B,W < W=@NOEUD2.
LAI 1
STA MODCAL-LTN,W < ON INDIQUE DANS LA ZONE DE
< TRANSMISSION DES ARGUMENTS
< QUE L'APPEL A LIEU PAR 'EI'.
STZ CDRET-LTN,W < RAZ CDRET.
< ON A ICI :
< B=@NOEUD2 ,
< W=@NOEUD2 ,
BR &ACOM < BRANCHEMENT FONCTION DU TYPE
< DE L'ITEM VERS UN MODULE SPECI-
< FIQUE DU TYPE.
PAGE
<
<
< D E M A N D E D E P A U S E :
<
<
< FONCTION :
< CE MODULE PERMET DE BLOQUER LE
< PROCESSUS DE PARCOURS DU GRAPHE ,
< SOIT UN TEMPS DONNE EN SECONDES (ET
< FIXE PAR LE GRAPHE LUI-MEME) ,
< SOIT UN TEMPS INDETERMINE FIXE PAR
< L'UTILISATEUR LUI-MEME.
<
<
< ARGUMENT :
< SDUREE=0 : PAUSE INDETERMINEE ,
< #0=DUREE EN SECONDES DE LA PAUSE.
<
<
WAIT: EQU $
LXI SDUREE
LA &AKI1 < RECUPERATION DUREE DE PAUSE.
JAL ERREUR < BIZARRE !?!!??
JAE E62 < DEMANDE PAUSE INDETERMINEE.
<
< P A U S E I M P O S E E :
<
LR A,B < B=TEMPS DEMANDE (EN SECONDES).
<
< INDICATION DE LA DUREE A L'UTILISATEUR :
<
LXI SDUREA
LA &AKI1 < RECUPERATION DE LA DUREE EN
< MINUTES ET EN ASCI.
STA MDUREE+1 < MISE DANS LE MESSAGE MDUREE.
LAD MDUREE
BSR APRINT < ENVOI DE 'XX MN DE PAUSE'.
LAI 0
DV C60
< ON A ICI :
< A=NBRE DE MINUTES A ATTENDRE ,
< B=NBRE DE SECONDES RESIDUELLES.
LR A,X < X=NBRE DE MINUTES A ATTENDRE.
CPI 0 < TEST DU NBRE DE MINUTES.
LAD SLEEP < A=@DEMANDE DE MISE EN SOMMEIL.
JE E60 < MOINS D'UNE MINUTE DEMANDE.
LY C60
STY SLEEP+2 < POUR UNE DEMANDE DE MISE EN
< SOMMEIL DE 1 MINUTE.
<
< BOUCLE DE SOMMEIL (X) FOIS 1 MINUTE :
<
E61: EQU $
PSR X < A CAUSE DU SVC.
SVC 0 < 60 SECONDES DE SOMMEIL.
PLR X
JDX E61 < ENCORE 1 MINUTE DE PASEE ...
<
< ATTENTE RESIDUELLE :
<
E60: EQU $
STB SLEEP+2 < LE NBRE RESIDUEL DE SECONDES
< EST MIS DANS LA DEMANDE DE SLEEP.
SVC 0 < SOMMEIL DE (B) SECONDES.
JMP ERASE < VERS L'EFFACEMENT EVENTUEL DE
< L'ECRAN.
<
< P A U S E I N D E T E R M I N E E :
<
< FONCTION :
< BLOQUE LE PROCESSUS JUSQU'A CE
< QUE L'UTILISATEUR ENVOIE UN 'G'.
< 'G' OU BIEN UN 'RETURN'.
<
< NOTA CONFIDENTIEL :
< - CTRL-C : PERMET UN RETOUR (TEMPORAIRE)
< AU CCI , AVEC RETOUR PAR !GO ,
< - CTRL-F : PERMET UN RETOUR (TEMPORAIRE) A GE ,
< AVEC RETOUR POSSIBLE PAR 'EI'.
<
E62: EQU $
LAD MRCLF
BSR APRINT < PASSAGE A LALIGNE.
LAD MDATE < A=@MOT DE !DATE.
BSR ACALCI < AFFICHAGE DE LA DATE ET DE
< L'HEURE AVANT LA PAUSE.
LAD MPAUSE < A=@MESSAGE DE PAUSE.
BSR APRINT < ENVOI DU MESSAGE INDIQUANT
< QU'UNE SEANCE DE PAUSE (?!?!) EST
< INITIALISEE.
LAD DEBLOC
SVC 0 < ATTENTE DU CARACTERE DE
< DEBLOCAGE DE L'UTILISATEUR.
<
< ANALYSE DES DESIRS DE L'UTILISATEUR :
<
LBY BUFFER < A=CARACTERE FRAPPE.
CPI "G" < DEMANDE DE POURSUITE DE PARCOURS
< DU GRAPHE ???
JE E102 < VERS L'ENVOI DE LA DATE EN
< FIN DE PAUSE (APRES 'G').
CPI '0D < 'RETURN' ???
JE E102 < POURSUITE DU PARCOURS DU
< GRAPHE D'ENSEIGNEMENT.
CPI '06 < CTRL-F ???
JE E500 < OUI , RETOUR A 'GE'.
CPI '03 < EST-CE UNE DEMANDE SECRETE
< DE RETOUR A CCI (CTRL-C) ???
JNE E62 < NON , POURSUITE DE LA PAUSE.
LAD CCI
SVC 0 < RETOUR A CCI POUR CTRL-C.
JMP E62 < REPRISE DE LA PUSE LORS DU !GO.
<
< FIN DE PAUSE :
<
E102: EQU $
LAD MRCLF
BSR APRINT < RETOUR A LA LIGNE.
LAD MDATE < A=@MOT DE !DATE.
BSR ACALCI < ENVOI DE LA DATE ET DE L'HEURE.
<
<
< E F F A C E M E N T D E L ' E C R A N :
<
<
< ARGUMENT :
< SERASE=0 : EFFACER L'ECRAN ,
< #0 : NE PAS EFFACER L'ECRAN.
<
<
ERASE: EQU $
LXI SERASE
CPZ &AKI1 < UN EFFACEMENT EST-IL DEMANDE ??
JNE PEI < NON , VERS L'ACCES A L'ITEM
< SUIVANT DU GRAPHE.
LAD DEMERA
SVC 0 < EFFACEMENT DE L'ECRAN.
JMP PEI < VERS L'ACCES A L'ITEM
< SUIVANT.
PAGE
<
<
< E R R E U R : C H A R G E M E N T N O E U D :
<
<
E30: EQU $
< ON A ICI :
< X=CODE D'ERREUR QUI A AMENE ICI.
LA AGOBGE
LR A,C < DANS LE CAS DE NOM INEXISTANT ,
< ON PREND COMME ADRESSE DE
< RETOUR AU !GO , CELLE DU
< DU RETOUR EN ERREUR A 'GE'.
E210: EQU $
LAD MERN < A=@MESSAGE D'ERREUR.
JMP E40 < VERS L'ENVOI DU MESSAGE D'ERREUR.
<
<
< E R R E U R : C H A R G E M E N T I T E M :
<
<
E32: EQU $
LAD MERI < A=@MESSAGE D'ERREUR.
<
< ENVOI D'UN MESSAGE D'ERREUR :
<
E40: EQU $
< ON A ICI :
< C=@DE RETOUR SI UN !GO EST EMIS SOUS CCI.
PSR C < EMPILEMENT DE L'@DE RETOUR.
BSR APRINT < ENVOI DU MESSAGE D'ERREUR (A).
LAD CCI
SVC 0 < RETOUR AU CCI ,CAR UNE
< ASSIGNATION AU CCI EST ABSENTE.
RSR < SI !GO , ON FAIT FAIT UN
< RETOUR SUR L'APPEL AU SGN
< QUI AVAIT ECHOUE.
<
< R E T O U R D E F I N I T I F A C C I :
<
E41: EQU $
LAD CCI
SVC 0 < RETOUR A CCI.
JMP E41 < RE-RETOUR A CCI SI !GO ...
<
<
< E R E U R : T Y P E I N E X I S T A N T :
<
<
ERREUR: EQU E41 < RETOUR DEFINITIF AU CCI.
PAGE
<
<
< D E M A N D E D E R E T O U R A C C I :
<
<
< BLOC DE SAUVEGARDE :
< LORS DE LA RENCONTRE D'UN ITEM 'C' ,
< AVNT DE FAIRE LE RETOUR AU CCI , ON
< CREE PAR L'INTERMEDIAIRE DU SGN ,
< UN BLOC DE SAUVEGARDE PERMETTANT ,
< ULTERIEUREMENT DE REPARTIR CORRECTEMENT
< DANS LE GRAPHE.
< <BLOC 'SAVE'>=<NOM><VALEUR> ,
< <NOM>='SAV:'<'60+SYSID><EOT>.
< <VALEUR>=<CLEF DE VALIDATION><NOEUD COURANT><HEURE>
< <CLEF DE VALIDATION>=<SYSID><"S"+'20>.
<
<
GOCCI: EQU $
LAD MRCCI
BSR APRINT < ENVOI D'UN MESSAGE ANNONCANT
< LE RETOUR PROVISOIRE AU CCI.
<
< GENERATION DU BLOC DE SAUVEGARDE :
<
WORD '1E85 < RENVOI : A=HEURE EXPRIMEE EN
< MULTIPLES DE 2 SECONDES.
STA HEURNC < MISE DANS LE LE BLOC 'SAVE'.
WORD '1E45 < RENVOI : A=SYSID(UTILISATEUR).
STBY CLENC < GENERATION D'UNE CLEF DE
< VALIDATION DU BLOC 'SAVE'.
ORI '60 < CONVERSION DU SYSID EN UN CARAC-
< TERE MINUSCULE ASCI.
STBY IDNC < QUE L'ON MET DANS LE <NOM> DU
< BLOC 'SAVE'.
LAD SAVNC
LR A,B < B=@RECEPTEUR (BLOC 'SAVE').
LAD NCEI-LTN,W < A=@EMETTEUR=@DE LA ZONE DE
< TRANSMISSION DES ARGUMENTS.
LXI 3 < 2*3 OCTETS A DEPLACER.
MOVE < SAUVEGARDE DU NOEUD COURANT.
<
< ENVOI DU BLOC 'SAVE' AU SGN :
<
E204: EQU $
LAI 4 < A=NVP DE 'STORE VALUE'.
BSR ASAV < ENVOI AU SGN.
JE E203 < OK , ON PEUT RETOURNER AU CCI.
<
< RETOUR EN ERREUR : ON PEUT ADMETTRE
< QUE <NOM> EXISTE DEJA , ET QUE CE
< PHENOMENE EST DU A UN RETOUR PRECEDENT
< AU CCI , SANS LE RETOUR AU GRAPHE ; UN
< BLOC 'SAVE' A DONC ETE CREE , ET N'A PAS
< ETE UTILISE ; ON VA DONC LE DELETER :
<
LAI 3 < NVP='DELETE VALUE'.
BSR ASAV < ENVOI DE LA DEMANDE AU SGN.
JE E204 < DELETE OK , NOUVELLE TENTATIVE
< DE 'STORE' DU BLOC 'SAVE'.
BR AERR < SINON , ERREUR IRRECUPERABLE.
<
< RETOUR PROVISOIRE AU CCI :
<
E203: EQU $
LAD CCI
SVC 0 < VERS LE CCI.
JMP ERASE < VERS UN EFFACEMENT EVENTUEL DE
< L'ECRAN APRES LE RETOUR (!GO).
PAGE
<
<
< I T E M S V I D E S :
<
<
< FONCTION :
< PASSER A L'ITEM SUIVANT PAR
< L'INTERMEDIAIRE DU FILS0 DU
< NOEUD COURANT.
<
<
VIDE: EQU PEI
<
<
< D E M A N D E D E R E T O U R A ! G E :
<
<
GOGE: EQU $
<
< TEST D'EFFACEMENT DE L'ECRAN :
<
LXI SERASE
CPZ &AKI1 < UN EFFACEMENT EST-IL DEMANDE ???
JNE E500 < NON , RETOUR DIRECT A GE.
LAD DEMERA
SVC 0 < OUI , EFFACEMENT DE L'ECRAN.
E500: EQU $
< ON A ICI :
< W=@NOEUD2.
LR W,B < RESTAURE B=@NOEUD2 DANS LE
< CAS DES RETOURS EN ERREUR.
STZ MODCAL-LTN,W < MISE EN PLACE DE L'INDICATEUR
< 'GE' ; EN EFFET , 'GE' NE PEUT
< LE FAIRE LUI-MEME , CAR IL N'Y
< A PLUS DE PLACE DANS SON CODE ,
< POUR INSERER CE RAZ !?!?!
LA NGE < A=NOM DU PROCESSEUR 'GE'.
JMP E34 < VERS LE CHARGEMENT DE 'GE'.
<
<
< I T E M T Y P E - P R O G :
<
<
PROG: EQU $
PSR B < SAVE @NOEUD2.
<
< DEPLACEMENT DE L'ITEM1 VERS L'ITEM2 :
<
LA AI1 < A=EMETTEUR=@ITEM1.
LB AI2 < B=RECEPTEUR=@ITEM2.
LX ALTNI < X=NBRE DE MOTS TOTAL D'UN ITEM.
MOVE < DEPLACEMENT ITEM1 VERS ITEM2 ,
< AVEC ECRASEMENT ITEM2 !!!!!!!!!!
<
< PREPARATION DU CHARGEMENT :
<
PLR B < RESTAURE @NOEUD2.
LA NEX < A=NOM DU RUNNER GRAPHIQUE.
JMP E34 < VERS LE CHARGEMENT.
<
<
< R E P O N S E E N F R A N C A I S :
<
<
< FORMAT :
< L'ITEM1 CONTIENT LA VALEUR SEMANTIQUE
< DE LA REPONSE ATTENDUE.
<
<
REPON: EQU $
LA NPH < ACCES AU NOM DE LA 1ERE
< BRANCHE D'ANALYSE DU FRANCAIS.
JMP E34 < VERS LE CHARGEMENT DE 'PH'.
<
<
< I T E M T Y P E - D E S S I N :
<
<
< NOTA :
< L'OCTET1 DE IINDIC DONNE LA
< 2EME LETTRE DU NOM DU PROCESSEUR
< GRAPHIQUE A APPELER POUR CE DESSIN;
< S'IL EST NUL, ON APPELLE IMPLI-
< CITEMENT 'G3'.
<
<
DESSIN: EQU $
LA NPROC < RESTAURE A=IINDIC...
ANDI '00FF < A=OCTET1(IINDIC),
JANE E1612 < OK, IL Y A DANS L'OCTET1 UN
< NOM DE PROCESSEUR GRAPHIQUE.
LA NGR < LORSQUE L'OCTET1='00, ON PREND
< IMPLICITEMENT 'G3'.
E1612: EQU $
STA NPROC
LA NGR
ANDI 'FF00
OR NPROC < A=NOM DU PROCESSEUR GRAPHIQUE
< A APPELER POUR CE DESSIN.
JMP E34 < VERS LE CHARGEMENT DE 'GR'.
<
<
< I T E M D E T Y P E - T E X T E :
<
<
TEXTE: EQU $
LA NED < A=NOM DU PROCESSEUR 'ED'.
<
<
< C H A R G E M E N T D ' U N P R O C E S S E U R :
<
<
E34: EQU $
ADRI -LTN,B < RETOUR SUR NOEUD1.
ADRI -LTN,W < RETOUR SUR NOEUD1.
< ON A ICI :
< B=@NOEUD1 ,
< W=@NOEUD1 ,
< A=NOM DU PROCESSEUR A CHARGER ,
< MODCAL=1 (0 POUR L'APPEL DE 'GE') ,
< CDRET=0.
STA 0,W < MISE DU NOM DU PROCESSEUR EN TETE
< DU NOEUD1.
LAI '20
SBT 2 < A='SPACE''SPACE'.
STA 1,W
STA 2,W < LE NOM DU PROCESSEUR EST
< COMPLETE PAR 4 'SPACE' ;
< L'EOT DE FIN DE NOM EST DEJA
< POSITIONNE , PAR L'APPEL DU
< NOEUD COURANT.
LA LOVL < A=LONGUEUR EN OCTETS D'UNE
< BRANCHE D'OVERLAY.
STA DEMSGN+2 < MISE EN PLACE DU COMPTE
< D'OCTETS DE DEMSGN.
ADR B,B < B=@OCTET DE NOEUD1.
STB DEMSGN+1 < MISE EN PLACE DE L'@OCTET
< DU BUFFER DANS DEMSGN.
LAI 6
STBY DEMSGN < DEMSGN EST REMISE EN MODE
< 'LOAD SOUS :SYS' POUR LE
< CHARGEMENT DES PROCESSEURS.
<
< CHARGEMENT DU PROCESSEUR :
<
E35: EQU $
LAD DEMSGN
BSR AOVL < ENVOI DE LA DEMANDE D'OVERLAY.
<
< RETOUR EN ERREUR ASSEZ BIZARRE ,
< DONNONS LA MAIN AU CCI :
<
LAD CCI
SVC 0 < RETOUR AU CCI.
JMP E35 < TRY AGAIN SI !GO.
PAGE
<
<
< Q U E S T I O N S A C H O I X M U L T I P L E S :
<
<
< FONCTION :
< LE TYPE D'ITEM 'M' EST UTILISE
< POUR LES QUESTIONS A CHOIX MULTIPLE.
< UN TEXTE PREALABLEMENT EDITE PAR 'ED'
< A POSE UNE QUESTION ET PROPOSE UNE
< SERIE DE REPONSES NUMEROTEES ; CE
< MODULE LIT LA REPONSE EMISE PAR
< L'UTILISATEUR.
<
<
< NOTA CONFIDENTIEL :
< CTRL-F PERMET UN RETOUR A 'GE' LORS D'UN QCM ....
<
<
QCM: EQU $
LAD MQCM
BSR APRINT < ENVOI DU MESSAGE 'REPONSE>'.
LAD DEBLOC
SVC 0 < LECTURE D'1 CARACTERE DE
< REPONSE.
<
< ANALYSE DE LA REPONSE :
<
LBY BUFFER < A=CARACTERE EMIS.
CPI '06 < EST-CE UN CTRL-F ???
JE GOGE < OUI , RETOUR A 'GE' ....
ADRI -'30,A < TRANSLATION EN BINAIRE.
JAL QCM < CARACTERE INFERIEUR A '0' ,
< ON REFAIT L'INTERROGATION.
CPI 7
JG QCM < CARACTERE SUPERIEUR A '7' , ON
< REFAIT L'INTERROGATION.
LR A,X < X=REPONSE EMISE DE 0 A 7.
<
< VALIDATION DE LA REPONSE :
<
USE W,NOEUD
LA FAMILY
TBT 8,X < LE FILS (X) DU NOEUD COURANT
< EXISTE-T'IL ???
JNC QCM < NON , LA REPONSE EST INVALIDE ,
< ON REFAIT DONC L'INTERROGATION.
<
< CAS D'UNE REPONSE VALIDE :
<
STX CDRET-LTN,W < LA REPONSE EST MISE EN
< CDRET (CONDITION DE RETOUR).
BR AERASE < VERS LE TEST D'EFFACEMENT DE L'
< ECRAN , ET L'ACCES A L'ITEM
< SUIVANT.
PAGE
<
<
< S E Q U E N C E S V I D E O :
<
<
< FONCTION :
< L'ITEM 'S' PERMET DE VISIONNER
< UNE SEQUENCE VIDEO DONT LE NOM
< EST CELUI DE L'ITEM . CE VISIONNAGE
< N'EST POSSIBLE QUE SOUS LE NUMERO DE
< COMPTE :EAO . DE PLUS L'ACCES A LA
< TABLE D'OCCUPATION DES MAGNETOSCOPES
< EST UNE PHASE CRITIQUE INTER-
< UTILISATEURS.
< LE NOM D'UNE SEQUENCE VIDEO EST EN
< FAIT LE NOM DE LA BANDE SUIVI D'UN $ ,
< ET D'UN NOM DE SEQUENCE :
< <NOM-GLOBAL-SEQUENCE>::=<NOM-BANDE>$<NOM-LOCAL-
< SEQUENCE>.
< LE NUMERO DU TELEVISEUR ASSOCIE
< A LA VISU 'NSPOUT' EST NSPOUT-NSPVI1.
<
<
VIDEO: EQU $
LA NVI < A=NOM DU PROCESSEUR A CHARGER.
JMP E34 < VERS L'APPEL DU PROCESSEUR VIDEO.
<
<
< I T E M T Y P E F I L M - D I G I T A L :
<
<
FILMD: EQU $
LA NPROC < RESTAURE A=IINDIC...
ANDI '00FF < A=OCTET1(IINDIC),
JANE E1612X < OK, IL Y A DANS L'OCTET1 UN
< NOM DE PROCESSEUR 'SC'/'SD'.
LA NSC < LORSQUE L'OCTET1='00, ON PREND
< IMPLICITEMENT 'SC'.
E1612X: EQU $
STA NPROC
LA NSC
ANDI 'FF00
OR NPROC < A=NOM DU PROCESSEUR 'SC'/'SD'
< A APPELER POUR CE FILM.
JMP E34 < VERS LE CHARGEMENT DE 'SC'.
PAGE
<
<
< V A L I D A T I O N D E L ' I M P L A N T A T I O N :
<
<
X4: VAL ITEM2-$
ZEROV: EQU ZERO+X4 < ERREUR D'ASSEMBLAGE SI X4<0 ,
< SOIT SI LE PROCESSEUR RECOUVRE
< L'ITEM2.
DZS X4+1
EOT #SIP GEN PROCESSEUR#
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.