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#