IF GIGE,X100,,X100
NMPROC: VAL "GE" < NOM DU PROCESSEUR.
IDP "GE - RELEASE 01/06/1979"
X100: VAL 0
IF GIGE,,X100,
NMPROC: VAL "GI" < NOM DU PROCESSEUR.
IDP "GI - RELEASE 01/06/1979"
X100: VAL 0
IDP "JOHN F. COLONNA"
MULTI: VAL 1 < LORSQUE MULTI#0 , GE/GI
< AUTORISE LES FILIATIONS MULTIPLES
< ENTRE NOEUDS , DU TYPE :
< C0 N1 --> N2 ,
< C1 N1 --> N2 ,...
EOT #SIP DEFINITION ITEM#
EOT #SIP DEF PROCESSEUR#
NOEUD1: EQU BRANCH
WORD GEGRAF < @DE LANCEMENT DE 'OS' (COMPATIBLE
< AVEC 'CALL' : ELLE EST DONNEE
< EN SLO+'10).
WORD 0 < POUR FAIRE +1 SUR $.
PROG
GE: 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 LOCGE
LOC: EQU $
IF GIGE,,X100,
<
< MESSAGE DIVERS :
<
MERR: BYTE '6D;"!"
ASCI "ITEM2 "
X100: VAL 0
<
< D E M A N D E S A C M S 4 :
<
DEMIN: WORD '0101 < DEMANDE D'ENTREE AVEC ECHO.
WORD 0 < @OCTET DU BUFFER.
WORD LNOM < NBRE DE CARACTERES MAX A ENTRER.
DEMOUT: WORD '0202 < DEMANDE DE SORTIE.
IF GIGE,X100,,X100
WORD 0 < @OCTET DU BUFFER.
X100: VAL 0
IF GIGE,,X100,
WORD MERR-ZERO*2 < L'ADRESSE OCTET EST INITIALISEE
< SUR LE MESSAGE D'ERREUR DE
< TYPE DE L'ITEM2.
X100: VAL 0
WORD 7 < 7 CARACTERES DU <NOMC> A SORTIR.
DEMSGN: WORD '0402 < INITIALEMENT UN STORE DE 'GE '
< LUI-MEME.
WORD NOEUD1-ZERO*2 < @BRANCHE D'OVERLAY.
WORD ZERO-NOEUD1+PILE-LTNI-LTNI*2
WORD -1 < LA VALEUR SUIT IMMEDIATEMENT
< LE NOM.
DEMAND: DZS 3 < BLOC DE DEMANDE DE TRAVAIL.
<
< C O N S T A N T E S :
<
LISDEL: WORD 0 < INDICATEUR DE LISTE AVEC OU
< SANS DELETE :
< LISDEL=0 : LISTE SEUL ,
< LISDEL=3=CODE-DELETE-SGN : LISTE
< AVEC DELETE.
IMESS: WORD 0 < INDEX COURANT DU MESSAGE IN.
F3: WORD 0 < STOCKAGE INTERMEDIAIRE DE F3 :
< F3=SIGMA(EOR(I*K(I))).
< (APPROXIMATIVEMENT ????....)
ALITEM: WORD LITEM < LONGUEUR MAX EN OCTETS DU
< CORPS DE L'ITEM.
ALTNI: WORD LTNI < LONGUEUR MAX TOTALE D'UN ITEM.
LOVL: WORD ZERO-NOEUD1+PILE-LTNI-LTNI*2
< LONGUEUR EN OCTETS DES BRANCHES
< D'OVERLAY.
RESTAR: WORD GEGRAF < PRESC SPECIAL DE 'GE'/'GI'.
<
< 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.
IF GIGE,X100,,X100
AI2: WORD ITEM2 < ADRESSE DE ITEM2.
X100: VAL 0
IF GIGE,,X100,
AI2: WORD ITEM1 < A T T E N T I O N : POUR 'GI' ,
< L'ITEM2 EST EN RECOUVREMENT DE
< L'ITEM1 (AFIN DE NE PAS DETRUIRE
< L'ITEM2 QUI CONTIENT LA SAUITE
< DES COMMANDES !!!).
X100: VAL 0
AMESS: WORD MESSAG,X < RELAI VERS LES MESSAGES IN.
APRIM: WORD PRIM,X < RELAI VERS LA TABLE DES PRIMITIVES.
APILE: WORD PILE-1 < VALEUR INITIALE DU REGISTRE K.
<
< R E L A I S D E R O U T I N E S :
<
AOVL: WORD OVL < INTERFACE DE CHARGEMENT DES
< BRANCHES D'OVERLAY.
AGTCAR: WORD GETCAR < ROUTINE D'ACCES A UN CARACTERE.
ASEEK: WORD SEEK < ROUTINE DE RECHERCHE D'NUN
< <NOMC> DANS UNE LISTE.
< (DANS UNE LISTE A 8 ENTREES).
ASEEK1: WORD SEEK1 < ROUTINE DE RECHERCHE D'UN
< <NOMC> DANS UNE LISTE A 16
< ENTREES.
ASP2: WORD SP2 < ROUTINE POUR FAIRE DES SVC.
ASP3: WORD SP3 < ROUTINE DE CALCUL DE L'ADRESSE
< DE L'ENTREE DANS UNE LISTE.
ACHKR: WORD CHKR < RESTAURATION DE LA RACINE DU
< CATALOGUE LORS DES LISTE-DELETE.
IF GIGE,,X100,
ABORTI: WORD ABORT < ERREUR DE TYPE DE L'ITEM2.
<
< 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>...
STOGS: WORD '000A < ENVOI <NOMC> EN ZDC.
WORD VALZDC-ZERO*2
WORD LONZDC
WORD 'FFC0
GETGS: WORD '0008 < ACCES A L'ACQUIITEMENT ZDC.
WORD VALZDC-ZERO*2
WORD ZDC2-VALZDC*2
WORD 'C000
X100: VAL 0
<
<
< B U F F E R D E T R A V A I L :
<
<
LMESS: VAL 4 < NBRE DE CARACTERES MAX DE MESSAG.
MESSAG: DZS LMESS/2
< (COMMANDES ET RACINE CATALOGUE)
IF GIGE,,X100,
<
<
< C O N S T A N T E S D E S I M U L A T I O N
< D E S S V C I N :
<
<
ASP4: WORD SP4 < ROUTINE DE SIMULATION SVC-IN.
AGI: WORD ITEM2+LTN,X < RELAI VERS LE CORPS DE ITEM2.
XGI: WORD 0 < INDEX COURANT DE L'ITEM2.
AGID: WORD 0 < REALI DYNAMIQUE VERS LE BUFFER
< DONT ON SIMULE LE SVC IN.
NCP: WORD NBCAR*NBLIG < NBRE DE CARACTERES MAX PAR PAGE.
NGE: ASCI "GE" < NOM DE LA BRANCHE A APPELER
< EN CAS DE DEBORDEMENT ITEM2.
VOUT: WORD '0202 < POUR GENERER UNE DEMANDE
< DE SORTIE SUR LE TERMINAL.
X100: VAL 0
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
IF GIGE,,X100,
<
<
< S I M U L A T I O N D E S S V C I N :
<
<
< FONCTION :
< CETTE ROUTINE QUI DISTINGUE 'GE'
< DE 'GI' PERMET DE DEROUTER LES SVC IN
< (SUR PHIN) , ET DE RECUPERER LES MESSAGES
< EQUIVQLENTS DANS L'ITEM2 . LE CARACTERE
< DE SEPARATION DE MESSAGE UTILISE
< EST ';' (ASSIMILE A L'EOT PAR LE
< SIMULATEUR ET D'AILLEURS RENVOYE
< PAR LUI A LA PLACE DES ';').
<
<
< ARGUMENT :
< A=@DEMANDE A CMS4.
<
<
SP4: EQU $
PSR W < SAVE W.
LR A,W < W=@DE LA DEMANDE COURANTE.
LA 0,W < ACCES A LA FONCTION CONTENUE
< DANS LA DEAMNDE.
LR A,Y < SAVE EVENTUELLEMENT LE MOT0
< DE LA DEMANDE DANS Y.
ANDI 'F < A=FONCTION DEMANDEE.
CPI 2 < EST-CE UNE LECTURE ????
JGE E300 < NON , ON L'EXECUTE DONC.
<
< SIMULATION DES FONCTIONS DE LECTURE ('00 ET '01) :
<
LB 2,W < B=COMPTE D'OCTETS DEMANDES.
LXI -1 < PREPARATION DE L'INDEX DU
< BUFFER DONT ON SIMULE LE SVC IN.
LA 1,W < A=@OCTET DU BUFFER.
TBT 15 < AFIN DE SAVOIR SI ON COMMENCE
< LE BUFFER SUR UNE FRONTIERE
< DE MOT OU PAS ????
ADCR X < X=-1 SI ON COMMENCE A UNE
< FRONTIERE DE MOT ET X=0 SINON.
SLRS 1 < CONVERSION EN UNE ADRESSE-MOT.
SBT 0 < POSITIONNEMENT DU BIT INDEX.
STA AGID < GENERATION DU RELAI VERS LE BUFFER
< DONT ON SIMULE LE SVC IN.
LY XGI < Y=INDEX COURANT VERS L'ITEM2.
<
< BOUCLE DE RECUPERATION DES CARACTERES DANS L'ITEM2 :
<
E301: EQU $
ADRI 1,X < PROGRESSION DE L'INDEX-BUFFER.
XR X,Y < X=INDEX-ITEM2 , Y=INDEX-BUFFER.
LR X,A < A=INDEX DE L'ITEM2.
CP NCP < VALIDATION EN DEBORDEMENT ITEM2.
JGE E304 < LORS DES DEBORDEMENTS , ON
< ABANDONNE LE PROCESSEUR 'GI'.
LBY &AGI < A=CARACTERE COURANT ITEM2.
ADRI 1,X < PROGRESSION DE L'INDEX COURANT
< DE L'ITEM2.
XR X,Y < X=INDEX-BUFFER , Y=INDEX ITEM2.
CPI ";" < TEST DE FIN DE MESSAGE ???
JNE E302 < NON.
LAI '04 < DANS LE CAS DE LA RENCONTRE DU
< CARACTERE ';' , ON LE REMPLACE
< PAR UN 'EOT' , ET ON FAIT
< UNE FIN DE MESSAGE.
E302: EQU $
STBY &AGID < MISE DU CARACTERE COURANT DANS
< LE BUFFER DESTINATAIRE.
JE E303 < CAS DES FIN DE MESSAGE <EOT>.
ADRI -1,B < SINON , DECOMPTE DU COMPTE
< OCTETS DEMANDES.
CPZR B < EST-CE FINI ???
JNE E301 < NON , ON CONTINUE LA SIMULATION.
<
< CAS DES FIN DE MESSAGE (POUR
< EOT OU POUR ANNULATION DU COMPTE OCTETS) :
<
E303: EQU $
ADRI 1,X < X=NBRE DE CARACTERES DONT
< L'ENTREE A ETE SIMULEE.
STX 2,W < MISE EN PLACE DU COMPTE OCTETS
< REEL DE LA DEMANDE.
STY XGI < SAVE LE NOUVEL INDEX DE L'ITEM2.
LY 0,W < SAVE LE MOT0 DE LA DEMANDE
< DANS Y.
LA VOUT
STA 0,W < LA DEMANDE D'ENTREE EST
< TRANSFORMEE EN UNE DEMANDE
< DE SORTIE.
<
< EXECUTION DES OPERATIONS DE SORTIE :
<
E300: EQU $
LR W,A < RESTAURATION : A=@DEMANDE.
SVC 0 < ENVOI D'1NE DEMANDE DE SORTIE.
STY 0,W < RESTAURE EVENTUELLEMENT LE
< MOT0 DE LA DEMANDE (CAS IN).
PLR W < RESTAURE W.
RSR < RETOUR ...
<
< TRAITEMENT DES DEBORDEMENTS D'ITEM2 :
<
E304: EQU $
ADRI -1,K < RATTRAPAGE DE LA PILE K ,
< PAR PURE HYGIENE ....
GOGE: EQU $ < RETOUR A 'GE'.
LA AN1
LR A,W < W=@NOEUD1.
LA NGE < NOM DE LA BRANCHE A CHARGER
< POUR RETOURNER A 'GE'.
JMP E305 < VERS LA TEANTATIVE DE CHARGEMENT
< DE 'GE'.
<
<
< E R R E U R D E T Y P E D E L ' I T E M 2 :
<
<
ABORT: EQU $
LAD DEMOUT
SVC 0 < ENVOI D'UN MESSAGE D'ERREUR ...
JMP GOGE < ET VERS L'ABORT DE 'GI'.
X100: VAL 0
PAGE
<
<
< T E N T A T I V E S D E C H A R G E M E N T
< D E S B R A N C H E S D ' O V E R L A Y :
< S O U S : S Y S
<
<
< FONCTION :
< CETTE ROUTINE EST APPELEE LORSQU'UNE
< COMMANDE INCONNUE A DESTINATION
< DE 'GE' EST RECONNUE ; ELLE TENTE
< D'APPELER UNE BRANCHE D'OVERLAY
< QUI AURAIT SON NOM ET QUI SERAIT
< SOUS LE NUMERO DE COMPTE ':SYS'.
<
<
< B R A N C H E S D ' O V E R L A Y R E C O N N U E S :
<
<
< ?? HELP ,
< EX EDITEUR EXAUSTIF DES NOMS SOUS UN <ACN>
< ED EDITEUR ALPHA-NUMERIQUE ,
< GR EDITEUR GRAPHIQUE ,
< G2 EDITEUR GRAPHIQUE BI-DIMENSIONNEL ,
< G3 EDITEUR GRAPHIQUE TRI-DIMENSIONNEL ,
< GV EDITEUR GRAPHIQUE ET VIDEO TRI-DIMENSIONNEL ,
< DE SIMULATEUR DE FLOPPY SUR VISUS ,
< TV GENERATEUR DE VIDEO SYNTHETIQUE ,
< TI GENERATEUR VIDEO SYNTHETIQUE INTERPRETATIF ,
< RE REGIE VIDEO SIMULEE SUR LA BAIE DE COMMUTATION ,
< SO ORGUE ELECTRONIQUE ,
< VG CONVERTISSEUR VIDEO --> GRAPHIQUE ,
< SC GESTION DE L'ENCHAINEMENT DES IMAGES VIDEOS ,
< GC ASSEMBLEUR+CHARGEUR
< 3D RUNNER ET PROCESSEUR GRAPHIQUE ,
< KA ITEM A CARTE , ET IMPRIMANTE ,
< SA SAVE/RESTORE TOUTE VALEUR DU SGN ,
< EI PARCOURS AUTOMATIQUE DU GRAPHE ,
< GO INITIALISATION DU PARCOURS DU GRAPHE ,
< GE GESTION DU GRAPHE ,
< PH ANALYSEUR DU FRANCAIS ,
< SE SERVICES DIVERS.
< VI PROCESSEUR DES ITEMS VIDEOS ,
<
<
< ARGUMENT :
< W=@NOEUD1.
IF GIGE,,X100,
< A=NOM DE LA BRACHE A CHARGER POUR L'ENTRY E305.
X100: VAL 0
<
<
< RESULTAT :
< X#0 : LA BRANCHE DEMANDEE N'EXISTE PAS SOUS :SYS.
<
<
USE W,NOEUD
LOADP: EQU $
LA MESSAG < ACCES AUX 2 CARACTERES DE LA
< COMMANDE NON RECONNUE.
IF GIGE,,X100,
E305: EQU $ < ENTRY RESERVEE PUR LES DEBOR-
< DEMENTS DE L'ITEM2 EN SIMULATION.
X100: VAL 0
STA NOMC < QUE L'ON MET EN K1 ET K2.
ANDI 'FF < A=K2.
CPI '04 < TEST D'UNE COMMANDE FAITE D'UN
< SEUL CARACTERE ; EN EFFET
< SI LA RACINE DE L'ARBRE DU
< SYSTEME A ETE INITIALISE PAR
< SYSCAT , LES NOMS D'1 SEUL
< CARACTERE EXISTENT TOUS , ET
< ON VA DONC AVOIR UN RETOUR OK !!!
JE E710 < ERREUR : UN SEUL CARACTERE.
LAI '20
SBT 2 < A=' '.
STA NOMC+1 < K3 ET K4 SONT MIS A 'SPACE'.
STA NOMC+2 < K5 ET K6 SONT MIS A 'SPACE'.
LAI '04 < <EON>.
STBY NOMC+3 < K7='EOT'.
LA LOVL
STA DEMSGN+2 < MAJ DU COMPTE D'OCTETS DE DEMSGN.
LR W,A < A=@MOT DE NOEUD1.
ADR A,A < A=@OCTET DE NOEUD1.
STA DEMSGN+1 < MAJ DE DEMSGN AVEC L'@OCTET.
LAI 6 < NVP DE 'LOAD' SOUS :SYS.
< MENT DE BRANCHES SOUS :SYS.
STBY DEMSGN < MISE EN PLACE DU NVP DE CHARGE-
LAI GE-ZERO
WORD '1EB5 < RESTAURE LE PRESC IMPLICITE.
<
< A T T E N T I O N :
< CETTE SOLUTION N'EST PAS INFAILLIBLE :
< IL SUFFIT QU'UN ALT-MODE APPARAISSE ENTRE
< LA RESTAURATION DU PRESC , ET LE SVC AU
< SGN DE AOVL , POUR QUE 'GE'/'GI' PARTE EN
< <TRAPPE> !!!.
<
LAD DEMSGN < A=@DEMSGN.
BSR AOVL < TENTATIVE DE CHARGEMENT DE
< LA BRANCHE D'OVERLAY.
<
< RETOUR EN ERREUR : X#0 :
< (LA BRANCHE EST INCONNUE)
<
E710: EQU $ < CAS DES COMMANDES D'UN SEUL
< CARACTERE.
LA RESTAR
WORD '1EB5 < EN CAS D'ERREUR , ON RESTAURE
< LE PRESC SPECIAL DE 'GE'/'GI'.
RSR < RETOUR EN ERREUR.
PAGE
<
<
< R A Z D ' U N N O E U D :
<
<
< FONCTION :
< CETTE ROUTINE REMET A '0000 LES
< 'LNOEUD' MOTS D'UN NOEUD.
<
<
< ARGUMENT :
< W=@NOEUD.
<
<
< RESULTAT :
< X=0 (OK).
<
<
USE W,NOEUD
RAZN: EQU $
STZ TOPN < RAZ DU DERNIER MOT DU NOEUD.
LR W,B < B=@NOEUD (=@RECEPTEUR).
LR W,A
ADRI 1,A < A=@NOEUD+1 (=@EMETTEUR).
LXI LNOEUD-1 < NBRE DE MOTS RESTANT A RAZER.
MOVE < RAZ (HABILE , N'EST-IL PAS !?!!?)
RSR < RETOUR AVEC X=0 (OK).
PAGE
<
<
< R E C U P E R A T I O N N A T U R E I T E M :
<
<
< FONCTION :
< CETTE ROUTINE RECUPERE LA NATURE
< DE L'ITEM , TELLE QU'ELLE A ETE
< PRECISEE DANS IINDIC PAR LE PROCESSEUR
< QUI L'A CREE . SI L'ITEM N'A PAS ENCORE
< ETE CREE (SI CE N'EST PAR 'I+') ,
< ELLE RENVOIE 'V' POUR 'VIDE'.
<
<
< ARGUMENT :
< W=@ITEM COURANT.
<
<
< RESULTAT :
< B=CARACTERE ASCI (NATURE).
<
<
USE W,HITEM
TYPI: EQU $
LBY IINDIC < RECUPERATION DE L'OCTET0 DE
< IINDIC (NATURE DE L'ITEM).
JANE E160 < OK , L'ITEM N'EST PAS VIDE.
LAI "V" < SI L'ITEM EST VIDE (MAIS
< EXISTANT) , ON RENVOIE 'V' ,
< POUR 'VIDE'.
E160: EQU $
LR A,B < B=NATURE EXPRIMEE EN ASCI.
RSR
PAGE
<
<
< I N D I C A T E U R T Y P E - I T E M :
<
<
< FONCTION :
< CETTE ROUTINE MEMORISE DANS LA
< ZONE POINTEE PAR W , QU'ELLE A
< LE TYPE-ITEM.
<
<
< ARGUMENT :
< W=@ZONE (NOEUD OU ITEM).
<
<
USE W,NOEUD
INDICI: EQU $
LAI 'C9 < CARACTERE 'I' AVEC EB0=1.
JMP E50 < VERS LE TRONC COMMUN NOEUD/ITEM.
PAGE
<
<
< I N D I C A T E U R T Y P E - N O E U D :
<
<
< FONCTION :
< CETTE ROUTINE MEMORISE DANS LA
< ZONE POINTEE PAR W , QU'ELLE A
< LE TYPE-NOEUD.
<
<
< ARGUMENT :
< W=@NOEUD COURANT.
<
<
USE W,NOEUD
INDICN: EQU $
LAI 'CE < CARACTERE 'N' AVEC EB0=1.
E50: EQU $
LXI 7 < INDEX DU CARACTERE SUIVANT
< L'<EON> DE <NOMC>.
STBY &ANOMC
LXI 0 < RETOUR OOK.
RSR
PAGE
<
<
< T E S T T Y P E I T E M O U N O E U D :
<
<
< FONCTION :
< CETTE ROUTINE TESTE QUE LA ZONE
< PINTEE PAR W A BIEN LE TYPE QUI
< EST CONTENU DANS LE 2EME CARACTERE
< DE LA COMMANDE PRECEDENTE.
<
<
< ARGUMENT :
< W=@ZONE NOEUD/ITEM.
<
<
< RESULTAT :
< X=0 : TYPE ATTENDE ,
< #0 : NON-TYPE ATTENDE.
<
<
USE W,NOEUD
CHKIN: EQU $
LA F3 < RECUPERATION DU 2EME CARACTERE
< DE LA COMMANDE PRECEDENTE
< (SOIT -I , SOIT -N).
ORI '80 < ON FORCE LE BIT0 DU CARACTERE.
JMP E70 < VERS LE TEST ...
<
<
< T E S T T Y P E - N O E U D :
<
<
< FONCTION :
< CETTE ROUTINE TESTE QUE LA ZONE POINTEE
< PAR W A BIEN LE TYPE-NOEUD.
<
<
< ARGUMENT :
< W=@NOEUD.
<
<
< RESULTAT :
< X=0 : TYPE-NOEUD ,
< #0 : PAS TYPE-NOEUD.
<
<
USE W,NOEUD
CHKN: EQU $
LAI 'CE
E70: EQU $ < ENTRY 'TETS TYPE-ITEM'.
SBT 5 < A=VALEUR ATTENDUE :
< OCTET0=<EON> ,
< OCTET1='N'/'I'+'80.
SB NOMC+3 < LE RESULTAT (A) SERA NUL SI
< ON EST BIEN EN PRESENCE D'UN NOEUD
< OU D'UN ITEM.
LR A,X < X=0 : ON EST BIEN EN PRESENCE
< DU TYPE TESTE.
RSR
<
<
< T E S T T Y P E - I T E M :
<
<
< FONCTION :
< CETTE ROUTINE TESTE QUE LA ZONE
< POINTEE PAR W A BIEN LE TYPE-ITEM.
<
<
< W=@NOEUD.
<
<
< RESULTAT :
< X=0 : LA ZONE A BIEN LE TYPE-ITEM ,
< #0 : ET BIEN NON.
<
<
CHKI: EQU $
LAI 'C9
JMP E70 < VERS LE TRONC COMMUN 'NOEUD'
< ET 'ITEM'.
PAGE
<
<
< T E S T I T E M A T T A C H E A U N O E U D :
<
<
< FONCTION :
< CETTE ROUTINE TESTE SI UN
< ITEM EST ATTACHE AU NOEUD
< COURANT.
<
<
< ARGUMENT :
< W=@NOEUD COURANT.
<
<
< RESULTAT :
< X=0 : PAS OU PLUS D'ITEM ATTACHE ,
< =1 : ITEM ATTACHE AU NOEUD.
<
<
USE W,NOEUD
CHKNI: EQU $
LXI 0 < PAS OU PLUS D'ITEM A PRIORI.
LA INDIC < ACCES AUX INDICATEURS.
TBT BITEM < TEST DU BIT 'ITEM ATTACHE'.
ADCR X < X=1 SI UN ITEM EST ATTACHE.
RSR
PAGE
<
<
< A C C E S A U S G N :
<
<
< FONCTION :
< CES MODULES ACCEDENT AU SGN POUR
< UNE FONCTION DETERMINEE (TEST ,
< DELETE , ECRIRE) ; DE PLUS ELLE
< METTE COMME @OCTET DANS DEMSGN ,
< L'ADRESSE DU NOEUD COURANT.
<
<
< ARGUMENT :
< W=@NOEUD.
<
<
< RESULTAT :
< X=CONDITIONS DE RETOUR DU SGN.
<
<
<
< E N T R I E S I T E M :
<
USE W,HITEM
WSGNI: EQU $
LAI 4 < 'STORE' <NOMC>+<VALEUR>.
LY LRITEM < LONGUER REELLE EN OCTETS
< DU CORPS DE L'ITEM.
JMP E82
LSGNI: EQU $
LBY DEMSGN < LE NVP DE DEMSGN EST DEJA POSI-
< TIONNE :
< NVP=5 : LOAD SOUS L'<ACN> ,
< NVP=6 : LOAD SOUS :SYS.
JMP E200 < VERS LA RESTAURATION DU NVP ; SA
< VALEUR (5 OU 6) VA RESTER
< INCHANGEE.
TSGNI: EQU $
LAI 5 < 'LOAD' & 'TEST' <VALEUR> A
< PARTIR DE <NOMC>.
E200: EQU $ < ENTRY NVP DEJA POSITIONNE.
LY ALITEM < LONGUEUR MAXIMALE EN OCTETS
< DU CORPS DE L'ITEM.
E82: EQU $ < TRONC COMMUN AUX 3 FONCTIONS.
ADRI XWORK2,Y
ADRI XWORK2,Y < LONGUEUR TOTALE EN OCTETS DE
< L'ITEM (EN-TETE+CORPS).
JMP E81 < VERS LE TRONC COMMUN ITEM/NOEUD.
<
< E N T R I E S N O E U D :
<
USE W,NOEUD
WSGN: EQU $
LAI 4 < 'STORE' <NOMC>+<VALEUR>.
JMP E10
TSGN: EQU $
LAI 5 < FONCTION 'LOAD' (& 'TEST')
< <VALEUR> A PARTIR DE <NOMC>.
JMP E10
DSGN: EQU $
DSGNI: EQU DSGN
LAI 3 < FONCTION 'DELETE' <NOMC>+
< <VALEUR>.
E10: EQU $ < TRONC COMMUN AUX 3 FONCTIONS.
LYI 2*LNOEUD < NBRE D'OCTETS D'UN NOEUD.
E81: EQU $ < TRONC COMMUN NOEUD/ITEM.
< ON A ICI :
< A=NVP D'ACCES AU SGN ,
< Y=NBRE D'OCTETS DEMANDES.
STY DEMSGN+2 < MISE EN PLACE DU COMPTE D'OCTETS.
E400: EQU $ < ENTRY LISTAGE AVEC DELETE.
STBY DEMSGN < MISE EN PLACE DU NVP EXECUTANT
< LA FONCTION DEMANDEE.
LR W,A < A=@MOT DU NOEUD COURANT.
ADR A,A < A=@OCTET DU NOEUD COURANT.
STA DEMSGN+1 < MISE EN PLACE DE L'@OCTET DU
< NOEUD COURANT DANS DEMSGN.
LAD DEMSGN
SVC 0 < ENVOI DE LA DEMANDE AU SGN (CMS4)
E401: EQU $ < ENTRY LISTAGE SANS DELETE.
RSR < X=CONDITIONS DE RETOUR ...
<
<
< D E L E T E L O R S D E S L I S T A G E S :
<
<
DSGNG: EQU $
LA LISDEL < RECUPERATION DE L'INDICATEUR.
JAE E401 < C'EST UN LISTAGE SANS DELETE.
JMP E400 < C'EST UN LISTAGE AVEC DELETE ,
< ET A=3=FONCTION DE DELETE SGN.
<
<
< C H O I X D U D E L E T E L O R S D E S L I S T E S :
<
<
< ARGUMENT :
< B=VALEUR A DONNER A LISDEL.
<
<
< FAIT UN RETOUR EN ERREUR AVEC X=1 !!!!
<
<
INDLD: EQU $
STB LISDEL < SAVE L'INDICATEUR.
LX IMESS < X=INDEX COURANT DU BUFFER.
< A NOTER : X=1#0 !!!!
LBY &AMESS < A=TYPE ATTENDE ('I'/'N').
STA F3 < SAUVEGARDE TEMPORAIRE DU 2EME
< CARACCTERE DE LA COMMANDE
< COURANTE DANS F3.
RSR < RETOUR INDIFFERENT ....
PAGE
<
<
< S E L E C T I O N N U M E R O D E C O M P T E :
<
<
< ARGUMENT :
< B="L" : UN CHARGEMENT SOUS <ACN> A ETE DEMANDE ,
< ="U" : UN CHARGEMENT SOUS :SYS A ETE DEMANDE.
<
<
< RESULTAT :
< DEMSGN=5 : 'LOAD' SOUS <ACN> ,
< =6 : 'LOAD' SOUS :SYS.
<
<
STACN: EQU $
LAI 5 < NVP=5 A PRIORI ('LOAD' SOUS
< L'<ACN> DE L'UTILISATEUR).
TBT 11+16 < DISCRIMINATION DU MODE DE
< CHARGEMENT DEMANDE :
< "L"='4C : BIT11(B)=0 ,
< "U"='55 : BIT11(B)=1.
ADCR A < A=6 SI "U" ('LOAD' SOUS :SYS).
STBY DEMSGN < MISE EN PLACE DU NVP DU 'LOAD'
<A VENIR DANS DEMSGN.
RSR < RETOUR INDIFFERENT (X) , CAR
< APPEL EN SEQUENTIEL.
PAGE
<
<
< A C C E S A U T E R M I N A L :
<
<
< FONCTION :
< FAIRE DES ENTREES-SORTIES SUR
< LA CONSOLE UTILISATEUR.
< NOMIN : ENTRER <NOM> ,
< EDITN : EDITER <NOM>.
< NOMOUT : EDITER <NOMC> ,
<
<
< ARGUMENT :
< W=@NOEUD COURANT.
<
<
< RESULTAT :
< X=CONDITIONS DE RETOUR DE CMS4.
<
<
USE W,NOEUD
NOMIN: EQU $ < ENTREE.
LYI XNOM < DEPLACEMENT DE <NOM> DANS NOEUD.
IF GIGE,,X100,
LAI LNOM < A=LONGUEUR MAX D'UN NOM.
STA DEMIN+2 < RESTAURE LE COMPTE D'OCTETS
< DE LA DEMANDE DEMIN.
X100: VAL 0
LAD DEMIN < A=@DEMANDE IN.
JMP E11
EDITN: EQU $
LYI XNOM < DEPLACEMENT DE <NOM> DANS NOEUD.
LXI 3 < ACCES A LA LONGUEUR DANS <NOMC>.
LBY &ANOMC < A=LONGUEUR DE <NOM>.
ADRI -'30,A < QUE L'ON CONVERTIT D'ASCI
< EN BINAIRE.
JAE E80 < CAS DU NOM VIDE ('EOT' TRANSFORME
< EN ' 0 ' PAR LE CODAGE.
JMP E55 < VERS L'EDITION.
NOMOUT: EQU $ < SORTIE.
LYI XNOMC < DEPLACEMENT DE <NOMC> DANS NOEUD.
LAI 6 < 6 OCTETS A EDITER POUR <NOMC>.
E55: EQU $ < TRONC COMMUN EDITN & NOMOUT.
STA DEMOUT+2 < MAJ COMPTE D'OCTET DE DEMOUT.
LAD DEMOUT < A=@DEMANDE OUT.
E11: EQU $ < TRONC COMMUN IN & OUT.
ADR W,Y < Y=@MOT DE <NOM>/<NOMC>.
ADR Y,Y < Y=@OCTET DE <NOM>/<NOMC>.
XR A,W < W=@DEMANDE IN / OUT.
STY 1,W < MISE EN PLACE DE L'ADRESSE-
< OCTET DU BUFFER (B).
XR A,W < A=@DEMANDE ; W=@NOEUD.
IF GIGE,X100,,X100
SVC 0 < ENVOI DE LA DEMANDE A CMS4.
X100: VAL 0
IF GIGE,,X100,
BSR ASP4 < SIMULATION DANS LE CSA DES
< SVC IN.
X100: VAL 0
RSR < X=CONDITIONS DE RETOUR DE CMS4.
PAGE
IF GIGE,,X100,
<
<
< E N V O I < N O M C > E N Z D C :
<
<
STOZDC: EQU $
<
< TRANSFERT DE <NOMC> :
<
LXI XXNOMC < (X)=INDEX DES CARACTERES,
STOZ1: EQU $
LBY &ANOMC
STBY &AZDC < TRANSFERT DE <NOMC>...
ADRI -1,X
CPZR X
JGE STOZ1
<
< ATTENTE DE LIBERTE DE LA ZDC :
<
LAD GETGS
STOZ2: EQU $
SVC 0 < LECTURE DE 'VALZDC' :
CPZ VALZDC < ALORS ???
JNE STOZ2 < PAS LIBRE...
<
< ENVOI EN ZDC :
<
DC VALZDC < VALEUR DE SYNCHRONISATION,
LAD STOGS
SVC 0 < ET ENVOI...
RSR
X100: VAL 0
PAGE
<
<
< M I S E E N P L A C E D E
< L ' I T E M C O U R A N T :
<
<
< RESULTATS :
< W=@ITEM1 OU ITEM2 ,
< X=0 (OK).
<
<
USE W,NOEUD
IC1: EQU $
LA AI1 < A=@ITEM1.
JMP E12
IC2: EQU $
LA AI2 < A=@ITEM2.
JMP E12
PAGE
<
<
< M I S E E N P L A C E D U
< N O E U D C O U R A N T :
<
<
<
< RESULTAT :
< W=@NOEUD1 OU NOEUD2.
< X=0 (OK).
<
<
USE W,NOEUD
NC1: EQU $
LA AN1 < A=@NOEUD1.
JMP E12
NC2: EQU $
LA AN2 < A=@NOEUD2.
E12: EQU $
LR A,W < W=@NOEUD1/NOEUD2.
<
< RETOUR OK :
<
E80: EQU $
LXI 0 < RETOUR OK.
RSR
PAGE
<
<
< V A L I D A T I O N D E L A R A C I N E
< D U C A T A L O G U E :
<
<
< FONCTION :
< CETTE ROUTINE RECUPERE DANS 'MESSAG' LA RACINE
< DEMANDEE POUR LE CATALOGUE ; ELLE LA DEPLACE
< DANS <NOMC> DU NOEUD COURANT , EN LA
< VALIDANT.
< CETTE RACINE NE PEUT AVOIR QUE 3
< CARACTERES AU MAXIMUM (0 EST LE MINIMUM...) ,
< ET SE TERMINER PAR UN 'EOT'.
<
<
< ARGUMENT :
< W=@NOEUD COURANT.
<
<
< RESULTAT :
< X=0 : RACINE CORRECTE ,
< #0 : RACINE INCOREECTE ,
< IMESS=DEMSGN+2=NBRE DE CARACTERES DE
< LA RACINE SI ELLE N'EST PAS
< VIDE , 1 SI ELLE EST VIDE
< ('EOT' SEUL).
<
<
USE W,NOEUD
CHKR: EQU $
LXI 0 < INDEX DE AMESS.
LYI 4 < POUR LE TEST DE FIN.
<
< BOUCLE DE RECUPERATION DE LA RACINE :
<
E94: EQU $
LBY &AMESS
STBY &ANOMC < ENVOI DANS <NOMC>.
CPI '04 < EST-CE UN 'EOT' ???
JE E95 < OUI , ARRET DE LA RECUPERATION.
ADRI 1,X < PROGRESSION DE L'INDEX.
CPR X,Y
JNE E94 < IL RESTE DES CARACTERES A
< RECUPERER.
<
< CAS OU ON A TESTE 4 CARACTERES SANS ATTEINDRE
< UN 'EOT' : ERREUR : RACINE ERRONNEE :
< (CODE X=4)
<
E96: EQU $
RSR < RETOUR.
<
< CAS D'UN 'EOT' :
<
E95: EQU $
STX IMESS < SAVE LONGUEUR INITIALE DANS
< IMESS POUR TEST DE PARCOURS DE
< L'ARBRE.
CPZR X < L''EOT' ETAIT-IL AU 1ER RANG ...
JNE E97 < NON , X EST BON.
LXI 1 < DANS LE CAS D'UN 'EOT' AU 1ER
< RANG , ON FORCE X=1.
E97: EQU $
STX DEMSGN+2 < INITIALISATION DE DEMSGN.
LR W,A
ADR A,A < A=@OCTET DU NOEUD COURANT.
STA DEMSGN+1 < INITIALISATION DE DEMSGN.
LXI 0 < EN VUE D'1N RETOUR OK.
JMP E96
PAGE
<
<
< R E C O N S T I T U T I O N D U C A T A L O G U E :
<
<
< FONCTION :
< CETTE ROUTINE RECHERCHE DANS
< LE CATALOGUE DES NOMS DE CE NUMERO
< DE COMPTE LES NOMS DE 6 CARACTERES DU
< TYPE :
< <K1><K2><K3><K4><K5><K6><EOT> ,
< LORSQU'IL EN A TROUVE UN , IL
< REND LA MAIN ; IL L'A RECUPERE
< POUR ALLER CHERCHER LE SUIVANT.
< CATAL1 : ENTREE A UTILISER LA 1ERE FOIS ,
< CATAL2 : ENTREE A UTILISER LES FOIS SUIVANTE.
<
<
< ARGUMENT :
< W=@NOEUD COURANT.
<
<
< RESULTAT :
< X=0 : UN <NOMC> A ETE DECOUVERT ,
< #0 : PAS OU PLUS DE <NOMC>.
<
<
USE W,NOEUD
<
< 1 E R E E N T R Y :
<
CATAL1: EQU $
LAI 9 < NVP=NEXT-SERIE.
BSR ASP2 < DEMANDE D'ACCES AU NEXT-SERIE.
JAE E101 < LE NEXT-SERIE EXISTE , OK.
CPI 5
JNE E105 < AUTRE ERREUR , SORTIE ; A
< NOTER : X#0 !!!!
<
< CAS OU LE NEXT-SERIE N'EXISTE PAS :
<
E102: EQU $
LAI 8 < NVP=NEXT-PARALLELE.
BSR ASP2 < DEMANDE D'ACCES AU NEXT-PARALLELE
JAE E402 < OK , LE SUIVANT PARALLELE
< EXISTE.
CPI 5 < SINON , QUELLE EST LA NATURE
< DU RETOUR ????
JE E103 < LE NEXT PARALLELE N'EXISTE PAS ,
< A NOTER : X#0 !!!!
<
< AUTRES CAS : CERTAINEMENT LE NOM
< N'EXISTE PAS PARCEQUE ON EST EN TRAIN
< DE FAIRE UN DELETE SIMULTANEMENT , ON
< VA DONC REINITIALISER LE PARCOURS DU
< CATALOGUE : C'EST PLUS SIMPLE ...
<
BSR ACHKR < RESTAURATION DE LA RACINE DU
< CATALOGUE ET REINITIALISATIONS.
JMP CATAL1 < ET C')ST REPARTI COMME
< AU COMMENCEMENT ....
<
< CAS OU LE NEXT-PARALLELE EXISTE :
<
E402: EQU $
LX DEMSGN+2 < X=LONGUEUR COURANTE DU MOT
< ARGUMENT.
LBY &ANOMC < ACCES AU NEXT-PARALLELE.
ADRI -1,X
STBY &ANOMC < QUE L'ON MET A LA PLACE DU
< DERNIER CARACTERE DU NOM.
E104: EQU $
LA DEMSGN+2
CPI 7
JNE CATAL1 < ON N'A PAS ENCORE ATTEINT LA
< LONGUEUR FATIDIQUE DE 7 LETTRES.
<
< CAS OU LA LONGUEUR COURANTE EST 7 :
<
LBY NOMC+3 < ACCES AU CARACTERE K7.
CPI '04 < EST-CE UN 'EOT' ???
JNE E102 < NON , LE NOM COURANT N'EST
< DONC PAS UN NOMC.
<
< CAS D'UN 'EOT' COMME K7 . IL Y A
< PRESOMPTION DE <NOMC> :
<
LXI 0 < SORTIE OK (POSSIBILITE DE <NOMC>)
<
< SORTIE DE LA ROUTINE :
<
E105: EQU $
RSR
<
< CAS OU LE NEXT-PARALLELE N'EXISTE PAS :
<
E103: EQU $
DC DEMSGN+2 < RETOUR D'UN RANG VERS LA RACINE.
LA DEMSGN+2
CP IMESS < EST-ON DE RETOUR SUR LA RACINE ???
JE E105 < OUI , SORTIE DE TYPE FIN : A
< NOTER QUE X=5#0 !!!!
JMP E102 < VERS LA RECHERCHE DU NEXT-
< PARALLELE.
<
< E N T R I E S S U I V A N T E S :
<
CATAL2: EQU $
LAI 6
STA DEMSGN+2 < DANS LE CAS DES ENTREES SUIVANTES
< ON REINITIALISE LA LONGUEUR
< COURANTE A 6 , CAR ON ETAIT SORTI
< AVEC 7.
JMP E102 < VERS LA RECHERCHE DU NEXT-
< PARALLELE.
<
< CAS OU LE NEXT-SERIE EXISTE :
<
E101: EQU $
IC DEMSGN+2 < ON S'ELOIGNE D'UN CRAN DE
< LA RACINE.
JMP E104 < VERS LA RECHERCHE DU NEXT-SERIE.
PAGE
<
<
< A C C E S A U S G N P O U R C A T A L O G U E :
<
<
< FONCTION :
< CETTE ROUTINE MET EN PLACE
< LE NVP DEMANDE , ENVOIE LA
< DEMANDE AU SGN , ET ENFIN RECUPERE
< LES CONDITIONS DE RETOUR DU SGN.
<
<
< ARGUMENT :
< A=NVP DEMANDE.
<
<
< RESULTAT :
< A=X=CONDITIONS DE RETOUR DU SGN.
<
<
SP2: EQU $
STBY DEMSGN < MISE EN PLACE DU NVP.
LAD DEMSGN
SVC 0 < ENVOI DE LA DEMANDE AU SGN.
LR X,A < A=X=CONDITIONS DE RETOUR.
RSR
PAGE
<
<
< G E N E R A T I O N D E S R E L A I S
< V E R S N O M E T N O M C :
<
<
< FONCTION :
< CETTE ROUTINE UTILISEE SURTOUT
< POUR LES ITEMS GENERE LES RELAIS
< ANOMC ET ANOM VERS NOMC ET NOM.
<
<
< ARGUMENT :
< W=@ZONE A INITIALISER.
<
<
< RESULTAT :
< X=0 (OK).
<
<
USE W,NOEUD
GANOM: EQU $
LR W,A < A=@ZONE.
SBT 0 < MISE EN PLACE DU BIT INDEX.
ADRI XNOMC,A < DEPLACEMENT DE (W) VERS NOMC.
STA ANOMC < MISE EN PLACE DE ANOMC.
ADRI XNOM-XNOMC,A < DEPLACEMENT DE (W) VERS NOM.
STA ANOM < MISE EN PLACE DE ANOM.
JMP E80 < VERS UN RETOUR OK.
PAGE
<
<
< I N I T I A L I S A T I O N L R I T E M :
<
<
< ARGUMENT :
< W=@ITEM.
<
<
< RESULTAT :
< X=0 (OK).
<
<
USE W,HITEM
ILONG: EQU $
STZ LRITEM < RAZ DE LRITEM.
USE W,NOEUD < FAUT ETRE PRUDENT ....
JMP E80 < VERS UN RETOUR OK.
PAGE
IF GIGE,X100,,X100
<
<
< M O U V E M E N T I T E M C O U R A N T :
<
<
< FONCTION :
< CETTE ROUTINE DEPLACE L'ITEM
< COURANT VERS L'AUTRE ITEM.
< MOVE1 : ITEM1-->ITEM2 ,
< MOVE2 : ITEM2-->ITEM1.
<
<
< ARGUMENT :
< W=@ITEM COURANT.
<
<
< RESULTAT :
< X=0 (OK).
<
<
USE W,HITEM
MOVE1: EQU $
MOVE2: EQU $
LA LRITEM < ACCES A LA LONGUEUR RELLE EN
< OCTETS DU CORPS DE L'ITEM COURANT.
SLRS 1 < CONVERSION EN MOTS.
ADRI XWORK2,A < AJOUTONS LA LONGUEUR MOTS
< DE L'EN-TETE DE L'ITEM.
LR A,X < X=NBRE DE MOTS A DEPLACER.
LA AI1 < A=@ITEM1.
LB AI2 < B=@ITEM2.
CPR A,W < L'ITEM COURANT EST-IL ITEM1.
JE E91 < OUI : MOVE1 : ITEM1-->ITEM2.
XR A,B < NON : MOVE2 : ITEM2-->ITEM1.
E91: EQU $
MOVE < MOVE ITEM COURANT.
RSR < RETOUR OK (X=0).
PAGE
<
<
< E C H A N G E I T E M 1 E T I T E M 2 :
<
<
< RESULTAT :
< X=0 (OK) ,
< DETRUIT W.
<
<
MOVEX: EQU $
PSR C < SAVE L'@PRIMITIVE COURANTE DU
< LANGAGE INTERPRETATIF.
LX ALTNI < NBRE DE MOTS A DEPLACER.
LA AI1
LR A,C < C=@ITEM1.
LA AI2
LR A,W < W=@ITEM2.
<
< BOUCLE D'ECHANGE :
<
E92: EQU $
LA 0,C < ACCES A UN MOT DE ITEM1.
LB 0,W < ACCES A UN MOT DE ITEM2.
STA 0,W < ECHANGE.
STB 0,C < ECHANGE.
ADRI 1,C < MOT SUIVANT DE ITEM1.
ADRI 1,W < MOT SUIVANT DE ITEM2.
JDX E92
PLR C < RESTAURE L'@PRIMITIVE DU
< LANGAGE INTERPRETATIF.
RSR < RETOUR OK (X=0).
X100: VAL 0
PAGE
<
<
< T E S T E X I S T E N C E D ' U N
< M E M B R E D E L A F A M I L L E :
< E T A C C E S A S O N < N O M > :
<
<
< FONCTION :
< CETTE ROUTINE TESTE L'EXISTENCE D'UN
< MEMBRE DE LA FAMILLE (PERES+FILS)
< SI CE MEMBRE EXISTE , ELLE MET
< CELUI-CI DANS NOEUD2.
<
<
< ARGUMENTS :
< W=@NOEUD1 ,
< B=NUMERO DE 0 A 15 DU MEMBRE.
<
<
< RESULTAT :
< X=0 , SI LE MEMBRE EXISTE ,
< B<--(B)+1 DANS TOUS LES CAS.
<
<
USE W,NOEUD
EFAMIL: EQU $
ADRI 1,B < PASSAGE A PRIORI AU MEMBRE
< SUIVANT (A NOTER : B#0).
LR B,X < X=NUMERO DU MEMBRE SUIVANT ,
< A NOTER : X#0 !!!!
LA FAMILY < ACCES A L'OCCUPATION DE LA
< FAMILLE DE NOEUD1.
TBT '1F,X < TEST DU MEMBRE ARGUMENT.
JNC E57 < IL N'EST PAS OCCUPE : RIEN
< A FAIRE , ET ON A : X#0.
<
< CAS OU LE MEMBRE ARGUMENT EST OCCUPE :
<
LR B,Y < SAVE B=MEMBRE SUIVANT DANS Y.
ADRI -1,B < RETOUR SUR LE NUMERO REEL DU
< MEMBRE ARGUMENT.
LR B,A
ADR A,A
ADR B,A
ADR W,A
ADRI PERES-NOEUD,A < A=@<NOMC>(MEMBRE)=@EMETTEUR.
LR W,B
ADRI LTN,B < B=@<NOMC>(NOEUD2)=@RECEPTEUR.
LXI 3 < 6 CARACTERES A DEPLACER.
MOVE < DEPLACEMENT DU <NOMC> DU
< MEMBRE ARGUMENT DE NOEUD1 ,
< VERS NOEUD2 ; AU RETOUR : X=0 !!!
LAI '04 < <EON>.
STBY LTN+3,W < MISE D'UN <EON> EN FIN DU
< <NOMC>(MEMBRE-ARGUMENT).
LR Y,B < RESTAURE B=NUMERO DU MEMBRE SUIVANT.
<
< SORTIE DE LA ROUTINE :
<
E57: EQU $
RSR
PAGE
<
<
< T E S T D E F I N D E F A M I L L E :
<
<
< FONCTION :
< CETTE ROUTINE TESTE SI ON A
< EXPLORE TOUTE LA FAMILLE DE
< NOEUD1 , C'EST-A-DIRE LES LISTES
< PERES ET FILS.
<
<
< ARGUMENTS :
< B=NUMERO DU PROCHAIN MEMBRE.
<
<
< RESULTAT :
< X=0 : IL RESTE AU MOINS UN MEMBRE ,
< =1 : LA FAMILLE EST FINIE.
<
<
FFAMIL: EQU $
LXI 0 < IL RESTE AU MOINS UN MEMBRE A
< PRIORI.
TBT 11+16 < TEST : B=16 ???
ADCR X < X=1 SI B=16 (FAMILLE FINIE).
RSR < FACILE ????
PAGE
<
<
< D I S C R I M I N A T I O N P E R E / F I L S :
<
<
< FONCTION :
< CETTE ROUTINE TESTE SI LE
< PROCHAIN MEMBRE DE LA FAMILLE EST
< DANS LA LISTE DES PERES OU DANS
< CELLE DES FILS.
<
<
< ARGUMENT :
< B=NUMERO DU MEMBRE.
<
<
< RESULTAT :
< X=0 : LE MEMBRE EST DANS LA LISTE DES PERES ,
< =1 : LE MEMBRE EST DANS LA LISTE DES FILS.
<
<
DISPF: EQU $
LXI 1 < LISTE DES FILS A PRIORI.
LR B,A < A=NUMERO DU MEMBRE+1.
CPI 9
SBCR X < X=0 : B=1,...,8.
RSR < FACIL , N'EST-IL PAS ?!?!?
PAGE
<
<
< N U M E R O D E S P E R E S E T D E S F I L S :
<
<
< FONCTION :
< SUIVANT SON POINT D'ENTREE CONVERTIT
< D'ASCI EN BINAIRE , OU DE BINAIRE
< EN ASCI LE NUMERO D'UN PERE
< OU D'UN FILS , A PARTIR DU CONTENU DE B.
<
<
< ARGUMENT :
< B=CARACTERE ASCI , OU NUMERO DE 0 A 15.
<
<
< RESULTAT :
< B=NUMERO DE 0 A 15 , OU CARACTERE ASCI.
<
<
NPERE: EQU $
ADRI -'30+1,B < NUMERO DU PERE EN BINAIRE.
JMP E58
NAFILS: EQU $
ADRI '30-1-8,B < NUMERO DU FILS EN ASCI.
JMP E58
NFILS: EQU $
ADRI -'30+1+8,B < NUMERO DU FILS EN BINAIRE.
JMP E58
NAPERE: EQU $
ADRI '30-1,B < NUMERO DU PERE EN ASCI.
<
< SORTIE DE LA ROUTINE :
<
E58: EQU $
LXI 0 < RETOUR OK.
RSR
PAGE
<
<
< C H E C K F A M I L Y :
<
<
< FONCTION :
< CES 2 ROUTINES REGARDENT SI LE NOEUD
< COURANT A ENCORE DE LA FAMILLE
< (PERE(S) OU FILS).
<
<
< ARGUMENT :
< W=@NOEUD COURANT.
<
<
< RESULTAT :
< X=0 : LE NOEUD N'A PLUS DE PERE/FILS.
<
<
USE W,NOEUD
CHKP: EQU $ < CHECK LES PERES ...
LBY FAMILY < ACCES A L'OCCUPATION DES 8
< PERES POSSIBLES.
E21: EQU $ < TRONC COMMUN PERE(S)/FILS.
LR A,X < X=OCCUPATION=0 S'IL N'Y A PLUS
< DE PERE(S)/FILS.
RSR < RETOUR AVEC X.
CHKF: EQU $ < CHECK LES FILS.
LA FAMILY
ANDI 'FF < ACCES A L'OCCUPATION DES 8
< FILS POSSIBLES DU NOEUD.
JMP E21 < VERS LE TRONC COMMUN.
PAGE
<
<
< C H E C K F A M I L Y I T E M :
<
<
< FONCTION :
< CETTE ROUTINE REGARDE SI L'ITEM
< ARGUMENT A DE LA FAMILLE.
<
<
< ARGUMENT :
< W=@NOEUD COURANT.
<
<
< RESULTAT :
< X=0 : PAS OU PLUS DE FAMILLE ,
< #0 : AU MOINS UN PERE.
<
<
USE W,NOEUD
CHKPI: EQU $
LX FAMILY < ACCES A L'OCCUPATION DES PERES
< DE L'ITEM ; SI ELLE EST =0 ,
< C'EST QU'IL N'Y A PLUS DE PERE.
RSR < RETOUR AVEC (X).
PAGE
<
<
< C O N N E X I O N P E R E ---> F I L S :
<
<
< FONCTION :
< CETTE ROUTINE ETABLIT UNE RELATION
< DE TYPE PERE-->FILS ENTRE NOEUD1 (PERE)
< ET NOEUD2 (FILS) . LE FILS A UN NUMERO
< DONNE EN ARGUMENT DE LA DEMANDE
< VU DU PERE , ALORS QUE LE PERE A UN
< NUMERO NON FIXE VU DU FILS.
<
<
< ARGUMENT :
< B=NUMERO DU FILS VU DU PERE EN ASCI.
< W=@NOEUD2 (FILS).
<
<
< RESULTAT :
< X=0 SI OK ,
< =1 SINON , ET ALORS :
< B=CARACTERE ASCI D'ERREUR.
<
<
USE W,NOEUD
CONECT: EQU $
<
< INTERDICTION DES 'AUTO-CONNEXIONS' :
<
LA NOMC < FILS.
CP NOMC-NOEUD-LTN,W < PERE.
JNE E34 < OK , PAS D'AUTO-CONNEXION.
LA NOMC+1 < FILS.
CP NOMC-NOEUD-LTN+1,W
JNE E34 < OK.
LA NOMC+2 < FILS.
CP NOMC-NOEUD-LTN+2,W
JNE E34 < OK.
<
< ERREUR D'AUTO-CONNEXION' :
<
LBI "C" < CARACTERE D'ERREUR.
LXI 1 < RETOUR EN ERREUR.
JMP E32 < SORTIE DE LA ROUTINE.
<
< ACCES AU NUMERO DU FILS :
<
E34: EQU $
LR B,A < A=NUMERO PRESUME DU FILS
< VU DU PERE.
ADRI -'30,A < CONVERSION BINAIRE DU NUMERO.
JAL E30 < ERREUR : NUMERO ERRONE.
CPI 7
JG E30 < ERREUR : NUMERO ERRONE.
LR A,Y < Y=NUMERO DEMANDE POUR LE FILS
< VU DU PERE.
<
< TEST D'OCCUPATION DES PERES DU FILS DEMANDE :
<
LBY FAMILY < OCCUPATION DES PERES DU FILS.
EORI 'FF
JAE E31 < ERREUR : LES 8 PERES
< POSSIBLES SONT OCCUPES.
DBT < X=NUMERO+8 DU 1ER PERE
< DISPONIBLE.
XR X,Y < X=NUMERO DEMANDE POUR LE FILS
< VU DU PERE.
< Y=NUMERO+8 DU 1ER PERE ALLOUE
< AU FILS.
<
< TEST D'OCCUPATION DES FILS DU PERE DEMANDE :
<
< IF MULTI,X100,,X100
IF MULTI,X100,,X100
PSR X,C,W
LR W,C < C POINTE <NOMC>(FILS).
ADRI FILS-NOEUD-LTN,W < W POINTE LA LISTE DES FILS
< DU PERE.
BSR ASEEK < REGARDONS SI PAR HASARD , LE
< FILS DEMANDE N'EST PAS DEJA LE
< FILS DE SON PERE ???
PLR X,C,W
JANE E31 < ET OUI , ERREUR ....
X100: VAL 0
ADRI -LTN,W < CHANGEMENT DE NOEUD COURANT :
< PASSAGE SUR NOEUD1 (PERE).
LA FAMILY < ACCES A LA FAMILLE DU PERE.
TBT 8,X < TEST DU FILS DEMANDE ????
JC E62 < ERREUR : LE FILS DEMANDE
< EXISTE DEJA.
<
< CAS OU LES FAMILLES SONT DISPONIBLES
< POUR L'EXTENSION DEMANDEE :
<
SBT 8,X < OCCUPATION DU FILS (X).
STA FAMILY < MAJ DE LA FAMILLE DU PERE.
<
< MEMORISATION DE <NOMC>(FILS) DANS LE PERE :
<
LAD FILS
BSR ASP3 < B=@<NOMC>(FILS) DANS LE PERE
< =@RECEPTEUR.
LR W,A
ADRI LTN,A < A=@<NOMC>(FILS)=@EMETTEUR.
LXI 3 < 6 CARACTERES A DEPLACER POUR
< <NOMC>.
MOVE < DEPLACEMENT DE <NOMC>(FILS) DANS
< NOEUD1 (PERE).
<
< MEMORISATION DE LA FILIATION DANS LE FILS :
<
ADRI LTN,W < PASSAGE AU NOEUD2 (NOUVEAU
< NOED COURANT).
LBY FAMILY < ACCES A L'OCCUPATION DES
< PERES DU FILS DEMANDE.
LR Y,X < X=NUMERO ALLOUE AU PERE+8.
SBT 0,X < OCCUPATION DU PERE DANS LE FILS.
STBY FAMILY
<
< MEMORISATION DE <NOMC>(PERE) DANS LE FILS :
<
LAD PERES
ADRI -8,X < X=NUMERO DU PERE.
BSR ASP3 < B=@<NOMC>(PERE) DANS LE FILS
< =@RECEPTEUR.
LR W,A
ADRI -LTN,A < A=@<NOMC>(PERE)=@EMETTEUR.
E141: EQU $ < ENTRY CONNEXION ITEM.
LXI 3 < 6 CARACTERES DE <NOMC>.
MOVE < MISE DE <NOMC>(PERE) DANS LE FILS
< A NOTER QU'ON A : X=0 !!!!!
E32: EQU $
< ON A ICI :
< X=CONDITIONS DE RETOUR.
RSR < RETOUR A L'INTERPRETEUR.
<
<
< T R A I T E M E N T D E S E R R E U R S :
<
<
E30: EQU $
LBI "N" < CODE ASCI DE RETOUR.
LXI 1 < RETOUR EN ERREUR.
JMP E32 < SORTIE DE LA ROUTINE.
E62: EQU $
ADRI LTN,W < RETOUR SUR LE FILS (NOEUD2).
E31: EQU $
LBI "O" < CODE ASCI D'ERREUR.
LXI 1 < RETOUR EN ERREU.
JMP E32 < SORTIE DE LA ROUTINE.
PAGE
<
<
< C O N N E X I O N N O E U D ----> I T E M :
<
<
< FONCTION :
< CETTE ROUTINE MEMORISE SI CELA
< EST POSSIBLE , LE <NOMC> DU NOEUD PERE
< DE L'ITEM.
<
<
< ARGUMENT :
< W=@ITEM COURANT.
<
<
< RESULTAT :
< X=0 : OKK ,
< =1 : ERREUR , ET ALORS :
< B=CARACTERE ASCI D'ERREUR.
<
<
USE W,NOEUD
CONI: EQU $
LA FAMILY < ACCES A L'OCCUPATION DES 16
< PERES POSSIBLES DE L'ITEM.
EORI -1 < TEST DE LIBERTE ...
< (INVERSION DES CONVENTIONS)
JAE E31 < DESOLE , MAIS C'EST COMPLET :
< 16 PERES C'EST LE MAXIMUM.
<
< CAS OU UN PERE AU MOINS EST LIBRE :
<
DBT < RECHERCHE DU 1ER PERE LIBRE (X).
RBT 0,X < OCCUPATION DE CE PERE.
EORI -1 < RE-INVERSION DES CONVENTIONS.
STA FAMILY < ET MAJ DE LA FAMILLE DE L'ITEM.
<
< TRANSFERT DE <NOMC>(NOEUD1) DANS
< LE PERE QUE L'ON VIENT D'ALLOUER :
<
LAD PERES < A=@LISTE DES PERES DE L'ITEM.
BSR ASP3 < B=@DU PERE ALLOUE=@RECEPTEUR.
LA AN1 < A=@<NOMC>(NOEUD1)=@EMETTEUR.
JMP E141 < VERS LE MOVE DU <NOMC>.
< (SUR 6 CARACTERES)
PAGE
<
<
< @ E N T R E E D A N S U N E L I S T E :
<
<
< ARGUMENTS :
< A=@DE LA LISTE DE PARENTE ,
< X=NUMERO DU PARENT DONT ON VEUT L'ENTREE.
<
<
< RESULTAT :
< B=@ENTREE DU PARENT DANS LA LISTE.
<
<
SP3: EQU $
LR X,B
ADR B,B
ADR X,B
ADR A,B
RSR
PAGE
<
<
< D E C O N N E X I O N P E R E ----> F I L S :
<
<
< FONCTION :
< CETTE ROUTINE ROMPT LORSQUE
< CELA EST POSSIBLE UNE RELATION
< DE PERE A FILS.
<
<
< ARGUMENT :
< W=@NOEUD2 (FILS).
<
<
< RESULTAT :
< X=0 SI OK ,
< =1 SI ERREUR , ET ALORS :
< B=CARACTERE ASCI D'ERREUR.
<
<
USE W,NOEUD
DECONE: EQU $
<
< RECHERCHE DU PERE PRESUME DU FILS
< DANS LA LISTE DES PERES DE CE FILS ....
<
PSR C < SAVE L'@PRIMITIVE DU PROGRAMME
< INTERPRETATIF.
PSR W < SAVE @NOEUD2 (FILS).
LR W,C
ADRI PERES-NOEUD,W < W POINTE LA LISTE DES PERES
< DU FILS.
ADRI -LTN,C < C POINTE <NOMC>(PERE PRESUME).
BSR ASEEK < RECHERCHE DU PERE PRESUME ????
JAE E43 < ERREUR : NOEUD1 N'EST PAS PERE
< DE NOEUD2 !!!
< ON A ICI :
< W=@<NOMC(PERE)> DANS LA LISTE DES PERES DU FILS.
STZ 0,W < RAZ DU MOT0 DU NOMC DU PERE
< DANS LA LISTE DES PERES DE CE
< FILS POUR INDIQUER QU'IL N'EST
< PLUS PERE ...
LR X,Y < OK : Y=INDEX (0 A 7) DU PERE
< DANS LA LISTE DES PERES DU FILS.
PLR W < RESTAURE W=@NOEUD2 (FILS).
ADRI 1,K < MAIS ON LAISSE W DANS LA PILE.
XR W,C < C POINTE <NOMC>(FILS).
ADRI FILS-NOEUD,W < W POINTE LA LISTE DES FILS
< POSSIBLES DU PERE.
BSR ASEEK < RECHERCHE DU FILS DANS LA LISTE
< DES FILS POSSIBLES DE NOEUD1
< (PERE).
JAE E43 < ERREUR CE N'EST PAS SON FILS ....
< ON A ICI :
< W=@<NOMC(FILS) DANS LA LISTE DES FILS DU PERE.
STZ 0,W < RAZ DU MOT0 DU NOMC DU FILS
< POUR INDIQUER AINSI QU'IL
< N'EST PLUS PERE DE CE FILS ...
<
< OK , ON A RETROUVE LE PERE ET LE FILS :
<
PLR W < RESTAURE W=@NOEUD2 (FILS).
PLR C < RESTAURE L'@ LANGAGE INTERPRETA-
< TIF.
< ON A ICI :
< X=NUMERO DU FILS DANS LA LISTE DES FILS DE NOEUD1 ,
< Y=NUMERO DU PERE DANS LA LISTE DES PERES DE NOEUD2 ,
< W=@NOEUD2 (FILS).
<
< MISE A JOUR DE LA FAMILLE DU FILS :
<
LA FAMILY
XR X,Y < X=NUMERO DU PERE.
TBT 0,X < MAIS CE PERE N'A T'IL PAS ETE
< DEJA DECONNECTE (LA LISTE DES
< PERES/FILS N'ETANT PAS RASEE).
JNC E45 < EFFECTIVEMENT , LA FILIATION
< N'EXISTE PLUS ...
RBT 0,X < SI ELLE EXISTE , ON LA BRISE.
STA FAMILY < MAJ DE LA FAMILLE DU FILS.
<
< MISE A JOUR DE LA FAMILLE DU PERE :
<
ADRI -LTN,W < W=@NOEUD1 (PERE).
XR X,Y < X=NUMERO DU FILS.
LA FAMILY < FAMILLE DU PERE.
TBT 8,X < MAIS EST-CE ENCORE SON FILS ...
< (MEME REMARQUE QUE POUR LE FILS)
JNC E45 < NON , ERREUR DE FILIATION.
RBT 8,X < OK , ON ROMPT CETTE FILIATION ...
STA FAMILY < MAJ DE LA FAMILLE DU PERE.
ADRI LTN,W < RETOUR SUR W=@NOEUD2.
E143: EQU $ < ENTRY DECONNEXION ITEM.
LXI 0 < RETOUR OK.
<
< SORTIE DE LA ROUTINE :
<
E44: EQU $
< ON A ICI :
< W=@NOEUD2 ,
< X=CONDITIONS DE RETOUR ,
< ET B=CARACTERE ASCI SI X#0.
RSR
<
< TRAITEMENT DES ERREURS :
<
E43: EQU $
PLR W < RESTAURE W=@NOEUD2.
PLR C < RESTAURE LA BASE DU LANGAGE ...
E45: EQU $
LBI "D" < ERREUR DE DECONNEXION.
LXI 1 < RETOUR EN ERREUR.
JMP E44 < SORTIE.
PAGE
<
<
< D E C O N N E X I O N N O E U D ----> I T E M :
<
<
< FONCTION :
< CETTE ROUTINE ROMPT LA PATERNITE DE
< NOEUD1 POUR L'ITEM COURANT.
<
<
< ARGUMENT :
< W=@ITEM COURANT.
<
<
< RESULTAT :
< X=0 : OK ,
< =1 : ERREUR , ET LAORS :
< B=CARACTERE ASCI D'ERREUR.
<
<
USE W,NOEUD
DECONI: EQU $
<
< RECHERCHE DU <NOMC>(NOEUD1)
< DANS LA LISTE DES PERES DE L'ITEM
< COURANT :
<
PSR C,W < SAVE LES BASES C ET W.
LA AN1
LR A,C < C=@<NOMC>(NOEUD1)=@DU NOM
< CHERCHE DANS LA LISTE.
ADRI PERES-NOEUD,W < W=@DE LA BASE DE LA LISTE DES
< PERES DE L'ITEM COURANT.
BSR ASEEK1 < RECHERCHE DU PERE (LISTE A
< 16 ENTREES).
JAE E43 < ERREUR BIZARRE : LE PERE N'A
< APS ETE RETROUVE.
<
< OK , ON A RETOUVE LE PERE :
<
STZ 0,W < ON TUE LA RELATION DE L'ITEM
< VERS SON NOEUD PERE.
PLR C,W < RESTAURE LES BASES C ET W.
<
< MISE A JOUR DE LA FAMILLE DE L'ITEM :
<
LA FAMILY
< ON A ICI :
< X=NUMERO DU PERE DE -8 A 7.
TBT 8,X < TEST DE L'OCCUPATION.
JNC E45 < ERREUR DE PLUS EN PLUS BIZARRE.
RBT 8,X < OK , LIBERATION DE L'ENTREE
< QU'OCCUPAIT LE NOEUD1 (PERE).
STA FAMILY < MAJ DE LA FAMILLE DE L'ITEM.
JMP E143 < VERS LA SORTIE.
PAGE
<
<
< R E C H E R C H E D ' U N < N O M C > :
<
<
< FONCTION :
< CETTE ROUTINE PARCOURT UNE LISTE
< BASEE PAR W , A LA RECHERCHE
< D'UN <NOMC> BASE PAR C.
<
<
< ARGUMENT :
< C=BASE FIXE DU <NOMC> CHERCHE ,
< W=BASE VARIABLE INITIALISEE SUR LE DEBUT DE LISTE.
<
<
< RESULTAT :
< A=0 : <NOMC> NON TROUVE ,
< #0 : <NOMC> TROUVE ,
< X=INDEX DE 0 A 7 DU <NOMC> DANS LA LISTE SI OK.
< =INDEX DE -8 A 7 DANS LE CAS DE SEEK1.
<
<
SEEK1: EQU $
LXI -16 < LA LISTE A 16 ENTREES DE 3 MOTS.
JMP E40 < ET C'EST PARTI ...
SEEK: EQU $
LXI -8 < LA LISTE A 8 ENTREES DE 3 MOTS.
E40: EQU $
LA 0,C
CP 0,W
JNE E41 < NON ENCORE TROUVE.
LA 1,C
CP 1,W
JNE E41 < NON ENCORE TROUVE.
LA 2,C
CP 2,W
JAE $ < E R E U R P R O G R A M M E ....
JE E42 < <NOMC> A ETE TROUVE.
<
< CAS OU <NOMC> N'EST PAS ENCORE TROUVE :
<
E41: EQU $
ADRI 3,W < PASSAGE SUR L'ENTREE SUIVANTE DE
< LA LISTE .(3 MOTS PAR ENTREE).
JIX E40 < SUIVANTE.
LAI 0 < A=0 : <NOMC> N'A PAS ETE TROUVE.
<
< SORTIE DE LA ROUTINE :
<
E42: EQU $
ADRI 8,X < X EST CONVERTI EN UN INDEX
< DE 0 A 7 (=8 SI A=0).
RSR < RETOUR.
PAGE
<
<
< I N V E R S I O N D E B I T E M :
<
<
< ARGUMENT :
< W=@NOEUD.
<
<
USE W,NOEUD
IBITEM: EQU $
LA INDIC < ACCES AUX INDICATEURS.
IBT BITEM < INVERSION DE BITEM.
STA INDIC < MAJ DES INDICATEURS.
LXI 0 < RETOUR OK.
RSR
PAGE
<
<
< D E P L A C E M E N T D U < N O M C >
< D E L ' I T E M D A N S L E N O E U D 1 :
<
<
< ARGUMENT :
< W=@ITEM COURANT.
<
<
NITEM1: EQU $
LR W,A < A=@<NOMC>(ITEM)=@EMETTEUR.
LB AN1 < B=@NOEUD1.
ADRI ITEM-NOEUD,B < B=@ITEM(NOEUD1)=@RECEPTEUR.
E142: EQU $
LXI 4 < ON DEPLACE LES 6 CARACTERES
< DU <NOMC>+<EON>.
< (<EON> MIS AU CODAGE...).
MOVE < AU RETOUR , ON : X=0.
RSR < RETOUR OK : X=0.
PAGE
<
<
< D E P L A C E M E N T D U < N O M C >
< D E L ' I T E M D E N O E U D 1
< V E R S N O E U D 2 :
<
<
< ARGUMENT :
< W=@NOEUD1.
<
<
NITEM2: EQU $
LR W,B
ADRI LTN,B < B=@<NOMC>(ITEM)=@RECEPTEUR.
E144: EQU $
LR W,A
ADRI ITEM-NOEUD,A < A=@<NOMC>(ITEM) DANS LE
< NOEUD1=@EMETTEUR.
JMP E142 < VERS MOVE NOEUD1-->NOEUD2.
PAGE
<
<
< D E P L A C E M E N T D U < N O M C >
< D E L ' I T E M D E N O E U D 1
< V E R S L ' I T E M C O U R A N T :
<
<
< ARGUMENT :
< W=@NOEUD1.
<
<
NITEM3: EQU $
LB AI2 < B=@<NOMC>(ITEM2)=@RECEPTEUR.
JMP E144 < VERS LA RECUPERATION DE L'EMETTEUR
PAGE
PROG
<
<
< G E S T I O N D U G R A P H E :
<
<
< FONCTION :
< 'GE'/'GI' GERENT LES GRAPHES D'ITEMS ,
< MAIS :
< 1- 'GE' FAIT SES ENTREES SUR NVP='01 ,
< 2- 'GI' SIMULE SES ENTREES A PARTIR DE ITEM2.
<
<
WORD NCOM < VALEUR INITIALE DU REGISTRE C :
< @NOEUD INITIAL DU PROGRAMME
< INTERPRETATIF DE GESTION
< DU GRAPHE.
WORD LOC+'80 < VALEUR INITIALE DU REGISTRE L.
WORD NOEUD1 < VALEUR INITIALE DU REGISTRE W ,
< POUR PERMETTRE LA GENERATION
< DE LA BRANCHE D'OVERLAY 'GE '.
GEGRAF: EQU $
LRP K
ADRI -1,K < K POINTE SUR LA VALEUR INITIALE
< DU REGISTRE L.
PLR C,L,W < INITIALISATION DE L SUR LE
< LOCAL , DE C SUR LE NOEUD
< INITIAL DU PROGRAMME DE GESTION
< DU GRAPHE , ET DE W SUR LE
< NOEUD1 POUR LA GENERATION
< DE LA BRANCHE 'GE '.
LB APILE
LR B,K < INITIALISATION DU REGISTRE K.
STZ MODCAL,W < CA Y EST , J'AI ENFIN REUSSI
< A METTRE LA REMISE A 0
< EVENTUELLE DE MODCAL DANS 'GE' ...
IF GIGE,,X100,
<
< VALIDATION DU TYPE DE L'ITEM2 :
<
LXI IINDIC-HITEM-LTN*2
LBY &AGI < A=TYPE DE L'ITEM2.
CPI "T" < EST-CE UN TEXTE ???
JE OKI2 < OUI , ON Y VA !!!
BR ABORTI < ET NON , ON S'EN VA ...
OKI2: EQU $
X100: VAL 0
LA RESTAR
WORD '1EB5 < MISE EN PLACE DHUN PRESC SPECIAL
< A 'GE'/'GI' ; EN EFFET LE
< PRESC IMPLICITE ('12) EST
< SITUE DANS UNE ZONE EN
< GENERAL ECRASEE LORS DES
< OPERATIONS SUR LE GRAPHE !!!
LXI 0 < ON NE SAIT JAMAIS ....
JMP LOOP < VERS LA BOUCLE DE L'INTERPRETEUR.
PAGE
<
<
< I N T E R P R E T E U R D E G E S T I O N
< D E S P R I M I T I V E S D E
< T R A V A I L S U R L E G R A P H E :
<
<
< F O R M A T D E S P R I M I T I V E S :
<
< OCTET0=FONCTION (NOM DE LA PRIMITIVE) ,
< BIT0=1 (TOUJOURS) ,
< BIT1=0 : MOT2 (ET EVENTUELLEMENT MOT3)
< PRESENT(S).
< =1 : L'EXECUTION EST SEQUENTIELLE
< (ON PASSE A LA PRIMITIVE SUIVANTE
< EN FAISANT +2 SUR LA BASE C).
< OCTET1=ARGUMENT1 ,
< (ARGUMENT1 INCHANGE SI OCTET1='FF)
< MOT1=ARGUMENT2 ,
< MOT2=@PRIMITIVE SUIVANTE EN CAS D'ERREUR (IL
< FAUT BIT1(MOT0)=0) ,
< MOT3=@PRIMITIVE SUIVANTE SI OK (IL FAUT :
< BIT1(MOT0)=0).
<
< F O R M A T D ' U N E S O U S - G R A M M A I R E :
<
< MOT0: POINT D'ENTREE : CONTIENT L'@ DE LA
< PRIMITIVE D'APPEL 'PS' ,
< MOTS SUIVANTS : SUITE DE PRIMITIVES ,
< MOTN : PRIMITIVE DE RETOUR 'PR' ,
< MOTN+1 : @MOT0 (=@POINT D'ENTREE).
<
<
<
PR: VAL 0 < NOM DE LA PRIMITIVE+ARGUMENT1.
BSEQ: VAL 1 < BIT INDICATEUR DE PRIMITIVE
< SEQUENTIELLE.
ARG2: VAL 1 < ARGUMENT2.
ADER: VAL 2 < @PRIMITIVE SUIVANTE SI ERREUR.
ADOK: VAL 3 < @PRIMITIVE SUIVANTE SI OK.
GRIN: VAL ARG2 < @ENTRY D'UNE SOUS-GRAMMAIRE.
<
<
< FONCTION ARGUMENT1 ARGUMENT2
<
< PA GOTO.
<-----------------------------------------------------------------------
< PC (????) @ROUTINE CALL.
<-----------------------------------------------------------------------
< PM @MESSAGE,X IMPRESSION MESSAGE :
< OCTET0(MESSAGE)=
< LONGUEUR DU MESSAGE.
<-----------------------------------------------------------------------
< PT CARACTERE-ASCI TEST-CARACTERE.
<-----------------------------------------------------------------------
< PI LONGUEUR-MAX. ENTREE-MESSAGE.
<-----------------------------------------------------------------------
< PF RETOUR-CCI.
<-----------------------------------------------------------------------
< PS @SOUS-GR APPEL D'UNE SOUS-
< GRAMMAIRE D'@ : ARG2.
<-----------------------------------------------------------------------
< PB RETOUR D'UNE SOUS-
< GRAMMAIRE DE POINT
< D'ENTREE D'ADRESSE
< &ARG2.
<
<
< UTILISATION DES REGISTRES :
< X=NOM DES PRIMITIVES , ET
< =CONDITION D'EXECUTION DES PRIMITIVES (=0 SI OK) ,
< W=@NOEUD COURANT DU GRAPHE ,
< C=@PRIMITIVE COURANTE ,
< B=ARGUMENT1.
<
<
< T A B L E D E L ' I N T E R P R E T E U R :
<
<
PRIM: WORD PRIMA;PRIMC;PRIMM;PRIMT;PRIMI
WORD PRIMF
WORD PRIMS;PRIMR
NP: VAL $-PRIM < NBRE DE PRIMITIVES.
<
< P R I M I T I V E S A A D R E S S E ( S ) :
<
PA: VAL 0+'80 < PRIMITIVE 'GOTO'.
PC: VAL 1+'80 < PRIMITIVE 'CALL'.
PM: VAL 2+'80 < PRIMITIVE 'PRINT'.
PT: VAL 3+'80 < PRIMITIVE 'TEST'.
PI: VAL 4+'80 < PRIMITIVE 'IN'.
PF: VAL 5+'80 < PRIMITIVE 'CCI'.
PS: VAL 6+'80 < APPEL D'UNE SOUS-GRAMMAIRE.
PB: VAL 7+'80 < RETOUR D'UNE SOUS-GRAMMAIRE.
<
< P R I M I T I V E S S E Q U E N T I E L L E S :
<
PAS: VAL PA+'40 < 'GOTO' SEQUENTIEL.
PCS: VAL PC+'40 < 'CALL' SEQUENTIEL.
PMS: VAL PM+'40 < 'PRINT' SEQUENTIEL.
PTS: VAL PT+'40 < 'TEST' SEQUENTIEL.
PIS: VAL PI+'40 < 'IN' SEQUENTIEL.
PFS: VAL PF+'40 < 'CCI' SEQUENTIEL (???).
PSS: VAL PS+'40 < 'SOUS-GRAMMAIRE' SEQUENTIEL.
PBS: VAL PB+'40 < 'RETOUR' SEQUENTIEL.
<
<
< R E T O U R D E S P R I M I T I V E S :
<
<
LOOPB: EQU $
< ON A ICI :
< B=ARGUMENT1 PRECEDENT , OU AUTRE CHOSE ,
< X=CONDITION DE RETOUR DE LA PRIMITIVE (0 SI OK).
LA PR,C < RECUPERATION DES BITS 0 & 1
< DE LA PRIMITIVE QUE L'ON VIENT
< D'EXECUTER.
ADRI ADER-PR,C < AU CAS OU LA PRIMITIVE ETAIT
< SEQUENTIELLE.
TBT BSEQ < TEST DU BIT SEQUENTIEL.
JC LOOP < LA PRIMITIVE ETAIT SEQUENTIELLE.
<
< CAS D'UNE PRIMITIVE A ADRESSE(S) :
<
ADRI ADOK-ADER,C < AU CAS OU LE RETOUR SERAIT OK ,
< ET QUE ADOK SERAIT ABSENTE.
CPZR X < COMMENT CELA S'EST-IL PASSE ????
JE E14 < BIEN , ET VOUS ???
ADRI ADER-ADOK,C < CAS D'UN RETOUR EN ERREUR ,
< ON PASSE SUR ADER.
E14: EQU $
LA 0,C < RECUPERATION DE L'ADRESSE DE
< LA PRIMITIVE SUIVANTE.
JAL LOOP < EN FAIT , CETTE ADRESSE EST
< ABSENTE (BIT0=1) , C'EST LE
< PR DE LA PRIMITIVE SUIVANTE
< QUE L'ON VIENT DE RECUPERER ,
< FAISONS DONC DU SEQUENTIEL.
LR A,C < SINON : C=@PRIMITIVE SUIVANTE.
<
<
< B O U C L E D E L ' I N T E R P R E T E U R :
<
<
LOOP: EQU $
LBY PR,C < ACCES AU NOM DE LA PRIMITIVE
< COURANTE.
ANDI 'F < RECUPERATION NOM PRIMITIVE.
CPI NP < VALIDATION DU NOM.
JL $+2 < OK.
ACTD < E R R E U R P R O G R A M M E.
PSR X < SAVE EVENTUELLEMENT LES CCONDI-
< TIONS DE RETOUR DE LA PRIMITIVE
< PRECEDENTE.
LR A,X < X=NOM DE LA PRIMITIVE.
LA PR,C
ANDI 'FF
CPI 'FF
JE E20 < ARGUMENT1='FF : ON LAISSE
< B INCHANGE.
LR A,B < B=ARGUMENT1.
E20: EQU $
LA &APRIM < A=@EXECUTION DE LA PRIMITIVE (X).
PLR X < RESTAURE X=CONDITIONS DE RETOUR
< DE LA PRIMITIVE PRECDENTE.
PSR A < EMPILE @EXECUTION DE LA
< PRIMITIVE (X).
RSR < EXECUTION DE LA PRIMITIVE.
<
<
< P R I M I T I V E ' G O T O ' :
<
<
PRIMA: EQU $
LXI 0 < RETOUR OK.
JMP LOOPB < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
< P R I M I T I V E ' A P P E L S O U S - G R A M M A I R E '
<
<
PRIMS: EQU $
LA ARG2,C
XR A,C < A=@PRIMITIVE 'PS' ,
< C=@POINT D'ENTREE DE LA SOUS-
< GRAMMAIRE.
STA 0,C < SAVE @PRIMITIVE 'PS' DANS LE
< POINT D'ENTREE (MOT0 DE LA
< SOUS-GRAMMAIRE).
ADRI 1,C < C=@DE LA 1ERE PRIMITIVE DE
< LA SOUS-GRAMMAIRE.
JMP LOOP < VERS LHACCES A LA 1ERE PRIMITIVE;
< A NOTER QUE LE 'LOOPB' DE LA
< PRIMITIVE 'PS' NE SERA FAIT QU'
< A L'OCCASION DU 'PR' DE FIN
< DE LA SOUS-GRAMMAIRE.
<
<
< P R I M I T I V E ' R E T O U R ' :
<
<
PRIMR: EQU $
< ON A ICI :
< X=CONDITIONS DE RETOUR DE LA SOUS-GRAMMAIRE ,
< QUI SERA UTILISE POUR CALCULER LE 'LOOPB'
< DE LA PRIMITIVE D'APPEL 'PS'.
LA &GRIN,C < RECUPERATION DU CONTENU DU
< POINT D'ENTREE.
LR A,C < C=@PRIMITIVE 'PS'.
JMP LOOPB < VERS LE 'LOOPB' DU 'PS'.
< A NOTER QUE X EST INCHANGE ,
< ET CONTIENT LES CONDITIONS DE
< RETOUR DE LA SOUS-GRAMMAIRE !!!!
<
<
< P R I M I T I V E ' C A L L ' :
<
<
PRIMC: EQU $
BSR ARG2,C < APPEL DE LA ROUTINE ARGUMENT2.
JMP LOOPB < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
< P R I M I T I V E ' P R I N T ' :
<
<
PRIMM: EQU $
LAI '02 < FONCTION D'ECRITURE.
SBT 6 < NVP=2 (OUT).
STA DEMAND < MAJ DE LA DEMANDE DE TRAVAIL.
LA ARG2,C < RECUPERATION DE L'@MOT DU MESSAGE
SLLS 1 < A=@OCTET DU MESSAGE.
ADRI 1,A < POUR DEPASSER LA LONGUEUR
< CONTENUE DANS L'OCTET0.
STA DEMAND+1 < MAJ DE LA DEMANDE DE TRVAIL.
LXI 0 < POUR ACCES A OCTET0.
LBY &ARG2,C < RECUPERATION DE LA LONGUEUR
< DU MESSAGE (OCTET0).
LR A,X < X=COMPTE OCTETS DU MESSAGE.
LR B,A < A=ARGUMENT1 ,
CPI '20 < ARGUMENT1 EST-IL UN CARACTERE
< ASCI ????
JL E15 < NON , IL N'EST DONC PAS INSERE
< DANS LE MESSAGE.
STBY &ARG2,C < QUE L'ON MET EN DERNIER
< CARACTERE DU MESSAGE.
E15: EQU $ < ENTRY 'MESSAGE IN'.
< ON A ICI :
< X=COMPTE D'OCTETS.
STX DEMAND+2 < MAJ DE LA DEMANDE DE TRAVAIL.
LAD DEMAND
IF GIGE,X100,,X100
SVC 0 < ENVOI DE LA DEMANDE A CMS4.
X100: VAL 0
IF GIGE,,X100,
BSR ASP4 < SIMULATION DES SVC IN.
X100: VAL 0
JMP LOOPB < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
< P R I M I T I V E ' T E S T ' :
<
<
< RESULTAT :
< B=CARACTERE LU.
<
<
PRIMT: EQU $
< ON A ICI :
< B=ARGUMENT1=CARACTERE ATTENDU.
LX IMESS < X=INDEX COURANT DU MESSAGE.
LBY &AMESS < ACCES AU CARACTERE COURANT
< DU MESSAGE.
ADRI 1,X < PROGRESSION DE L'INDEX COURANT
< DU MESSAGE ; A NOTER QU'ON A
< DONC : X#0 !!!!
XR A,B < B=CARACTERE LU ....
CPR A,B < COMPARAISON DU CARACTERE
< COURANT ET DU CARACTERE ATTENDU.
JNE LOOPB < CAS OU (A)#(B) : IL N'Y A PAS
< COINCIDENCE : ALORS : X#0.
< (L'INDEX COURANT DU MESSAGE ,
< IMESS RESTE INCHANGE)
<
< CAS OU : (A)=(B) : COINCIDENCE :
<
STX IMESS < MAJ DE L'INDEX COURANT DU
< MESSAGE.
LXI 0 < RETOUR OK.
JMP LOOPB < VERS LA BOUCLE DE L'INTERPRETEUR
< AVEC X=0 (OK).
<
<
< P R I M I T I V E ' M E S S A G E I N ' :
<
<
PRIMI: EQU $
< ON A ICI :
< B=LONGUEUR MAXIMALE AUTORISEE POUR LE MESSAGE.
STZ IMESS < RAZ DE L'INDEX COURANT DU MESSAGE
LAI '01 < FONCTION LECTURE AVEC ECHO.
SBT 7 < NVP=1 (IN).
STA DEMAND < MAJ DE LA DEMANDE DE TRAVAIL.
LA AMESS
SLLS 1 < A=@OCTET DU MESSAGE.
STA DEMAND+1 < MAJ DE LA DEMANDE DE TRAVAIL.
LR B,X < X=LONGUEUR MAX DU MESSAGE IN.
JMP E15 < VERS L'ENVOI DE LA DEMANDE.
<
<
< P R I M I T I V E ' R E T O U R - C C I ' :
<
<
PRIMF: EQU $
QUIT 1 < REOUR AU CCI.
JMP GEGRAF < CAS OU ON A RECU UN !GO
< SOUS CCI.
PAGE
<
<
< C L E A R T A B L E D E S S Y M B O L E S :
<
<
< DST FNOEUD
DST FNOEUD
< DST FITEM
DST FITEM
PAGE
<
<
< L I S T E D E S C O M M A N D E S :
<
<
< N+ CREATION D'UN NOUVEAU NOEUD ,
< N- DELETE D'UN ANCIEN NOEUD ,
IF GIGE,X100,,X100
< N= EDITION DE LA FAMILLE D'UN NOEUD ,
X100: VAL 0
< NC CONNEXION D'UN NOEUD A UN ITEM ,
< ND DECONNEXION D'UN NOEUD ET D'UN ITEM ,
< C0,...,C7 CONNEXION NOEUD-PERE A NOEUD-FILS ,
< C- RUPTURE DE LA PATERNITE D'UN NOEUD A UN AUTRE ,
< I+ CREATION D'UN NOUVEL ITEM ,
< I- DELETE D'UN ANCIEN ITEM ,
< IL APPEL (LOAD) DE L'ITEM COURANT EN ITEM1 ,
< IU APPEL ITEM COURANT SOUS :SYS ,
< IS REECRITURE (STORE) DE L'ITEM COURANT ITEM1 ,
< LI LISTAGE DES ITEMS ,
< -I LISTAGE DES ITEMS AVEC DELETE ,
< LN LISTAGE DES NOEUDS ,
< -N LISTAGE DES NOEUDS AVEC DELETE ,
IF GIGE,X100,,X100
< I= EDITION DE LA FAMILLE D'UN ITEM ,
< M1 DEPLACEMENT DE L'ITEM1 DANS ITEM2 ,
< M2 DEPLACEMENT DE L'ITEM2 DANS ITEM1 ,
< MX ECHANGE DE ITEM1 ET ITEM2 ,
X100: VAL 0
< XY APPEL DU PROCESSEUR 'XY ' (S'IL EXISTE...).
<
<
< NOTA :
< POUR BAPTISER UN ITEM DONT
< LE CONTENU EST DEJA CREE (PAR EXEMPLE
< PAR ED , AYANT OUBLIE DE FAIRE 'I+') ,
< ON FERA :
< IL<NOM DE BAPTEME> QUI PROVOQUERA ?S , MAIS
< INITIALISERA <NOM> ET <NOMC>
< SANS DETRUIRE LRITEM,IINDIC,... PUIS :
< IS QUI PROVOQUERA LA CREATION ET LE
< RANGEMENT DE <NOM DE BAPTEME>.
PAGE
<
<
< P R O G R A M M E I N T E R P R E T A T I F
< D E G E S T I O N D U G R A P H E :
<
<
<
< M E S S A G E S :
<
M1: BYTE 2;'6D;":";0
M2: BYTE 7;" "
ASCI "NOEUD="
M3: BYTE 6;'6D
ASCI "NOMC= "
M4: BYTE 5;" ";'07;'07
ASCI "??"
M7: BYTE 7;'6D
ASCI "PERE "
M75: BYTE 5;'6D
ASCI "PERE"
M8: BYTE 7;'6D
ASCI "FILS "
M5: EQU M7 < 'PERE'.
M6: EQU M8 < 'FILS'.
M9: BYTE 3;" "
ASCI " "
M10: BYTE 6;'6D
ASCI "ITEM= "
M11: BYTE 8;'6D
ASCI "RACINE= "
M12: BYTE 5;'6D
ASCI "TYP="
<
< E N T R E E C O M M A N D E :
<
NCOM: EQU $
BYTE PM;"!"
WORD M1,X
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N1: BYTE PCS;0
WORD NC1 < MISE DU NOEUD1 COMME NOEUD
< COURANT A PRIORI.
N2: BYTE PIS;2 < LECTURE DE 2 CARACTERES.
WORD 0 < POUR OCCUPER UN MOT.
<
< A N A L Y S E C O M M A N D E :
<
N3: BYTE PT;"N"
WORD 0
N19: BYTE PT;"F"
WORD N4 < DEMANDE DE TRAVAIL GLOBAL
< SUR UN NOEUD.
N21: BYTE PT;"C"
WORD N20 < DEMANDE DE FIN DE TRAVAIL.
N140: BYTE PT;"I"
WORD N22 < CONNEXION PERE-->FILS.
IF GIGE,X100,,X100
N194: BYTE PT;"M"
WORD N141 < TRAVAIL SUR ITEM DEMANDE.
BYTE PT;" "
WORD N195 < DEMANDE DE MOUVEMENT D'ITEM(S).
X100: VAL 0
IF GIGE,,X100,
N194: BYTE PT;" "
WORD N141 < TRAVAIL SUR ITEM DEMANDE.
X100: VAL 0
BYTE PT;"-"
WORD N10 < ERREUR : C'EST PROBABLEMENT LE
< NOM D'UNE BRANCHE SECONDAIRE
< D'OVERLAY QUI A ETE DONNE
N251: BYTE PT;"L"
WORD N262 < DEMANDE DE LISTE+DELETE <NOM>.
WORD NONC < COMMANDE NON RECONNUE : OVERLAY.
WORD N252 < DEMANDE LISTE DE <NOM>.
<
< R E T O U R A U C C I :
<
N20: BYTE PF;0 < RETOUR AU CCI.
<
< T R A V A I L G L O B A L S U R N O E U D :
<
N4: BYTE PCS;0
WORD RAZN < RAZ DE L'ESPACE DU NOEUD1.
N11: BYTE PM;">"
WORD M2,X < ENVOI DU MESSAGE 'NOM>'.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N5: BYTE PCS;0
WORD NOMIN < ENTREE DE <NOM> DU NOEUD.
N6: BYTE PCS;0
WORD CODAGE < CODAGE FABULEUX DE <NOM>.
N7: BYTE PT;"+"
WORD 0
N14: BYTE PT;"-"
WORD N9 < DEMANDE DE CREATION D'UN NOEUD.
IF GIGE,X100,,X100
N57: BYTE PT;"="
WORD N15 < DEMANDE DE DELETE D'UN NOEUD.
N92: BYTE PT;"C"
WORD N58 < DEMANDE DISPLAY D'UN NOEUD
X100: VAL 0
IF GIGE,,X100,
N57: BYTE PT;"C"
WORD N15 < DEMANDE DE DELETE NOEUD.
X100: VAL 0
N93: BYTE PT;"D"
WORD N120 < CONNEXION NOEUD-->ITEM.
WORD NONC < COMMANDE NON RECONNUE : OVERLAY.
WORD N100 < DECONNEXION NOEUD-->ITEM.
<
< C R E A T I O N D ' U N N O E U D :
<
N9: BYTE PCS;0
WORD INDICN < MISE EN PLACE DE L'INDICATEUR
< 'TYPE-NOEUD' ('CE).
N56: BYTE PC;"S"
WORD WSGN < ENVOI DU <NOMC> AU SGN.
WORD N10 < RETOUR EN ERREUR DU SGN.
WORD NCOM < RETOUR AU NIVEAU COMMANDE.
<
< D E L E T E D ' U N N O E U D :
<
N15: BYTE PC;"S"
WORD TSGN < TEST & LOAD LE NOEUD1.
WORD N10 < ERREUR , LE NOEUD N'EXISTE PAS.
N16: BYTE PC;"N"
WORD CHKN < (NOEUD1) EST-IL DE TYPE-NOEUD ????
WORD N10 < NON , ERREUR.
N52: BYTE PC;"I"
WORD CHKNI < TEST SI UN ITEM EST ATTACHE
< AU NOEUD COURANT ???
WORD N10 < ET OUI , ERREUR.
N53: BYTE PC;"P"
WORD CHKP < TEST LE PERES DE NOEUD1.
WORD N10 < ERREUR : IL RESTE UN OU DES
< PERE(S) A NOEUD1.
N17: BYTE PC;"F"
WORD CHKF < TEST LES FILS DE NOEUD1.
WORD N10 < ERREUR : NOEUD1 A ENCORE UN
< OU DES FILS.
N18: BYTE PC;"X"
WORD DSGN < DELETE LE NOEUD.
WORD N10 < ERREUR ????
WORD NCOM < VERS LA COMMANDE SUIVANTE.
IF GIGE,X100,,X100
<
< E D I T I O N D U C O N T E N U D E N O E U D 1 :
<
N58: BYTE PC;"S"
WORD TSGN < TEST & LOAD NOEUD1.
WORD N10 < ERREUR , LE NOEUD DEMANDE
< N'EXISTE PAS.
N59: BYTE PC;"N"
WORD CHKN < TEST DU TYPE DE NOEUD1.
WORD N10 < ERREUR DE TYPE ...
N60: BYTE PM;"="
WORD M3,X < MESSAGE 'NOMC='.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N290: BYTE PC;0
WORD NOMOUT < EDITION DU <NOMC>.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N291: BYTE PC;0
WORD CHKNI < UN ITEM EST-IL CONNECTE ????
WORD N114 < OUI , EDITION DE SON NOM ....
WORD N61 < PAS D'ITEM CONNECTE A CE
< NOEUD ; NOTER B=0 !!!!!!!
N114: BYTE PM;"="
WORD M10,X < MESSAGE 'ITEM='.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N115: BYTE PCS;0
WORD NITEM2 < <NOMC>(ITEM) MIS DANS LE NOEUD2.
N110: BYTE PCS;0
WORD NC2 < NOEUD2 DEVIENT LE NOEUD COURANT.
N111: BYTE PC;"S"
WORD TSGN < TEST & LOAD L'IEM.
WORD N113 < IL N'EXISTE PLUS , ON NE PEUT
< DONC EDITER SON <NOM>.
N112: BYTE PC;0
WORD EDITN < EDITION DE <NOM>(ITEM).
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N113: BYTE PCS;0
WORD NC1 < NOEUD1 REDEVIENT LE NOEUD COURANT
N61: BYTE PC;'FF < B INCHANGE.
WORD EFAMIL < TEST DE L'OCCUPATION DU
< MEMBRE (B) DEMANDE.
WORD N62 < LE MEMBRE N'EST PAS OCCUPE.
WORD N68 < LE MEMBRE (B) EXISTE.
N62: BYTE PC;'FF
WORD FFAMIL <TEST DU FIN DE FAMILLE.
WORD NCOM < ET NON , ON EST AU BOUT DE LA
< FAMILLE , ALLONS VERS LA
< COMMANDE SUIVANTE.
WORD N61 < OK , LE MEMBRE SUIVANT (B)
< EXISTE , ALLONS LE QUERIR.
N68: BYTE PCS;'FF
WORD NC2 < PASSAGE SUR NOEUD2.
N63: BYTE PC;'FF
WORD TSGN < TEST & LOAD DU MEMBRE DEMANDE.
WORD N81 < ERREUR N'EXISTE PLUS !????
WORD N80 < OK , LE MEMBRE EXISTE ...
N81: BYTE PA;"S"
WORD 0
WORD N35 < VERS LA RESTAURATION DE NOEUD1
< ET LE RETOUR EN ERREUR.
N80: BYTE PC;'FF
WORD DISPF < DISCRIMINATION PERES/FILS.
WORD N65 < LE MEMBRE APPARTIENT A LA
< LISTE DES FILS.
<
< EDITION D'UN PERE :
<
N64: BYTE PCS;'FF
WORD NAPERE < CONVERSION DU NUMERO DE MEMBRE
< EN NUMERO ASCI DE PERE.
N66: BYTE PM;'FF
WORD M7,X < EDITION DU MESSAGE PERE.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N69: BYTE PCS;'FF
WORD NPERE < RESTAURATION DU NUMERO DE
< MEMBRE B.
N67: BYTE PM;'FF
WORD M9,X < EDITION DE 3 'SPACE'.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N90: BYTE PC;'FF
WORD EDITN < EDITION DE <NOM> DE CE PERE.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N70: BYTE PC;'FF
WORD NC1 < RETOUR SUR NOEUD1.
WORD 0 < POUR OCCUPER UN MOT.
WORD N62 < VERS L'ACCES AU MEMBRE SUIVANT ,
< SI EXISTE ET OCCUPE.
<
< EDITION D'UN FILS :
<
N65: BYTE PCS;'FF
WORD NAFILS < CONVERSION DU NUMERO DE MEMBRE
< EN UN NUMERO DE FILS ASCI.
N71: BYTE PM;'FF
WORD M8,X < EDITION DU MESSAGE FILS.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N73: BYTE PCS;'FF
WORD NFILS < RESTAURATION DU NUMERO DE
< MEMBRE (B).
N72: BYTE PM;'FF
WORD M9,X < EDITION DE 3 'SPACE'.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N91: BYTE PC;'FF
WORD EDITN < EDITION DE <NOM> DE CE FILS.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
WORD N70 < VERS LE RETOUR A NOEUD1.
X100: VAL 0
<
< C O N N E X I O N P E R E ----> F I L S :
< E T D E C O N N E X I O N :
<
N22: BYTE PCS;0
WORD RAZN < RAZ DU NOEUD1 (PERE).
N25: BYTE PM;">"
WORD M5,X < ENVOI DU MESSAGE 'PERE'.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N26: BYTE PCS;0
WORD NOMIN < ENTREE DE <NOM>(PERE).
N27: BYTE PCS;0
WORD CODAGE < CALCUL DE <NOMC>(PERE).
N28: BYTE PC;"P"
WORD TSGN < LOAD & TEST LE PERE (NOEUD1).
WORD N10 < PERE INCONNU ....
N29: BYTE PC;"N"
WORD CHKN < TEST LE TYPE DU PERE ???
WORD N10 < ERREUR : PAS LE TYPE-NOEUD.
N54: BYTE PCS;0
WORD NC2 < CHANGEMENT DE NOEUD COURANT :
< PASSAGE A NOEUD2 (FILS).
N30: BYTE PCS;0
WORD RAZN < RAZ DU NOEUD2 (FILS).
N31: BYTE PM;">"
WORD M6,X < ENVOI DU MESSAGE 'FILS'.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N32: BYTE PCS;0
WORD NOMIN < ENTREE DE <NOM>(FILS).
N33: BYTE PCS;0
WORD CODAGE < CALCUL DE <NOMC>(FILS).
N34: BYTE PC;"F"
WORD TSGN < TEST & LOAD LE FILS.
WORD N35 < ERREUR : FILS INCONNU ....
WORD N50
N35: BYTE PC;'FF < 'FF CAR ON DOIT TRANSMETTRE LE
< CODE ASCI D'ERREUR.
WORD NC1 < RESTAURATION DE NOEUD1 COMME
< NOEUD COURANT.
WORD 0 < POUR OCCUPER UN MOT.
WORD N10 < VERS LE TRAITEMENT DES ERREURS.
N50: BYTE PC;"N"
WORD CHKN < LE FILS DEMANDE EST-IL DE
< TYPE-NOEUD ????
WORD N35 < NON , ERREUR.
N55: BYTE PT;"-"
WORD 0
WORD N36 < NON , TENTONS UNE CONNEXION.
N51: BYTE PC;0
WORD DECONE < TENTATIVE DE DECONNEXION.
WORD N35 < DECONNEXION IMPOSSIBLE.
WORD N38 < OK
N36: BYTE PTS;0 < ACCES AU 2EME CARACTERE DE LA
< COMMANDE QUELQUE SOIT SA VALEUR.
WORD 0
N37: BYTE PC;'FF < AFIN DE TRANSMETTRE B=NUMERO
< DEMANDE POUR LE FILS.
WORD CONECT < TENTATIVE DE CONNEXION :
< PERE-->FILS.
WORD N35 < ERREUR : CONNEXION IMPOSSIBLE.
N38: BYTE PCS;0
WORD DSGN < DELETE LE FILS (NOEUD2).
N39: BYTE PC;"S"
WORD WSGN < REECRITURE DU NOEUD1 (FILS).
WORD N35 < ERREUR.
N40: BYTE PCS;0
WORD NC1 < RETOUR SUR NOEUD1 (&ERE).
N41: BYTE PC;0
WORD DSGN < DELETE LE PERE.
WORD N42 < OK
WORD N42 < ERREUR.
N42: EQU N56 < VERS LA REECRITURE DU PERE.
<
< C O N N E X I O N I T E M :
<
N120: BYTE PC;"S"
WORD TSGN < TEST & LOAD NOEUD.
WORD N10 < ERREUR : NOEUD INEXISTANT.
N121: BYTE PC;"N"
WORD CHKN < TEST DU TYPE DE NOEUD1.
WORD N10 < ERREUR : PAS TYPE NOEUD.
N122: BYTE PC;"I"
WORD CHKNI < Y-A-T'IL UN ITEM CONNECTE
< A CE NOEUD ???
WORD N10 < ET OUI DEJA UN , ERREUR.
N123: BYTE PCS;0
WORD IC2 < ITEM2 DEVIENT L'ITEM COURANT.
BYTE PCS;0
WORD GANOM < GENERE LES RELAIS ANOM & ANOMC.
N124: BYTE PSS;0
WORD SG1 < APPEL DE LA SOUS-GRAMMAIRE SG1
< POUR : 'ITEM'+NOMIN+CODAGE.
N126: BYTE PC;"S"
WORD TSGNI < TEST & LOAD L'ITEM.
WORD N35 < ERREUR : L'ITEM A DISPARU ....
N127: BYTE PC;"T"
WORD CHKI < ITEM2 A-T'IL LE TYPE ITEM ???
WORD N35 < ERREUR.
BYTE PC;0
WORD CONI < TENTATIVE DE CONNEXION :
< ITEM2-->NOEUD1.
WORD N35 < ERREUR : PLUS DE PERES DISPONIBLES
N128: BYTE PCS;0
WORD NITEM1 < DEPLACEMENT DE <NOMC>(ITEM) DE
< ITEM2 A NOEUD1.
N129: BYTE PCS;0
WORD DSGNI < DELETE ITEM2.
BYTE PC;"S"
WORD WSGNI < ET REECRITURE IMMEDIATE APRES
< MAJ DE LA LISTE DES PERES.
WORD N35 < ERREUR BIZARRE ...
BYTE PCS;0
WORD NC1 < NOEUD1 REDEVIENT LE NOEUD COURANT
N130: BYTE PC;0
WORD IBITEM < MISE DE BITEM DU NOEUD1 A
< 1 POUR MEMORISER LA CONNEXION.
WORD N41
WORD N41 < VERS LE DELETE ET LA REECRITURE
< DU NOEUD1.
<
< D E C O N N E X I O N I T E M :
<
N100: BYTE PC;"S"
WORD TSGN < TEST & LOAD LE NOEUD1.
WORD N10 < ERREUR : N'EXISTE PAS.
N101: BYTE PC;"N"
WORD CHKN < TEST DU TYPE DE NOEUD1.
WORD N10 < ERREUR : CE N'EST PAS LE
< TYPE NOEUD.
N102: BYTE PC;"I"
WORD CHKNI < Y-A-T'IL UN ITEM CONNECTE ???
WORD N310 < OK , ALLONS ROMPRE LA CONNEXION.
WORD N10 < ERREUR : PAS D'ITEM CONNECTE.
N310: BYTE PCS;0
WORD NITEM3 < <NOMC>(ITEM) EST DEPLACE
< DE <ITEM>(NOEUD1) VERS
< <NOMC>(ITEM2).
BYTE PCS;0
WORD IC2 < ITEM2 DEVIENT L'ITEM COURANT.
BYTE PCS;0
WORD GANOM < GENERE LES RELAIS ANOM & ANOMC.
BYTE PC;"S"
WORD TSGNI < TEST & LOAD ITEM2.
WORD N35 < ERREUR : ITEM2 N'EXISTE PLUS ???
BYTE PC;0
WORD DECONI < DECONNEXION ITEM2-->NOEUD1.
WORD N35 < ERREUR BIZARRE ....
WORD N129 < VERS LA MAJ DU NOEUD1.
<
< T R A V A I L G L O B A L S U R I T E M :
<
N141: BYTE PT;"+"
WORD 0
N142: BYTE PT;"-"
WORD N150 < CREATION D'UN ITEM.
BYTE PT;"U"
WORD N143 < DELETE ITEM.
N180: BYTE PT;"L"
WORD N181 < APPEL ITEM SOUS :SYS.
N182: BYTE PT;"S"
WORD N181 < APPEL DE L'ITEM COURANT.
IF GIGE,X100,,X100
N320: BYTE PT;"="
WORD N183 < DEMANDE DE REECRITURE DE L'ITEM
< COURANT.
WORD NONC < COMMANDE NON RECONNUE : OVERLAY.
WORD N321 < DEMANDE DISPLAY ITEM.
X100: VAL 0
IF GIGE,,X100,
WORD NONC < COMMANDE NON RECONNUE : OVERLAY.
WORD N183 < DEMANDE DE REECRITURE DE L'ITEM
< COURANT.
X100: VAL 0
<
< D E L E T E I T E M S I T U E E N N C 1 :
<
N143: BYTE PSS;0
WORD SG1 < APPEL DE LA SOUS-GRAMMAIRE SG1 ,
< POUR : 'ITEM'+NOMIN+CODAGE.
N146: BYTE PC;"S"
WORD TSGN < A T T E N T I O N : C'EST
< TSGN (ET NON PAS TSGNI) QU'ON
< APPELLE , ETANT DONNE QUE L'ITEM
< EST SITUE EN NC1 ......
WORD N10 < ERREUR : L'ITEM N'EXISTE PAS.
N147: BYTE PC;"I"
WORD CHKI < L'ITEM A-T'IL BIEN LE TYPE-ITEM ?
WORD N10 < NON , ERREUR.
BYTE PC;"F"
WORD CHKPI < L'ITEM A-T'IL ENCORE DES PERES ???
WORD N10 < OUI , ERREUR.
WORD N18 < OK , DELETE L'ITEM.
<
< C R E A T I O N I T E M :
<
N150: BYTE PCS;0
WORD IC1 < ITEM1 DEVIENT L'ITEM COURANT.
N151: BYTE PCS;0
WORD RAZN < RAZ DE L'EN-TETE DE L'ITEM.
N152: BYTE PCS;0
WORD GANOM < GENERATION DES RELAIS ANOM
< ET ANOMC POUR ITEM1.
N153: BYTE PCS;0
WORD ILONG < RAZ DE LRITEM.
N154: BYTE PSS;0
WORD SG1 < APPEL DE LA SOUS-GRAMMAIRE SG1
< POUR : 'ITEM'+NOMIN+CODAGE.
N155: BYTE PCS;0
WORD INDICI < MISE EN PLACE DE L'INDICATEUR
< TYPE-ITEM.
N156: BYTE PC;"S"
WORD WSGNI < DEMANDE DE CREATION DE L'ITEM.
WORD N35 < ERREUR : L'ITEM EXISTE DEJA ,
< RETOUR SUR NC1.
WORD NCOM < OK , ITEM CREE.
<
< A P P E L I T E M C O U R A N T :
<
N181: BYTE PCS;'FF < B RESTE INCHANGE : B="U"/"L".
WORD STACN < SELECTION DU NVP REPONDANT A
< LA DEMANDE : NVP=6/5.
BYTE PCS;0
WORD IC1 < ITEM1 DEVIENT L'ITEM COURANT.
N184: BYTE PCS;0
WORD GANOM < GENERATION DES RELAIS NOM
< ET NOMC.
N185: BYTE PSS;0
WORD SG1 < APPEL DE LA SOUS-GRAMMAIRE
< SG1 POUR : 'ITEM'+NOMIN+CODAGE.
N186: BYTE PC;"S"
WORD LSGNI < TEST & LOAD LE <NOM> DEMANDE
< SOUS LE BON <ACN> ; LE NVP
< DE DEMSGN EST DEJA POSITIONNE.
WORD N35 < ERREUR : LE NOM N'EXISTE PAS.
N187: BYTE PC;"I"
WORD CHKI < LE NOM EST-IL BIEN CELUI
< D'UN ITEM ????
WORD N35 < NON , ERREUR.
WORD NCOM < OK , LE <NOM> EST BIEN CELUI
< D'UN ITEM.
<
< R E E C R I T U R E D E L ' I T E M C O U R A N T :
<
N183: BYTE PCS;0
WORD IC1 < ITEM1 DEVIENT L'ITEM COURANT.
N190: BYTE PC;0
WORD CHKI < ITEM1 A-T'IL LE TYPE-ITEM ????
WORD N35 < ERREUR.
N191: BYTE PCS;"S"
WORD DSGNI < DELETE ITEM1.
N192: BYTE PC;"S"
WORD WSGNI < REECRITURE DE ITEM1.
WORD N35 < ERREUR ????
WORD NCOM < OK , COMMANDE SUIVANTE.
IF GIGE,X100,,X100
<
< E D I T I O N D U C O N T E N U D ' U N I T E M :
<
N321: BYTE PSS;0
WORD SG1 < POUR 'ITEM'+NOMIN+CODAGE.
BYTE PC;"S"
WORD TSGN < TEST & LOAD L'ITEM.
WORD N10 < ERREUR : N'EXISTE PAS.
BYTE PC;"T"
WORD CHKI < NOEUD1 A-T'IL LE TYPE-ITEM ????
WORD N10 < NON , ERREUR.
BYTE PCS;0
WORD TYPI < RENVOI B=NATURE ITEM (EN ASCI).
BYTE PM;'FF
WORD M12,X < EDITION DE 'TYPE=V/T/....'.
WORD NCOM < ABORT COMMANDE POUR CTRL-X-OFF.
BYTE PM;"="
WORD M3,X < EDITION DE 'NOMC='
WORD NCOM < ABORT POUR CTRL-X-OFF.
BYTE PC;0 < A NOTER : B=0 !!!!!!
WORD NOMOUT < EDITION DE <NOMC>(ITEM).
WORD NCOM < ABORT POUR CTRL-X-OFF.
N324: BYTE PC;'FF < B CONTIENT LE NUMERO DU PERE
< COURANT DE 0 A 15.
WORD EFAMIL < TEST DE L'OCCUPATION DU PERE (B).
WORD N322 < LE PERE(B) N'EST PAS OCCUPE.
<
< EDITION D'UN PERE :
<
N323: BYTE PCS;'FF
WORD NC2 < NOEUD2 DEVIENT LE NOEUD COURANT.
BYTE PC;'FF
WORD TSGN < ACCES AU PERE(B) DANS NOEUD2.
WORD N81 < ERREUR N'EXISTE PLUS !!!
BYTE PM;'FF
WORD M75,X < EDITION DE 'PERE='.
WORD NCOM < ABORT POUR CTRL-X-OFF.
BYTE PM;'FF
WORD M9,X < EDITION DE ' ' COMME SEPARATEUR.
WORD NCOM < ABORT POUR CTRL-X-OFF.
BYTE PC;'FF
WORD EDITN < EDITION DE <NOM>(PERE(B)).
WORD NCOM < ABORT POUR CTRL-X-OFF.
BYTE PCS;'FF
WORD NC1 < NOEUD1 REDEVIENT LE NOEUD COURANT.
N322: BYTE PC;'FF
WORD FFAMIL < TEST DE FIN DE LISTE DES PERES ??
WORD NCOM < OUI , C'EST FINI.
WORD N324 < NON , AU SUIVANT.
<
< M O U V E M E N T D ' I T E M S :
<
N195: BYTE PT;"1"
WORD 0
N197: BYTE PT;"2"
WORD N196 < DEMANDE : ITEM1-->ITEM2.
N199: BYTE PT;"X"
WORD N198 < DEMANDE : ITEM2-->ITEM1.
WORD NONC < COMMANDE NON RECONNUE : OVERLAY.
WORD N200 < DEMANDE ECHANGE ITEM1<-->ITEM2.
<
< M O U V E M E N T : I T E M 1 ----> I T E M 2 :
<
N196: BYTE PCS;0
WORD IC1 < ITEM1 DEVIENT L'ITEM COURANT.
N201: BYTE PC;"I"
WORD CHKI < ITEM1 A-T'IL BIEN LE TYPE-ITEM ???
WORD N35 < NON , ERREUR.
N202: BYTE PCS;0
WORD MOVE1 < MOVE : ITEM1-->ITEM2.
N250: BYTE PC;0
WORD IC2 < ITEM2 DEVIENT L'ITEM COURANT.
WORD 0
WORD N208
<
< M O U V E M E N T : I T E M 2 ----> I T E M 1 :
<
N198: BYTE PCS;0
WORD IC2 < ITEM2 DEVIENT L'ITEM COURANT.
N203: BYTE PC;"I"
WORD CHKI < ITEM2 A-T'2L BIEN LE TYPE-ITEM ???
WORD N35 < NON , ERREUR.
N204: BYTE PC;0
WORD MOVE2 < MOVE : ITEM2-->ITEM1.
WORD 0
WORD N207
<
< E C H A N G E : I T E M 1 <----> I T E M 2 :
<
N200: BYTE PCS;0
WORD MOVEX < ECHANGE SANS VERIFICATIONS.
N205: BYTE PCS;0
WORD IC2 < IC2 DEVIENT L'ITEM COURANT.
N206: BYTE PCS;0
WORD GANOM < GENERATION DE ANOM ET ANOMC
< POUR ITEM2.
N207: BYTE PCS;0
WORD IC1 < ITEM1 DEVIENT L'ITEM COURANT.
N208: BYTE PC;0
WORD GANOM < GENERATION DE ANOM ET ANOMC
< POUR ITEM1.
WORD 0
WORD NCOM < ACCES COMMANDE SUIVANTE.
X100: VAL 0
<
< S O U S - G R A M M A I R E S G 1 :
< ' I T E M ' + N O M I N + C O D A G E :
<
SG1: EQU $
WORD 0 < POINT D'ENTREE DE SG1.
N160: BYTE PM;">"
WORD M10,X < MESSAGE 'ITEM='.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N104: BYTE PCS;0
WORD NOMIN < ENTREE DE <NOM>(ITEM).
N125: BYTE PCS;0
WORD CODAGE < CALCUL DE <NOMC>(ITEM).
N170: BYTE PB;0
WORD SG1 < PERMET D'ACCEDER AU POINT DE
< RETOUR DE L'APPEL DE SG1.
<
< D E L E T E E T L I S T E :
<
N262: BYTE PC;3 < ARG1=CODE DE DELETE SGN.
WORD INDLD < MEMORISATION DU LISTE ET DELETE.
WORD N254 < VERS LA RECUPERATION CATALOGUE.
<
< L I S T E S E U L :
<
N252: BYTE PCS;0 < ARG1=0 : PAS DE DELETE.
WORD INDLD < MEMORISATION 'PAS DE DELETE'.
<
< D E M A N D E D E C A T A L O G U E S :
<
N254: BYTE PT;"I" < CATALOGUE D'ITEMS ???
WORD 0
BYTE PT;"N" < CATALOGUE DE NOEUDS ???
WORD N253 < DANS LE CAS I/N , ON RECUPERE LE
< CATALOGUE.
WORD NONC < CAS DES TYPES NON RECONNUS ....
N253: EQU $
N215: BYTE PM;">"
WORD M11,X < ENVOI DU MESSAGE 'RACINE'.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N216: BYTE PIS;4 < ENTREE DE 4 CARACTERES MAX
< POUR LA RACINE :
< RACINE=(K1(K2(K3)))<EOT>.
WORD 0
N217: BYTE PC;"R"
WORD CHKR < VALIDATION DE LA RACINE.
WORD N10 < ERREUR : MAUVAISE RACINE.
N218: BYTE PC;0
WORD CATAL1 < 1ERE ENTREE DANS LA ROUTINE
< DE RECONSTITUTION DU CATALOGUE.
WORD NCOM < C'EST FINI , ACCES A LA COMMANDE
< SUIVANTE.
N257: BYTE PC;0
WORD TSGN < TEST ET LOAD DU <NOMC>.
WORD N259 < ERREUR ???
N258: BYTE PC;0
WORD CHKIN < TEST DU TYPE DE <NOMC> ???
WORD N259 < CE N'EST PAS UN ITEM , LE
< <NOMC> EST IGNORE.
N260: BYTE PM;"-"
WORD M1,X < ENVOI D'UN SEPARATEUR.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
N270: BYTE PC;0
WORD EDITN < EDITION DU <NOM> DU <NOMC>.
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
IF GIGE,,X100,
BYTE PCS;0
WORD STOZDC < ENVOI DE <NOMC> EN ZDC...
X100: VAL 0
BYTE PCS;0
WORD DSGNG < FAUT-IL AUSSI DELETER L'ELEMENT
< COURANT , MAIS ,
< A T T E N T I O N : S'IL Y
< A DELETER , CELUI-CI EST FAIT
< SANS AUCUNE VERIFICATION
< DE FILIATION/PATERNITE !!!!!!!
N259: BYTE PC;0
WORD CATAL2 < ENTRY2 DE RECONSTITUTION DU
< CATALOGUE.
WORD NCOM < FIN DU CATALOGUE.
WORD N257 < RETOUR UN <NOMC> TROUVE.
<
< C O M M A N D E S N O N R E C O N N U E S :
<
NONC: BYTE PC;'FF < NE PAS MODIFIER (B).
WORD LOADP < TENTATIVE DE CHARGEMENT D'UNE
< BRANCHE D'OVERLAY.
WORD N10 < ERREUR : LA COMMANDE EST
< REELLEMENT INCONNUE.
<
<
< A T T E N T I O N :
< NONC ET N10 DOIVENT ETRE DES
< NOEUDS CONTIGUS A CAUSE DE
< LA ROUTINE 'LOADP' QUI PEUT REVENIR
< AVEC X=0 LORS DES COMMANDES D'UN
< SEUL CARACTERE ...
<
<
< E R R E U R :
<
N10: BYTE PM;'FF
WORD M4,X
WORD NCOM < CTRL-X-OFF : ABORT LA COMMANDE.
WORD NCOM < RETOUR AU NIVEAU COMMANDE.
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
< E N M E M O I R E D E S I T E M S :
<
X4: VAL ITEM2-$ < CETTE QUANTITE DOIT ETRE
< POSITIVE OU NULLE.
IF X4,,XWOR%,XWOR%
IF ATTENTION : "GE" EST TROP LONG !!!
XWOR%: VAL 0
DZS X4+1 < PAR PURE PROPRETE !!!
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.