< S I S C M S 5 9 PAGE PAGE < < < A R B R E G E N E R A L < D U S Y S T E M E : < < < PRINCIPE : < LE SYSTEME A A SA DISPOSITION NSTREE SECTEURS < SUR DKF POUR Y ETENDRE UN ARBRE GENERAL < DES NOMS DU SYSTEME ET DES UTILISATEURS. < CET ARBRE EST GERE A L'AIDE DU LANGAGE < INTERPRETATIF DECRIT PRECEDEMMENT, ET < D'UN CERTAIN NBRE DE ROUTINES QUI VONT < SUIVRE. < LE FORMAT DES NUMEROS DE NOEUD EST < LE SUIVANT : < BIT0=K, < BITS1-10=NUMERO DE SECTEUR (K A NSTREE-Z), < BITS11-15=NUMERO DE NOEUD DANS LE < SECTEUR (K A 24). < (VOIR A CE SUJET LA DEFINITION DE 'MKNE') < A NOTER QUE L'@SECTEUR CORRESPONDANTE < S'OBTIENT EN TRNASLATANT LE NUMERO < DE SECTEUR AVEC LE NBRE DE SECTEURS < UTILISES PAR L'ALLOCATEUR DISQUE ET LE SGF. < < < ALLOCATION DES NOEUDS : < IL SE POSE LE PROBLEME DE L'ALLOCATION < DES NOEUDS DANS CET ESPACE. ON DISPOSE A < CET EFFET DES MOYENS SUIVANTS : < < 1- LA TABLE TOSA1 : INDIQUE LES SECTEURS < ENTIEREMENT LIBRES, < < 2- LA TABLE TOSA2 INDIQUE LES SECTEURS < ENTIEREMENT OCCUPES. < < 3- EN TETE DE CHAQUE SECTEUR 3 MOTS SONT < RESERVES : < BITS0-24 (MOTS 0 & 1) : TABLE D'OCCUPATION < DES 25 NOEUDS. < MOT2=NBRE DE NOEUDS LIBRES DANS LE < SECTEUR (25 INITIALEMENT). < < < I M P O R T A N T : LORSQU'UN SECTEUR EST DEMANDE, ALORS < QU'IL EST COMPLETEMENT VIDE, ON L'INITIALISE < EN MEMOIRE, ET ON NE CONSIDERE PAS CE FAIT < COMME UNE ERREUR SYSTEME, A CAUSE DE < L'INITIALISATION DU SYSTEME. < < < R A C I N E D E L ' A R B R E : < < ROOT:: VAL K < NUMERO DU SECTEUR CONTENANT < LA RACINE DE L'ARBRE. < < < NOTA : < LA RACINE EST RECHARGEE A PRIORI < A CHAQUE SORTIE DU HANDLER DE < GESTION DE L'ARBRE. < (CE PRE-CHARGEMENT EST FAIT EN < PARALLELE, C'EST-A-DIRE QU'IL N'Y < A PAS D'ATTENTE DE FIN D'E/S < IMMEDIATE... ) < < PAGE < < < F O R M A T D E S N O E U D S : < < < FORMAT : < LE FORMAT DES NOEUDS DE L'ARBRE < DU SYSTEME VA ETRE DONNE PAR DES < 'VAL' ET NON PAR UNE 'DSEC' ; < CHAQUE SYMBOLE AINSI DEFINI CORRES- < POND A UN MOT DU NOEUD. < < XNESER:: MOT O < CONTIENT LE CHAINAGE "SERIE", XNEPAR:: MOT XNESER+D < CONTIENT LE CHAINAGE "PARALLELE", XNEBAC:: MOT XNEPAR+D < CONTIENT LE CHAINAGE "ARRIERE", XNEV0:: MOT XNEBAC+D < LONGUEUR, ET PREMIER OCTET(VALEUR), XNEV1:: MOT XNEV0+D < SUITE DE LA VALEUR... LOXNE:: VAL XNEV1+P-XNESER < LONGUEUR D'UN NOEUD. < < < F O R M A T D ' U N S E C T E U R : < < < (MEME REMARQUE QUE CI-DESSUS...) < < NTRN X26:: VAL YY7/LOXNE < X26=NOMBRE DE NOEUDS QUE PEUT CONTENIR TRN < UN BUFFER... NTRN XLXSAN:: VAL X26+NBITMO-E/NBITMO TRN < NOMBRE DE MOTS NECESSAIRES A IMPLANTER < UNE TABLE D'ALLOCATION DES NOEUDS EN BITS XSAN:: MOT O < DEBUT DE LA TABLE D'ALLOCATION DU SECTEUR < COURANT, XSNN:: MOT XSAN+XLXSAN < CONTIENT LE NOMBRE DE NOEUDS LIBRES < DANS LE SECTEUR COURANT ('X26' A < L'INITIALISATION). XSLN:: MOT XSNN+D < PREMIER MOT DISPONIBLE POUR LES NOEUDS... IF X26*LOXNE+XSLN-XSAN-YY7,,XEIF%, IF ATTENTION : IL Y A TROP DE NOEUDS PAR SECTEUR !!! XEIF%: VAL ENDIF < < < F O R M A T D E S A D R E S S E S D E N O E U D S : < < < FORMAT : < UN NUMERO DE NOEUD EST OBTENU < PAR CONCATENATION D'UN NUMERO DE < SECTEUR RELATIF A LA RACINE DE < L'ARBRE, ET D'UN NUMERO DE NOEUD < DANS LE SECTEUR ; CE DERNIER NUMERO < SERA DEFINI A L'AIDE DU MASQUE 'MKNE'. < < XWOR%2: VAL -S < POUR FAIRE UN DECALAGE A DROITE. XWOR%1: VAL X26 < NOMBRE DE NOEUDS PAR SECTEUR. DO NBITMO XWOR%1: VAL XWOR%1>XWOR%2=FCPUSH XWOR%1: VAL I < INITIALISATION DU COMPTAGE... DO NBITMO XWOR%1: VAL K=FCPULL=FCSIGN+XWOR%1 MKNE:: VAL BIT>XWOR%1-N < 'MKNE' EST LE PLUS PETIT MASQUE < CONTENANT 'X26'. < < < I N I T I A L I S A T I O N D E L A T A B L E < D ' A L L O C A T I O N D E S N O E U D S < D ' U N S E C T E U R : < < NTRN XWOR%1: VAL X26/NBITMO(K=FCREST TRN XINN1:: VAL COSBT?XWOR%1-B=FMASK(K=FCINST-N)MFFFF < POUR INITIALISER LE MOT INCOMPLET, XINN0:: VAL MMOT < POUR INITIALISER LE MOT COMPLET. PAGE < < < M E M O I R E N E C E S S A I R E < A L A G E S T I O N D E < L ' A R B R E D U S Y S T E M E : < < XWORK7: VAL NSTREE < NOMBRE DE SECTEURS DE L'ARBRE. X25:: VAL NSTREE/NBITMO < NOMBRE DE MOTS NECESSAIRES POUR < NSTREE SECTEURS A RAISON D'UN < BIT PAR SECTEUR. < < < T A B L E S D ' O C C U P A T I O N S E C T E U R S : < < CALL #SISP CMS5 DOL1# WORD XWORK7 < PAR SYMETRIE AVEC 'TOSA2'. TOSA1: EQU $ < < < FORMAT : < UN BIT PAR SECTEUR, TEL QUE : < BIT(I)=1 : SECTEUR(I) ENTIEREMENT LIBRE, < 0 : SECTEUR(I) (PARTIELLEMENT) OCCUPE. < < CALL #SISP CMS5 NBIT1# WORD XWORK7 < POUR LES VALIDATIONS DE 'SOBT'... TOSA2: EQU $ < < < FORMAT : < UN BIT PAR SECTEUR TEL QUE : < BIT(I)=1 : SECTEUR(I) (PARTIELLEMENT) LIBRE, < 0 : SECTEUR(I) ENTIEREMENT OCCUPE. < < CALL #SISP CMS5 NBIT1# PAGE < < < Z O N E P E R M E T T A N T U N R E S T A R T < A P A R T I R D U D I S Q U E S A N S < P E R D R E L ' E S P A C E D I S Q U E : < < < FONCTION : < CETTE ZONE ACCESSIBLE PAR 'NSPSAV' < CONTIENT UNE LISTE DES OBJETS < VITAUX QUANT A L'OCCUPATION DE < L'ESPACE DISQUE, ET A L'ARBRE < GENERAL DU SYSTEME, MAIS : < < < A T T E N T I O N : < LES FICHIERS N'Y SONT PAS < INCLUS ; AINSI LORS D'UNE SAUVEGARDE DISQUE < IL FAUDRA FERMER TOUS LES FICHIERS !!! < (AU PREALABLE) < MALGRE TOUT, ON MEMORISE LA LISTE DES < DESCRIPTEURS D'ENREGISTREMENT CE QUI < PERMET A LA REINITIALISATION DE SAVOIR < S'IL Y AVAIT DES ENREGISTREMENTS OUVERTS < ET SI OUI, A QUELS FICHIERS ILS APPAR- < TENAIENT (NOM INTERNE MEMORISE) ; ON < PEUT DONC ALLER "BRICOLER" MANUELLEMENT... < < < NOTA : < CETTE LISTE SERT AUSSI DANS 'TH0' < A VALIDER LES ACCES DIRECTS MEMOIRE < PAR 'ACTD' POUR LES UTILISATEURS D'< DIFFERENT DE ":SYS" ; AINSI, TOUTE < ZONE MEMOIRE COPIABLE, EST ACCESSIBLE < SANS EXCEPTION... < < < FORMAT DE LA LISTE : < CHQUE ENTREE EST UN DOUBLE-MOT : < (@INFORMATION,LONGUEUR(INFORMATION)), < LA FIN DE LISTE EST INDIQUEE PAR (K,0). XCOPAD: VAL XCOPAD < MOT CONTENANT L'ADRESSE, XCOPLO: VAL XCOPLO < MOT CONTENANT LA LONGUEUR, < A T T E N T I O N : CETTE LONGUEUR < PEUT ETRE NEGATIVE, AUQUEL CAS CELA < SIGNIFIE QUE CETTE INFORMATION NE DOIT < PAS ETRE VALIDEE LORS DU RESTART A < L'AIDE DES 2 COPIES EN BASCULE ; C'EST < PAR EXEMPLE LE CAS DE LA DATE... XLCOPY: VAL XLCOPY < LONGUEUR D'UNE ENTREE... < (VARIABLES DEFINIES AVEC LA < PREPARATION DE LA COPY...) < < LZSAVE: EQU $ XWOR%1: VAL K < INITIALISATION DU COMPTAGE DES MOTS < SAUVEGARDES. <******************************************************************************* WORD NUGBC;D < NUMERO DU GRAND BLOC COURANT. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* <******************************************************************************* WORD TOGB+IJIJDX;YY7 < OCCUPATION DU GRAND BLOC COURANT. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* <******************************************************************************* WORD NSL;D < NBRE TOTAL DE SECTEURS LIBRES. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* <******************************************************************************* WORD NSLGB+IJIJDX;NSTO < NBRE DE SECTEURS LIBRES DANS XWOR%1: VAL '0000000@@@@+XWOR%1 < CHAQUE GRANDS BLOCS. <******************************************************************************* <******************************************************************************* WORD TOSA1;X25 < LIBERTE DES SECTEURS DE L'ARBRE. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* <******************************************************************************* WORD TOSA2;X25 < OCCUPATION SECTEURS DE L'ARBRE. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* <******************************************************************************* WORD TEDF+IJIJDX;LTEDF < TABLE D'ETAT DES FICHIERS. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* <******************************************************************************* WORD TADF;NMFILE/NBITMO < LISTE DES FICHIERS EN DELETE. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* <******************************************************************************* WORD STOCS+IJIJDX;MSTOCS < PILE DES SECTEURS SGF EN RESERVE. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* <******************************************************************************* WORD NSTOCS;D < NBRE DE SECTEURS SGF EN RESERVE. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* <******************************************************************************* WORD TDE;UDE*NMDE < DESCRIPTEURS D'ENREGISTREMENT 'SGF'. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* <******************************************************************************* WORD KQSHS;D < NOMBRE DE Q-SECTEURS HORS-SERVICE. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* XXTIME:: VAL XWOR%1 < INDEX DE LA ZONE DE COPY DE LA DATE < DANS LE BUFFER 'BCOPY'. <******************************************************************************* WORD LTIME;-LOTIME < HEURE/DATE, A NE PAS VALIDER !!! XWOR%7: VAL '0000000@@@@ <******************************************************************************* XWOR%7: VAL -XWOR%7 < CAR L'ENTREE PRECEDENTE EST NEGATIVE... XWOR%1: VAL XWOR%7+XWOR%1 <******************************************************************************* WORD PQSHS;XQSHS < PILE DES Q-SECTEURS "HS"... XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* <******************************************************************************* WORD ASTREE;D < NOMBRE DE NOEUDS LIBRES DANS L'ARBRE. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* NTRN XWOR%7: VAL NPVDKF+NOCMO-E/NOCMO TRN <******************************************************************************* WORD TVDKF+ZERBVP;XWOR%7 < VIRTUALISATION PARTIELLE DE 'DKF'. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* NTRN XWOR%7: VAL GAXCYL+NOCMO-E/NOCMO TRN <******************************************************************************* WORD TVDKM;XWOR%7 < TABLE DE VIRTUALISATION DE 'DKM'. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* <******************************************************************************* WORD TVDKU;XWOR%7 < TABLE DE VIRTUALISATION DE 'DKU'. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* <******************************************************************************* WORD MCOLOR;XXCULM < MEMOIRE DES COULEURS DE 'MEMTV'. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* LOSDKM:: VAL D < LONGUEUR DE LA LISTE DES GROUPES DE < CYLINDRES APPROPRIES SUR 'DKM'. <******************************************************************************* WORD LSDKM;LOSDKM < LISTE DES APPROPRIATIONS SUR 'DKM'. XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* NTRN XWOR%7: VAL NBGB+NOCMO-E/NOCMO TRN <******************************************************************************* WORD TLRUGB;XWOR%7 < TABLE DES 'GB' LES PLUS UTILISES... XWOR%1: VAL '0000000@@@@+XWOR%1 <******************************************************************************* < < ICI, ZONE D'INSERTION DES NOUVEAUTES... < XWORK1: VAL XWOR%1 < LONGUEUR DU BUFFER DE COPY. WORD NIL;NIL < DOUBLET DE FIN DE LISTE. XWOR%8: VAL 2 < NOMBRE D'ENTREES DE PATCH, DZS XLCOPY*XWOR%8 < ZONE PATCH DE LA LISTE. NTRN IF $-LZSAVE/XLCOPY(K=FCREST,,XEIF%, IF ATTENTION : 'XLCOPY' EST MAUVAISE, OU BIEN IF LE CONTENU DE 'LZSAVE' EST MAL FORMATTE !!! XEIF%: VAL ENDIF TRN < < < B U F F E R D E S A U V E G A R D E : < < CALL #SISP CMS5 DOL2# XWOR%1: VAL $-ZERO < SAUVEGARDE DU "$"... WORD -1 < LE MOT PRECEDANT LE BUFFER DE COPY, < VAUT -1 TANT QUE LE 'SYSINI' N'EST < PAS TERMINE, ENSUITE IL VAUT 0 ; IL < S'AGIT DONC D'UN VERROU D'EXCLUSION < DU 'SYSINI' SUR LE PROCESSEUR MAITRE, < ET DU PROCESSEUR ESCLAVE... BCOPY: EQU $ < ADRESSE MOT DU BUFFER DE COPY. TCOPY: EQU BCOPY < A CAUSE DE L'ASSEMBLEUR... XWOR%2: VAL BCOPY-ZERO IF XWOR%1-XWOR%2-SYNCOP,,XEIF%, IF ATTENTION 'SYNCOP' EST MAUVAIS !!! XEIF%: VAL ENDIF DZS XWORK1 < BUFFER. CKCOPY: WORD K < CHECKSUM DE LA COPY... IF $-CKCOPY-D,,XEIF%, IF ATTENTION : LE CHECKSUM EST MAUVAIS !!! XEIF%: VAL ENDIF IF CKCOPY-BCOPY-XWORK1,,XEIF%, IF ATTENTION : LE CHECKSUM N'EST PAS AU BOUT DU BUFFER !!! XEIF%: VAL ENDIF XWORK1: VAL $-BCOPY < POUR PRENDRE EN COMPTE LE CHECKSUM... LCOPY1: EQU ZERO+XWORK1 < LONGUEUR EN MOTS DU BUFFER DE COPY. XWORK1: VAL XWORK1*NOCMO LCOPY2: EQU ZERO+XWORK1 < LONGUEUR EN OCTETS DU BUFFER DE COPY. MCOPY2: EQU LCOPY2 < A CAUSE DE L'ASSEMBLEUR... CALL #SISP CMS5 DOL1# NTRN XWOR%1: VAL LCOPY1-ZERO+YY7-E/YY7 TRN < NOMBRE DE SECTEURS NECESSAIRES A CHAQUE < ZONE DE 'COPY'... IF XWOR%1-LCOPY3,XEIF%,XEIF%, IF DANGER : LA CARTE D'IMPLANTATION DU DISQUE IF 'FHD' EST MAUVAISE !!! XEIF%: VAL ENDIF < < < A D R E S S E S A C O N N A I T R E : < < BXTIME: EQU BCOPY+XXTIME < HEURE/DATE, AFIN DE SAVOIR FACILEMENT < QUELLE EST DES 2 COPIES EN BASCULE LA < PLUS ANCIENNE LORS DU RESTART... PAGE < < < L I S T E D E S E S P A C E S < R E C U P E R A B L E S D A N S < C M S 4 ( E V E N T U E L L E M E N T ) < < < FONCTION : < CETTE LISTE ACCESSIBLE PAR 'NSPFRE', < DONNE LES ESPACES RECUPERABLES DANS CMS4 < EVENTUELLEMENT (ET EN PARTICULIER LE < SYSTEME DE GESTION DE LIGNE FS7/TS7). < < < FORMAT : C'EST UNE LISTE DE MOTS DONT CHACUN < A LE FORMAT SUIVANT : < BIT0=K : DONNE L'ADRESSE D'UN MOT < CONTENANT LUI-MEME UNE ADRESSE < A REMPLACER PAR 'DCTTSI' LORS < DE LA RECUPERATION. < BIT0=1 : ON TROUVE ALORS 2 MOTS < CONSECUTIF1 TELS QUE BIT0=1, < ET TELS QUE : < LE 1ER DONNE LE 1ER MOT < LIBRE RECUPERABLE, < ET LE 2EME, LE NOMBRE < DE MOTS RECUPERES. < < LZFREE: EQU $ < FIN DE LISTE : < WORD NIL < FIN DE LISTE. LPFREE:: VAL 2 < LONGUEUR ARBITRAIRE DE LA ZONE DE PATCH. DZS LPFREE < ZONE PATCH DE LZFREE. PAGE < < < D C T D E G E S T I O N < D E S A R B O R E S C E N C E S : < < DCTTRI: EQU $ PSTTRI: WORD K;K;K;K;COM+DEPCS;DCTTRI;NIL;PILTRI;HANDLR;SMST;SO;SE #@ASCI " TRI" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC. WORD XXLOC0 DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLRES < HANDLER DE GESTION DES RESEAUX. WORD NIL WORD K;K < ETAT : ETAT1=0. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD NOSOSE < DCTFUP ("ALTITUDES" DES FONCTIONS). < 'HDLTRI' IGNORE LE NUMERO DE PAGE DE 32K < QUI LUI EST TRANSMIS, ET PREND SYSTEMA- < TIQUEMENT LA PAGE 0... < < < Z O N E V A R I A B L E : < < VARTRI: EQU $ IF VARTRI-DCTTRI-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < DONNEES DE L'INTERPRETATION : < WORD LTRI,X ALTRI:: VAL $-D-VARTRI < RELAI VERS LE CODE DU LANGAGE < INTERPRETATIF DE GESTION < DES RESEAUX. WORD YMOVT,X MOVT:: VAL $-D-VARTRI < RELAI DES ROUTINES DE MOVE. YMOVT: EQU $ WORD MOV0;MOV1;MOV2;MOV3 WORD ROOT < RACINE DE L'ARBRE. NC:: VAL $-D-VARTRI < NUMERO DU NOEUD COURANT. WORD NILK NT:: VAL $-D-VARTRI < NUMERO DU NOEUD DE TRAVAIL. WORD NILK CT:: VAL $-D-VARTRI < CONDITION D'EXECUTION DU < LANGAGE INTERPRETATIF (K SI OK). WORD NILK KWTRI:: VAL $-D-VARTRI < COMPTAGE DES MODIFS DANS LES N < NOEUDS, PERMET D'OPTIMISER < D'EVENTUELLES E/S DISQUES. WORD INT,X AINT:: VAL $-D-VARTRI < TABLE DES ADRESSES DES ROUTINES < D'INTERPRETATION. WORD NILK NUM:: VAL $-D-VARTRI < NUMERO D'1N NOEUD. WORD YVALUE,X VALUE:: VAL $-D-VARTRI < ZONE DE MANOEUVRE DES VALEURS < DES NOEUDS. YVALUE: EQU $ XXNVAL:: VAL 2 < NOMBRE DE VALEURS STOCKEES. DZS XNEV1-XNEV0+Z*XXNVAL VALUE0:: VAL YVALUE-VARTRI+XNEV0-XNEV0 VALUE1:: VAL YVALUE-VARTRI+XNEV1-XNEV0 VALUE2:: VAL VALUE0+XNEV1-XNEV0+Z VALUE3:: VAL VALUE1+XNEV1-XNEV0+Z STRI:: VAL $-VARTRI < PILE DESTINE A L'EXECUTION < DES INSTRUCTIONS STACK/UNSTACK < DU LANGAGE INTERPRETATIF. XWOR%1: VAL 8 < VALEUR ARBITRAIRE... BYTE XWOR%1;W DZS XWOR%1 < PILE DE 6 MOTS : LE 1ER ET LE < DERNIER SONT INUTILISES ET < INUTILISABLES (CF. LA GESTION < DU POINTEUR DE PILE ET DU CARY). < < BLOC DE DEMANDE DE TRAVAIL : < DEMTRI:: VAL $-VARTRI < BLOC DE 8 MOTS RESERVES POUR < LES DEMANDES DE SERVICES. BYTE NSPDKA;XDPRIO?XDSYM?XTYPAD < DEMANDE D'ACCES A 'DKA' EN ADRESSE-MOTS, WORD NILK < OPDEM. WORD BSTCXX-ZERO < ADRESSE-MOTS DU BUFFER-SECTEUR, WORD YY8 < POUR UN SECTEUR... WORD NILS < ASDEM. WORD NILK < ETADEM. WORD XXSEM0+I < WEIO EST INITIALISE A 1 AFIN < QUE LORS DE LA 1ERE ENTREE < DANS LE HANDLER DE GESTION DE < L'ARBRE ON NE SE BLOQUE PAS < SUR L'ATTENTE DE PREC-CHARGEMENT. WORD NIL < NEXT. < < SOUS-PROGRAMMES DE < GESTION DE L'ARBRE : < WORD ANTRI < ACCES A UN NOEUD. AN:: VAL $-D-VARTRI < ROUTINE SPECIFIQUE D'ACCES NOEUD. WORD CNTRI < CREATION D'UN NOEUD. CN:: VAL $-D-VARTRI < ROUTINE SPECIFIQUE DE CREATION < NOEUD. WORD DNTRI < DELETE UN NOEUD. DN:: VAL $-D-VARTRI < ROUTINE SPECIFIQUE DE DELETE NOEUD WORD GETCAR < ACCES A UNE VALEUR A PARTIR DU < CHEMIN. GCH:: VAL $-D-VARTRI < ROUTINE SPECIFIQUE DE RECUPERATION < DU CHEMIN ARGUMENT. WORD ABTRI AINIT:: VAL $-D-VARTRI < ROUTINE D'INITIALISATION < SPECIFIQUE D'UN TRAVAIL SUR < L'ARBRE. WORD RBTRI ATERM:: VAL $-D-VARTRI < ROUTINE SPECIFIQUE A APPELER < AVANT DE SORTIR DU LANGAGE < INTERPRETATIF. < < DIFFERENTES VARIABLES : < WORD NILX RCHE:: VAL $-D-VARTRI < RELAI INDIRECT INDEXE VERS < LE CHEMIN ARGUMENT. WORD NILK LCHE:: VAL $-D-VARTRI < LONGUEUR EN OCTETS DU CHEMIN < ARGUMENT. WORD NILK SAVREL:: VAL $-D-VARTRI < SAUVERGARDE DE LA NATURE < DE LA DERNIERE RELATION < B-1 (=S/P) TRAITEE PAR UN < CCHAIN,B. WORD NILK SAVDEM:: VAL $-D-VARTRI < CONTIENT L'ASDEM DE LA DEMANDE < ARGUMENT. WORD NILK NEXTSP:: VAL $-D-VARTRI < VALEUR DU NOEUD SUIVANT EN < SERIE OU EN PARALLELE. WORD NILK VALLON:: VAL $-D-VARTRI < INDICATEUR LONGUEUR VALEUR < =1 LA VALEUR DU NOEUD A 0/1 OCTET < =0 LA VALEUR DU NOEUD A 2 OCTETS OU PLUS < OU PLUS... WORD TFREK,X ATFREK:: VAL $-D-VARTRI < RELAI D'ACCES A LA TABLE DONNANT LE RANG < D'UN CARACTERE DONNE (INDEX DE LA TABLE) < DANS L'ALPHABET VIRTUEL UTILISE PAR < 'CTESTV' (CONTENU DU MOT INDEXE). < < < Z O N E V A R I A B L E D E L A Z O N E V A R I A B L E : < ( ? ? ! ! ! ? ? ) < < < RELAIS DE SOUS-PROGRAMMES : < WORD SP1 AASP1:: VAL $-D-VARTRI < CALCUL @SECTEUR D'UN NOEUD. WORD SP2 ASP2:: VAL $-D-VARTRI < REECRITURE EVENTUELLE DU STC. WORD SP3 ASP3:: VAL $-D-VARTRI < INTIALISATION SECTEUR EN MEMOIRE. WORD SP4 ASP4:: VAL $-D-VARTRI < LECTURE SECTEUR. WORD SP5 ASP5:: VAL $-D-VARTRI < TEST ENTIERE LIBERTE SECTEUR. WORD SP30 ASP30:: VAL $-D-VARTRI < SOUS-PROGRAMME DE MISE A JOUR DE LA LISTE < DES SECTEURS DE L'ARBRE POSSEDANT UN < NOMBRE DE NOEUDS LIBRES NON NUL EGAL AU < RANG (X) DANS LA LISTE. WORD SP31 ASP31:: VAL $-D-VARTRI < SOUS-PROGRAMME METTANT DANS 'A' ET 'W' < L'ADRESSE DU BUFFER DU SECTEUR COURANT. WORD SP32 ASP32:: VAL $-D-VARTRI < SOUS-PROGRAMME DE RECHERCHE DU SECTEUR < COURANT DANS L'ENTREE COURANTE DE LA < LISTE 'LMAXSN'. < < RELAIS DE TABLES ET DE LISTES : < WORD BSTCXX < ADRESSE-MOT DU BUFFER-SECTEUR ABSTC:: VAL $-D-VARTRI < ADRESSE DU BUFFER DU SECTEUR COURANT. WORD Q8000 IF Q8000-K,XEIF%,, IF ATTENTION : LA VALEUR INITIALE DE 'STC' EST IF INCOMPATIBLE AVEC LES TESTS SUR 'STC' !!! XEIF%: VAL ENDIF STC:: VAL $-D-VARTRI < ADRESSE DU SECTEUR COURANT. WORD LMXSN1-IJIJDX,X ALMXS1:: VAL $-D-VARTRI < 1ER RELAI D'ACCES A LA LISTE 'LMAXSN', WORD LMXSN2-IJIJDX,X ALMXS2:: VAL $-D-VARTRI < 2EME RELAI D'ACCES A LA LISTE 'LMAXSN'. ASTREE: WORD NSTREE*X26 BSTREE: EQU ASTREE < A CAUSE DE REFERENCES EN AVANT... NTONSL:: VAL $-D-VARTRI < NOMBRE DE NOEUDS LIBRES DANS L'ARBRE. WORD TOSA1-IJIJDX,X ATOSA1:: VAL $-D-VARTRI < RELAI VERS TOSA1-1. WORD TOSA2-IJIJDX,X ATOSA2:: VAL $-D-VARTRI < RELAI VERS TOSA2-1. WORD X25+IJIJDX < (+IJIJDX A CAUSE DU PREMIER JDX QUE < L'ON FAIT SUR L'INDEX DE TOSA2). XTOSA2:: VAL $-D-VARTRI < INDEX INITIAL COURANT DE LA < TABLE TOSA2 ; UN INDEX INITIAL < DYNAMIQUE PRESENTE LES AVANTAGES < SUIVANTS : < 1- UNIFORMISER L'UTILISATION < DES SECTEURS DE L'ARBRE ; < 2- ET SURTOUT NE PAS ALLOUER < A LA SUITE 2 SECTEURS CONSECU- < TIFS : AINSI ON PEUT ESPERER < MINIMISER LES TEMPS D'ATTENTE < ENTRE E/S SUR 2 SECTEURS CHAINES < S'ILS NE SONT PAS CONSECUTIFS ; < EN GENERAL ON GAGNERA UN TOUR < DE DISQUE... < < CONSTANTES DIVERSES : < NTRN XWOR%7: VAL X26/XXXMOY/XXXMOY/XXXMOY < EN FAIT VALEUR ASSEZ ARBITRAIRE... TRN IF XWOR%7-K,,XEIF%,XEIF% IF ATTENTION : LE PLANCHER NE PEUT ETRE NEGATIF !!! XEIF%: VAL ENDIF WORD XWOR%7 MINX26:: VAL $-D-VARTRI < SEUIL-PLANCHER DE NON INSERTION D'UN < SECTEUR DE L'ARBRE DANS 'LMAXSN'... WORD XXTRI TAS:: VAL $-D-VARTRI < DEPLACEMENT DE CONVERSION D'UN < NUMERO DE SECTEUR EN UNE @SECTEUR < < LISTE DES SECTEURS CONTENANT < UN NOMBRE DE NOEUDS LIBRES NON < NUL EGAL AU RANG DANS LA LISTE : < (L'ELEMENT DE RANG (X) DONNE < L'ADRESSE DES 2 DERNIERS SECTEURS < REFERENCES POSSEDANT (X) NOEUDS < LIBRES) < LMAXSN: EQU $ LMXSN1: EQU $ < PREMIERE PARTIE (LISTE DES MOT0) : DO X26 WORD Q8000 < LISTE VIDE INITIALEMENT... LMXSN2: EQU $ < DEUXIEME PARTIE (LISTE DES MOT1) : DO X26 WORD Q8000 < LISTE VIDE INITIALEMENT... XWOR%1: VAL $-LMAXSN < LONGUEUR DE LA LISTE... IF X26*DFLOT-XWOR%1,,XEIF%, IF ATTENTION : LA LISTE 'LMAXSN' EST INACCESSIBLE IF A L'AIDE DES INSTRUCTIONS 'FLD'/'FST' !!! IF MAIS CELA N'A PLUS D'IMPORTANCE CAR ON IF NE LES UTILISE PLUS CAR IL EST IMPOSSIBLE IF D'UTILISER 'X' COMME UN INDEX DOUBLE-MOT IF AVEC 'FST'/'FLD' ; ON LES DECOMPOSE DONC IF EN DES 'STA''STB'/'LA''LB'... XEIF%: VAL ENDIF < < < P I L E D E L ' A R B R E : < < XWPILE: VAL LPILEH+20 PILTRI:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < T A B L E D E S F R E Q U E N C E S D E S C A R A C T E R E S : < < < FONCTION : < IL EST EVIDENT QUE TOUS LES < CARACTERES NE SONT PAS UTILISES < AVEC LA MEME FREQUENCE ; OR, SI < L'ON UTILISE L'ORDRE ALPHABETIQUE < CECI PEUT ETRE CATASTROPHIQUE, EN < PARTICULIER SUR LES 2 OU 3 PRE- < MIERS CARACTERES D'UN MOT : PAR < EXEMPLE, LE "S" EST FREQUEMMENT < UTILISE COMME PREMIER CARACTERE < DES NOMS DE FICHIERS, OR, IL EST < A LA FIN DE L'ALPHABET... < CETTE TABLE, INDEXEE PAR LE < CODE ASCI DES CARACTERES, DONNE < LE RANG REEL DU CARACTERE POUR < LES TESTS DE 'CTESTV'. < < TFREK: EQU $ TFREK1: EQU TFREK < A CAUSE DE L'ASSEMBLEUR... < < INITIALISATIONS : < XWOR%1: VAL K < 'XWOR%1' EST UTILISE COMME ORDRE DU < CARACTERE COURANT DANS L'ALPHABET VIR- < TUEL UTILISE PAR LES TESTS DE 'CTESTV'. < < CARACTERE 'EON' : < XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KEOT < POSITIONNEMENT SUR LE CARACTERE COURANT, IF XWOR%1-K-I,,XEIF%, IF ATTENTION : 'EOT' DOIT ETRE LE PREMIER CODE DE LA IF LISTE DE L'ALPHABET VIRTUEL, ET CECI A CAUSE DE IF CELUI QUI EST INSERE EN TETE DE L'ARBRE, AVANT IF TOUT AFIN D'INITIALISER L'ARBRE !!! XEIF%: VAL ENDIF IF KEOT-KEON,,XEIF%, IF ATTENTION : C'EST EN FAIT 'KEON' QU'IL FAUT IF METTRE EN TETE DE L'ALPHABET VIRTUEL !!! XEIF%: VAL ENDIF WORD XWOR%1 < ET GENERATION DE SON ORDRE... < < CARACTERES DE CONTROLE : < (A L'EXCEPTION DE 'EOT') < XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KNUL < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSOH < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSTX < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KETX < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KENQ < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KACK < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KBEL < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KBS < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KHT < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KLF < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KVT < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KFF < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KCR < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSO < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSI < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KDLE < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KDC1 < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KDC2 < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KDC3 < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KDC4 < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KNAK < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSYN < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KETB < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KCAN < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KEM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSUB < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KESC < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KFS < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KGS < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KRS < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KUS < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... < < CARACTERES SPECIAUX : < XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSP < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KPE < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KDQ < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KDIESE < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KDOLAR < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KPC < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KET < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KQUOTE < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KPG < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KPD < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSTAR < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KPLUS < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KVIR < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KMOINS < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KPOINT < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSLASH < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... < < CHIFFRES DECIMAUX : < XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KZERO < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KUN < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KDEUX < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KTROIS < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KQUATR < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KCINQ < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSIX < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSEPT < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KHUIT < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KNEUF < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... < < CARACTERES SPECIAUX : < (SUITE-1) < XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KDP < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KPV < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KINF < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KEGAL < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSUP < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KPI < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KAROND < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... < < LETTRES MAJUSCULES : < XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KA < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KB < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KC < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KD < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KE < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KF < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KG < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KH < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KI < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KJ < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KK < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KL < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KN < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KO < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KP < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KQ < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KR < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KS < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KT < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KU < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KV < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KW < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KX < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KY < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KZ < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... < < CARACTERES SPECIAUX : < (SUITE-2) < XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KCG < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KASLSH < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KCD < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KCHAP < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSOUL < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KAPO < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... < < LETTRES MINUSCULES : < XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KAM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KBM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KCM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KDM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KEMI < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KFM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KGM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KHM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KIM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KJM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KKM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KLM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KMM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KNM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KOM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KPM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KQM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KRM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KTM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KUM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KVM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KWM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KXM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KYM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KZM < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... < < CARACTERES SPECIAUX : < (SUITE-3) < XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KACCOG < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KDPBIS < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KACCOD < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KSINUS < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... XWOR%1: VAL XWOR%1+I < PROGRESSION DE L'ORDRE DU CARACTERE. $EQU TFREK+KDEL < POSITIONNEMENT SUR LE CARACTERE COURANT, WORD XWOR%1 < ET GENERATION DE SON ORDRE... < < VALIDATION DE FIN : < LTFREK: EQU ZERO+XWOR%1+I-I < LONGUEUR DE L'ALPHABET VIRTUEL REFERENCEE < EN AVANT PAR L'INSTRUCTION 'ACTD' DE < LECTURE ABSOLUE DE LA MEMOIRE (+I POUR < AVOIR LA LONGUEUR, ET -I PARCE QUE < 'XWOR%1' COMMENCE A 'I'...). XWOR%2: VAL MOCD=K XWOR%2: VAL -XWOR%2 XWOR%2: VAL MOCD>XWOR%2 < DERNIER CODE 'ASCI' AVEC PARITE... XWOR%3: VAL CORBT?BITPAR=FMASK(K?XWOR%2=FCINST < DERNIER CODE 'ASCI' SANS PARITE... IF XWOR%1-I-XWOR%3,,XEIF%, IF ATTENTION : LA TABLE DES FREQUENCES EST TROP IF LONGUE, OU TROP PETITE !!! XEIF%: VAL ENDIF < < POSITIONNEMENT EN FIN DE TABLE : < $EQU TFREK+XWOR%1 PAGE < < < D E F I N I T I O N D E S C O D E S D U < L A N G A G E I N T E R P R E T A T I F : < < < F O R M A T D U C O D E : < < XMCO:: VAL 'F8 < CODE OPERATION SUR UN OCTET, XMRZ:: VAL '04 < INDICATEUR DE RAZ DES CONDITIONS < 'CT' SUR UN OCTET, XMMOV:: VAL '03 < DEFINITION DES MOVES DESIRES. < < < C O D E S - O P E R A T I O N : < < < A T T E N T I O N : < LA VALEUR DES CODES OPERATION N'EST < PAS CALCULEE A PARTIR DE LA TABLE 'INT', < CE QUI EST FORT REGRETTABLE ; EN CONSE- < QUENCE DE QUOI, UNE MODIFICATION DES CODES < DEVRA S'ACCOMPAGNER D'UNE MODIFICATION DE < LA TABLE 'INT' ET INVERSEMENT !!! < < XWOR%1: VAL XMCO=K < DECALAGE DE CADRAGE DES CODES-OPERA- < TIONS... CCREAT:: VAL '02>XWOR%1 < CREATION NOUVEAU NOEUD. CDELET:: VAL '04>XWOR%1 < DELETE UN NOEUD. CNOP:: VAL '00>XWOR%1 < NOP. CTESTV:: VAL '06>XWOR%1 < COMPARAISON VALUE ET VALEUR(NC). CTESTR:: VAL '0D>XWOR%1 < TEST EXISTENCE RELATION R EN NC. CTEBM1:: VAL '12>XWOR%1 < TEST DE LA NATURE (S/P) DE B-1. CCONEC:: VAL '01>XWOR%1 < CONNECT NC A NT PAR R. CDISCO:: VAL '03>XWOR%1 < DISCONNECT NC ET NT PAR R. CCALL:: VAL '05>XWOR%1 < APPEL ROUTINE SPECIFIQUE. CGOTO:: VAL '07>XWOR%1 < GOTO DANS LE LANGAGE INTERPRETATIF. CJUMP:: VAL '0F>XWOR%1 < JUMP DANS LE LANGAGE INTERPRETRATIF CCHAIN:: VAL '09>XWOR%1 < DEPLACEMENT DANS L'ARBRE PAR R. CSTACK:: VAL '08>XWOR%1 < EMPILEMENT NC. CUSTAC:: VAL '0A>XWOR%1 < DEPILEMENT NC. CINIT:: VAL '14>XWOR%1 < INITIALISATION D'UN TRAVAIL. CSTART:: VAL '0B>XWOR%1 < (RE-)INITIALISATION DE NC. CTERM:: VAL '16>XWOR%1 < ACTION SPECIFIQUE AVANT STOP. CSTOP:: VAL '0C>XWOR%1 < FIN D'INTERPRETATION. CVALUE:: VAL '0E>XWOR%1 < MISE DANS VALUE DE VALEUR(NC). CGETCH:: VAL '10>XWOR%1 < VALUE<--MORCEAU DU CHEMIN ARG. CMODCT:: VAL '11>XWOR%1 < MODIFICATION DE CT. < < < I N D I C A T E U R S : < < XWOR%1: VAL XMRZ=K < POUR CADRER L'INDICATEUR... RAZCT:: VAL 1>XWOR%1 < RAZ CT AVANT EXECUTION. XWOR%1: VAL XMMOV=K < POUR RIRE... MCVT:: VAL 1>XWOR%1 < NT<--(NC), AVANT EXECUTION. MTVC:: VAL 2>XWOR%1 < NC<--(NT), AVANT EXECUTION. ETC:: VAL 3>XWOR%1 < (NC)<-->(NT), AVANT EXECUTION. < < < R E L A T I O N S : < < RELATS:: VAL XNESER < RELATION S. RELATP:: VAL XNEPAR < RELATION P. RELATB:: VAL XNEBAC < RELATION B. XRELAT:: VAL RELATB+I < MAX DES RELATIONS... NRELAT:: VAL RELATS+RELATP+RELATB < PAS DE RELATION DEMANDEE < (CF. MVVCT S/P). RELBM1:: VAL 'FF < RELATION B-1. DVALN:: VAL XNEV0-XNESER < DEPLACEMENT VERS LA VALEUR NOEUD. < < < E T I Q U E T T E S : < < SEQUEN:: VAL Q8000 < < < C O D E S D ' E R R E U R : < < ENFDI:: VAL 2 < FONCTION DEMANDEE INEXISTANTE, ENDI:: VAL 4 < DELETE IMPOSSIBLE, ENPC:: VAL 5 < PREMIER CARACTERE NON RECONNU LORS < D'UN INSERT/DELETE, ENLN:: VAL 6 < CHEMIN DE LONGUEUR NULLE, ENFSP:: VAL Q8000 < FIN DE SERIE/PARALLELE RECONTREE < TROP TOT. 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 E S A R B R E S : < < LTRI: EQU $-IJIJDX < < < E N T R E E I N S E R T / D E L E T E : < < < IF $-LTRI*NOCMO-FGID,,XEIF%, IF ATTENTION : LA VALEUR PRESUMEE DE 'FGID' DANS LES IF DEFINITIONS GENERALES EST MAUVAISE !!! XEIF%: VAL ENDIF BYTE CCALL;K < (X)=2. WORD CDITRI < DISCRIMINATION INSERT/DELETE. BYTE CJUMP;K WORD DITRI < < < E N T R E E T E S T : < < IF $-LTRI*NOCMO-FGT,,XEIF%, IF ATTENTION : LA VALEUR PRESUMEE DE 'FGT' DANS LES IF DEFINITIONS GENERALES EST MAUVAISE !!! XEIF%: VAL ENDIF BYTE CJUMP;K < (X)='A. WORD ELTRI < < < C H O I X I N S E R T / D E L E T E : < < DITRI: EQU $ BYTE CGOTO;K WORD ILTRI;DLTRI;SEQUEN < < ERREUR 1ER CARACTERE : ABANDON : < BYTE CMODCT;K WORD ENPC < CODE ERREUR. BYTE CSTOP;K < ABANDON. < < < D E L E T E N O M : < < DLTRI: EQU $ BYTE CINIT;CSTART WORD ROOT < R A C I N E D E L ' A R B R E < < ACCES 1 CARACTERE DU NOM : < N1012: EQU $ BYTE CGETCH;CGOTO WORD N1013;SEQUEN;N1013 < < CAS OU ON N'EST PAS AU BOUT DU NOM : < N1014: EQU $ BYTE CTESTV;CGOTO WORD N1016;SEQUEN;N1016 < < CAS D'1NE COINCIDENCE ENTRE LE NOM ET NC : < BYTE CCHAIN;RELATS BYTE CGOTO;K WORD SEQUEN;N1012;SEQUEN BYTE CGETCH;CGOTO WORD N1013;SEQUEN;N1013 < < CAS OU ON EST EN BOUT DE BRANCHE < ALORS QUE LE NOM N'EST PAS TERMINE : < N1020: EQU $ BYTE CMODCT;K WORD ENDI < < CAS D'UNE FIN DE SERIE : < N1015: EQU $ BYTE CTERM;CSTOP < < CAS D'UNE NON-COINCIDENCE ENTRE LE NOM ET NC : < N1016: EQU $ BYTE CCHAIN;RELATP BYTE CGOTO;K WORD N1015;N1014;N1015 < < CAS OU ON EST AU BOUT DU NOM : < N1013: EQU $ BYTE CTESTR;RELATS BYTE CGOTO;K WORD SEQUEN;N1020;N1020 < < CAS OU ON EST EN BOUT DE BRANCHE : DELETE NOM : < N1019: EQU $ BYTE CTESTR;RELATP BYTE CGOTO;K WORD SEQUEN;N1040;N1040 < < CAS OU IL N'Y A PAS DE DIVERGENCE PARALLELE : DELETE NOEUD : < BYTE MCVT?CCHAIN;RELATB BYTE CGOTO;K WORD N1018;SEQUEN;SEQUEN BYTE CDISCO;RELBM1 BYTE CDELET;CTEBM1 BYTE CGOTO;K WORD SEQUEN;N1019;SEQUEN < < FIN DE DELETE : < N1018: EQU $ BYTE CTERM;RAZCT?CSTOP < < DELETE DERNIER CARACTERE POSSIBLE : < N1040: EQU $ BYTE MCVT?CCHAIN;RELATB BYTE ETC?CSTACK;CCHAIN BYTE RELATP;CCONEC BYTE RELATB;ETC?CCONEC BYTE RELBM1;CUSTAC BYTE MCVT?CDELET;CJUMP WORD N1018 < < < I N S E R T I O N N O M : < < ILTRI: EQU $ BYTE CINIT;CSTART WORD ROOT < R A C I N E D E L ' A R B R E < < ACCES A 1 CARACTERE DU NOM ARGUMENT : < N1004: EQU $ BYTE CGETCH;CGOTO WORD N1005;SEQUEN;N1005 < < CAS OU ON N'EST PAS AU BOUT DU NOM : < N1006: EQU $ BYTE CTESTV;CGOTO WORD N1009;SEQUEN;N1007 < < CAS D'UNE COINCIDENCE : < BYTE CCHAIN;RELATS < PARCOURS SERIE DE L'ARBRE. BYTE CGOTO;K WORD N1011;N1004;N1011 < < CAS D'UNE FIN DE SERIE : < ON CONTINUE A INSERER EN SERIE... < N1010: EQU $ BYTE CCREAT;CCONEC BYTE RELATS;ETC?CCONEC BYTE RELATB;CNOP N1011: EQU $ BYTE CGETCH;CGOTO WORD SEQUEN;N1010;SEQUEN < < FIN D'INSERTION : < N1005: EQU $ BYTE CTERM;RAZCT?CSTOP < < CAS OU VALUE>VALEUR(NC) : < N1007: EQU $ BYTE CCHAIN;RELATP < PARCOURS EN PARALLELE DE L'ARBRE. BYTE CGOTO;K WORD SEQUEN;N1006;SEQUEN < < CAS D'UNE FIN DE PARALLELE, ON INSERE < LE 1ER CARACTERE EN PARALLELE, LES SUIVANTS < EN SERIE : < BYTE CCREAT;CCONEC BYTE RELATP;ETC?CCONEC BYTE RELATB;CNOP N1008: EQU $ BYTE CGETCH;CGOTO WORD N1005;SEQUEN;N1005 < < POURSUITE SERIE D'UN PARALLELE : < BYTE CCREAT;CCONEC BYTE RELATS;ETC?CCONEC BYTE RELATB;CJUMP WORD N1008 < < INSERTION AU MILIEU D'UNE RELATION : < CAS OU VALUE ... < < XBNV:: VAL BITSIG < BIT INDICATEUR DANS 'OPDEM' DE LA < PRESENCE DE LA VALEUR DANS 'ASDEM'. XWOR%1: VAL XMDSLO=B < AFIN DE PLACER 'XBNVL' DERRIERE (ET < NON PAS DANS) LE CHAMP 'XMDSLO'. XBNVL:: VAL NBITMO-XWOR%1+I < BIT VALANT 0 SI LA VALEUR FAIT 2 < OCTETS, ET 1 SI 1... < < USE L,DCT0 < < R E C U P E R A T I O N V A L U E S E R I E : < MVVCTS: EQU $ LA VAR+SAVDEM < RECUPERATION DE LA FONCTION < DEMANDEE. CPI RELATS < EST-CE LA DEMANDE DE RECUPERA- < TION DE VALUE SERIE ???? JNE Z46 < NON, RIEN A FAIRE. JMP MVVCT < OUI, VALUE SERIE. < < R E C U P E R A T I O N V A L U E P A R A L L E L E : < MVVCTP: EQU $ LA VAR+SAVDEM < FONCTION DEMANDEE. CPI RELATP < DEMANDE VALUE PARALLELE ???? JNE Z46 < NON, RIEN A FAIRE... < < R E C U P E R A T I O N V A L U E S E R I E : < MVVCT: EQU $ SBT XBNV < MEMORISONS QUE LA FONCTION < DEMANDEE EST EXECUTEE. STA VAR+SAVDEM < MAJ SAVDEM. LXI K LA &VAR+VALUE < (A)=VALUE0. ADRI I,X LB &VAR+VALUE < (B)=VALUE1. SLRD MOCG=K STZ VAR+VALLON < INDIC LONGUEUR=K A PRIORI CPI NOCMO < ON A DANS A LA LONGUEUR EN < OCTETS DE LA VALUE. JGE E995 < DANS LE CAS OU IL Y A 2 OU PLUS < DE 2 OCTETS, ON RENVOIE LES < 2 PREMIERS DANS CT (B). SWBR B,B < L'OCTET1 DE VALUE PASSE EN < OCTET DROIT DE B. JAE E996 < LA LONGUEUR EST NULLE : (A)=K. LAI MOCD < LA LONGUEUR VAUT 1, METTONS UN < MASQUE DE RECUPERATION DE L'OCTET < DROIT DE B. E996: EQU $ ANDR A,B < (B)=K, OU (B)=OCTET1 DE VALUE. IC VAR+VALLON < INDIC LONGUEUR VALEUR=1 E995: EQU $ STB VAR+NEXTSP < RETOUR PAR NEXTSP. Z46: EQU $ RSR PAGE < < < I N T E R P R E T E U R D U L A N G A G E < D E D E S C R I P T I O N E T D E < G E S T I O N D E S R E S E A U X : < < < PHILOSOPHIE : < L'ETUDE DE BEAUCOUP DE PROBLEMES PEUT SE < RAMENER A L'ETUDE D'UN ARBRE, ET COMME TOUT < ARBRE PEUT SE RAMENER A UN ARBRE BINAIRE, < IL A ETE CREE UN LANGAGE DE MANIPULATION DES < ARBRES BINAIRES. < < < FORMAT D'UN NOEUD : < MOT0 : NUMERO DU NOEUD CHAINE EN SERIE SUR < CELUI-CI, OU Q8000, S'IL N'EXISTE PAS. < MOT1 : NUMERO DU NOEUD CHAINE EN PARALLELE < SUR CELUI-CI (OU Q8000). < MOT2 : NUMERO DU NOEUD PRECEDANT CELUI-CI ; < A NOTER QUE LE NOEUD PRECEDENT EST UNIQUE < DANS UN ARBRE. < MOT3 ET SUIVANTS : RESERVES A LA VALEUR < DU NOEUD, LE 1ER OCTET CONTE- < NANT LA LONGUEU OCTET DE CETTE < VALEUR. < CETTE VALEUR PEUT ETRE ABSENTE < (CF. LE CAS DES LISTES AUX < NOEUDS NON TERMINAUX...) < < < CONVENTIONS : < NC : NOEUD COURANT DE L'ARBRE, < NT : NOEUD DE TRAVAIL (SAVE NC, CHAINAGES,...) < NUM : DESIGNE LE NUMERO D'UN NOEUD ARGUMENT < OU RESULTAT D'UNE ROUTINE SPECIFIQUE. < CT : CONTIENT L'ETAT D'EXECUTION DE L'INTERPRETEUR < (OK, ERREUR,...) < < < L A N G A G E I N T E R P R E T A T I F D E < G E S T I O N D E S A R B R E S : < < < 1- FORMAT : < LES INSTRUCTIONS SONT DE LONGUEUR < VARIABLE, MAIS ON TROUVE SYSTEMATI- < QUEMENT EN PREMIER OCTET LE CODE < OPERATION AINSI QUE C'EST INDIQUE < A LA SUITE : < < BITS0-4 : CODE OPERATION, < BIT5 : 0=RIEN, < 1=RAZ DE LA CONDITION CT (OK). < BITS6-7 : ACTION AVANT EXECUTION DE L'INSTRUCTION : < 00 : RIEN, < 01 : NT<--(NC), < 10 : NC<--(NT), < 11 : (NC)<-->(NT). < NOTA : UN CODE OPERATION NUL EST UN 'NOP'. < < 2- REPRESENTATION DES RELATIONS : < 0 : RELATION SERIE (S), < 1 : RELATION PARALLELE (P), < 2 : RELATION BACK (B). < < 3- ZONE ARGUMENT : < LA ZONE ARGUMENT D'UNE INSTRUCTION < EST SITUEE DANS LES OCTETS QUI SUI- < VENT CELUI QUI CONTIENT LE CODE < OPERATION... < < < A T T E N T I O N : < LES ZONES ARGUMENTS CONTENANT DES ADRESSES < DOIVENT SE TROUVER A DES FRONTIERES < DE MOT !!! < < < 4- LISTE DES INSTRUCTIONS DISPONIBLES : < =K : LA RELATION EXISTE. < <'12 TEST-BM1 B-1 TEST DE LA NATURE (S/P) DE B-1 : < CT=K SI B-1=S, < CT=1 SI B-1=P, < CT<0 SI B-1 N'EXISTE PAS. < <'01 CONNECT NT,NC,RELATION MEMORISE DANS NC LA RELATION < NC--(R)-->NT. < <'03 DISCONNECT NT,NC,RELATION ROMPT DANS NC LA CONNEXION < NC--(R)-->NT. < <'05 CALL @ROUTINE APPEL D'UNE ROUTINE SPECIALE < (INITIALISATION DE L'ESPACE DES < NOEUDS,...). < <'07 GOTO
, , BRANCHEMENT DANS LE LANGAGE INTER- < PRETATIF A L'ADRESSE : < : SI (CT)<0, < : SI (CT)=K, < : SI (CT)>0. < NOTA : SI ABSENTE (Q8000), < ON POURSUIT L'EXECUTION EN < SEQUENCE. < <'0F JUMP BRANCHEMENT INCONDITIONNEL < DANS LE LANGAGE INTERPRETATIF A < L'ADRESSE . < <'09 CHAIN RELATION PARCOURS DE L'ARBRE PAR CHAINAGE : < NC<--R(NC) & CT=K SI POSSIBLE, < CT=Q8000 SI CHAINAGE IMPOSSIBLE. < <'08 STACK NC EMPILE NC. < <'0A UNSTACK DEPILE NC. < <'14 INIT INITIALISATION SPECIFIQUE D'UN < < TRAVAIL, FONCTION DE LA NATURE < DE L'ESPACE. < <'0B START NUMERO NC<--NUMERO. < NOTA : NUMERO EST DANS LES 2 < OCTETS SUIVANTS LE CODE-OPERATION. < <'16 TERMIN FIN SPECIFIQUE D'UN TRAVAIL, < FONCTION DE LA NATURE DE L'ESPACE. < <'0C STOP ARRET DE L'INTERPRETATION. < <'0E VALUE NC VALUE<--VALEUR(NC). < <'10 GET-CHEMIN CHEMIN-ARG. VALUE<--MORCEAU DU CHEMIN ARGUMENT. < <'11 MODIF.CT NOMBRE CT<--NOMBRE. < < < ARGUMENTS : < (OPDEM) : INDEX DE LA 1ERE INSTRUCTION A < EXECUTER DANS LE LANGAGE. < 2 : INSERT/DELETE (MODE ECRITURE), < A : TEST EXISTENCE NOM (MODE < ECRITURE PUIS LECTURE). FGID: VAL FGID < FONCTIONS DEFINIES FGT: VAL FGT < EN TETE DU SYSTEME... < (AMDEM) : ADRESSE-OCTET D'UN CHEMIN EN MEMOIRE. < (CODEM) : LONGUEUR-OCTETS DU CHEMIN. < (ASDEM)=RELATS : DEMANDE DE LA VALEUR DU NOEUD < SUIVANT EN SERIE, < =RELATP : DEMANDE DE LA VALEUR DU NOEUD < SUIVANT EN PARALLELE. < #RELATP/RELATS : PAS DE VALEUR DEMANDEE. < < < CODES DE RETOUR (ETADEM) : < 2 FONCTTION DEMANDEE INEXISTANTE. < 4 DELETE IMPOSSIBLE. < 5 1ER CARACTERE NON RECONNU EN INSERT/DELETE. < 6 CHEMIN DE LONGUEUR NULLE. < Q8000 FIN DE SERIE/PARALLELE RENCONTREE < TROP TOT. < < < RESULTAT : < (ASDEM)=(OCTET1(VALUE)/(OCTET2(VALUE))), DANS < LE CAS D'UN 'TEST', SI LE NOM EXISTE, < ET SI AU MOINS UN NOEUD LE SUIT ; ASDEM < EST ALORS LA 1ERE PARTIE DE SA VALEUR. < BIT0(OPDEM)=1 DANS LE CAS OU ASDEM CONTIENT < LA VALEUR EVENTUELLEMENT DEMANDEE. < BIT6(OPDEM)=K: LA VALEUR PLACEE EVENTUELLEMENT DANS < ASDEM FAIT 2 OCTETS < BIT6(OPDEM)=1: CETTE VALEUR FAIT 1 OCTET < (VOIR LES BITS 'XBNV' ET 'XBNVL') < (BOX)=NOMBRE DE NOEUDS LIBRES DANS L'ARBRE ; < CETTE VALEUR EST EXPLOITEE PAR 'HDLSTN', < POUR SAVOIR S'IL PEUT RANGER LE ... < < USE W,DEM0 USE L,DCT0 < < I N I T I A L I S A T I O N S P E C I F I Q U E < D ' U N T R A V A I L S U R A R B R E : < < I20: EQU $ PSR X < PAR PRUDENCE. BSR VAR+AINIT JMP E998 < < < F I N S P E C I F I Q U E D ' U N < T R A V A I L S U R A R B R E : < < T22: EQU $ PSR X < PAR PRUDENCE. BSR VAR+ATERM JMP E998 < < < R E C U P E R A T I O N D U C H E M I N < A R G U M E N T P A R M O R C E A U X : < < < FONCTION : < ON RECUPERE ICI DE MANIERE SPECIFIQUE < A L'ESPACE UN MORCEAU DU CHEMIN < ARGUMENT, QUE L'ON RANGE AVEC SA < LONGUEUR DANS L'OCTET0 DANS < VALUE. < < CH16: EQU $ PSR X < PAR PRUDENCE. BSR VAR+GCH < RECUPERATION SPECIFIQUE DU < CHEMIN ARGUMENT. E998: EQU $ PLR X JMP E965 < VERS LA BOUCLE INTERPRETEUR. < < < S T A C K N C : < < < NOTA : POUR POUVOIR FAIRE LES TEST DE PILE < PLEINE/VIDE AU BON MOMENT, ON LAISSE INUTILISE LES 1ER ET < DERNIER MOTS DE LA PILE. < < ST8: EQU $ LAD VAR+STRI LR A,Y < (Y)=@DE LA PILE DE NC. LA VAR+NC < (A)=NUMERO DU NOEUD COURANT. PUSH < EMPILEMENT DE NC. JNC E965 < OK, VERS LA BOUCLE DE < L'INTERPRETEUR. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < JE NE SAIS PAS, MAIS EN FAIT IMPOSSIBLE... < JMP E965 < VERS LA BOUCLE DE L'INTERPRETEUR. < < < U N S T A C K N C : < < U10: EQU $ LAD VAR+STRI LR A,Y < (Y)=@PILE DE NC. PULL < DEPILEMENT DE NC. JNC SYSR81 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < JE NE SAIS PAS, MAIS EN FAIT IMPOSSIBLE... < SYSR81: EQU $ STA VAR+NC < RESTAURE NC APRES DEPILEMENT. JMP E965 < VERS LA BOUCLE DE L'INTERPRETEUR. < < < T E S T V A L E U R : < < < FONCTION : < COMPARE VALUE A VALEUR(NC). < < TE6: EQU $ PSR X < SAVE INDEX OCTET DU LANGAGE. LA VAR+NC STA VAR+NUM < PREPARATION DU NUMERO DU < NOEUD COURANT. BSR VAR+AN < ACCES AU NOEUD COURANT. < < ON A ICI : < (W)=ADRESSE DU NC EN MEMOIRE. < LBY DVALN,W < (A)=LONGUEUR OCTET DE LA VALEUR DU < NOEUD COURANT. ADRI W+NOCMO-E,A < +W POUR LA LONGUEUR... SLRS NOCMO=K < CONVERSION EN NOMBRE DE MOTS. LR A,Y < (Y)=INDEX DERNIER MOT DE LA VALEUR < DANS LE NOEUD COURANT. LXI K < (X)=INDEX D'ACCES AU 1ER MOT < DU NOEUD COURANT. E976: EQU $ < < TEST DES VALEURS "CARACTERE" : < LR Y,A < (A)=NOMBRE DE MOTS OCCUPES PAR LA < VALEUR (Y COMPRIS SON OCTET DE < LONGUEUR) : NTRN CPI W+W+NOCMO-E/NOCMO TRN < EST-CE UNE VALEUR "CARACTERE" ??? JNE E976X1 < NON, IL Y A PLUS D'UN OCTET... < < CAS DES VALEURS "CARACTERE" : < ON VA UTILISER UN ALPHABET < VIRTUEL, DONT L'ORDRE EST < FONCTION DE LA FREQUENCE < D'UTILISATION DES CARACTERES... < XWOR%1: VAL MOCD=K XWOR%1: VAL -XWOR%1 XWOR%2: VAL MOCD>XWOR%1 XWOR%3: VAL CORBT?BITPAR=FMASK(K?XWOR%2=FCINST PSR B,X,Y < SAUVEGARDES... LR X,Y < ET MISE TEMPORAIRE DE L'INDEX COURANT < DE 'VALUE' DANS 'Y'... LA DVALN,W < ACCES AU NOEUD COURANT, ANDI XWOR%3 < ON ENLEVE LA LONGUEUR DE LA VALEUR, < (ET LA PARITE QUI N'Y EST PAS...) LR A,X < (X)=CODE DU CARACTERE CONTENU DANS LE < NOEUD COURANT, LB &VAR+ATFREK < (B)=CODE VIRTUEL, FONCTION DE LA FRE- < QUENCE DE (X)... LR Y,X < (X)=INDEX DU MOT COURANT DE 'VALUE', LA &VAR+VALUE < ACCES A 'VALUE', ANDI XWOR%3 < ON ENLEVE LA LONGUEUR DE LA VALEUR, < (ET LA PARITE QUI N'Y EST PAS...) LR A,X < (X)=CODE DU CARACTERE COURANT, LA &VAR+ATFREK < (A)=CODE VIRTUEL, FONCTION DE LA FRE- < QUENCE DE (X)... CPR B,A < COMPARAISON DU CARACTERE VIRTUEL COU- < RANT (A) ET DU CARACTERE VIRTUEL CON- < TENU DANS LE NOEUD COURANT (B)... PLR B,X,Y < RESTAURATIONS... JMP E976X2 < VERS LES TESTS D'IDENTITE... < < CAS DES VALEURS CONTENANT < PLUS D'UN OCTET : < E976X1: EQU $ < < NOTA : < LA COMPARAISON SE FAIT MOT PAR MOT, < FAUT DONC EVITER LES PROBLEMES DE < FAUX NBRES NEGATIFS (CF. CARACTERE DONT < LE BIT0 EST A 1, ET QUI SE TROUVE < EN OCTET GAUCHE : ON A AINSI UN < NBRE NEGATIF...). < LA &VAR+VALUE < ACCES A UN MOT DE VALUE, CP DVALN,W < ET COMPARAISON A UN MOT DE LA < VALEUR DU NOEUD COURANT. E976X2: EQU $ < CAS DES VALEURS "CARACTERE"... JNE E977 < A LA 1ERE DIFFERENCE, ON < S'ARRETE... < < CAS DE L'EGALITE : < ADRI P,W < ACCES AU MOT SUIVANT DE LA < VALEUR DU NOEUD COURANT. ADRI I,X < ACCES AU MOT SUIVANT DE VALUE. CPR X,Y < A-T'ON EXPLORE TOUTE LA VALEUR < DU NOEUD COURANT. JNE E976 < NON, ON CONTINUE. < < CAS OU : VALUE=VALEUR(NC) : < LAI K < EN VUE DU RAZ DE CT. JMP E978 < < CAS OU : VALUE#VALEUR(NC) : < E977: EQU $ LAI BIT SBCR A ADR A,A ADRI -BIT,A E978: EQU $ < < ON A ICI : < (A)=-1 : VALUE VALEUR(NC), < STA VAR+CT < NOUVELLE CT. PLR X < RESTAURE (X)=INDEX OCTET DU LANGAGE. JMP E965 < VERS LA BOUCLE DE L'INTERPRETEUR. < < < T E S T E X I S T E N C E R E L A T I O N < R I S S U E D E N C : < < < FONCTION : < CETTE FONCTION TESTE SI LA RELATION < ARGUMENT EXISTE AU NOEUD NC ; ELLE < PSITIONNE CT=Q8000 SI NC NE < CHAINE AUCUN NOEUD PAR LA < RELATION ARGUMENT. < < TR13: EQU $ LA VAR+NC STA VAR+NUM < PREPARARTION DU NUMERO DE NC. BSR VAR+AN < ACCES NC. < < ON A ICI : < (W)=ADRESSE NC EN MEMOIRE. < LBY &VAR+ALTRI < (A)=RELATION DONT ON TESTE < L'EXISTENCE. CPI XRELAT < VALIDATION DE LA RELATION. JL SYSR82 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER VERIFIER QUE LE PROGRAMME < INTERPRETATIF EST BIEN ACCEDE (BASE < 'L' ET SON RELAI 'ALTRI', PUIS < VERIFIER QU'IL EST CORRECT... < SYSR82: EQU $ ADR A,W < (W)=@MEMOIRE DE LA REALTION < DANS NC. LA O,W < (A)=RELATION DONT ON TESTE L < L'EXISTENCE. STA VAR+CT < (CT)=Q8000, SI LA RELATION N'EXISTE < PAS, < (CT)=NUMERO DU NOEUD CHAINE PAR NC < AVEC CETTE RELATION SINON. < DONC >=K... JMP E968 < FIN DES INSTRUCTIONS DE 2 < OCTETS. < < < T E S T N A T U R E D E B - 1 : < < T18: EQU $ LA VAR+SAVREL < RECUPERATION DE LA DERNIERE < RELATION S/P TRIATEE PAR UN < CCHAIN,B. STA VAR+CT < QUE L'ON MET DANS CT... JMP E965 < VERS LA BOUCLE DE L'INTERPRETEUR. < < < T A B L E D ' I N T E R P R E T A T I O N : < < < NOTA : < SI BIT0(ADRESSE)=1 (X), L'INSTRUCTION < A UN ARGUMENT (OU DES...) DEVANT SE < TROUVER A UNE FRONTIERE DE MOT. < < INT: EQU $ WORD E965;CO1;CR2;DI3;DE4;CA5,X;TE6;GO7,X WORD ST8;CH9;U10;S11,X;E966;TR13;V14 WORD J15,X;CH16 WORD M17,X WORD T18 WORD E965;I20;E965;T22 LINT:: VAL $-INT-D < DERNIER CODE-OPERATION. < < < E N T R Y H A N D L E R : < < HDLRES: EQU $ LA ARGDEM+AMDEM BSR AMEM < GENERATION D'UN RELAI INDEXE < INDIRECT VERS LE CHEMIN ARGUMENT. < < ON A ICI : < (A)=RELAI INDIRECT/INDEXE VERS LE CHEMIN. < (X)=RANG DU 1ER CARACTERE DU CHEMIN. < SWBR X,Y ADR Y,X < (X)=NUMERO/NUMERO. STA VAR+RCHE < MISE EN PLACE DU RELAI. STA VAR+SAVREL < INITIALISATION VOLONTAIREMENT < ERRONNEE DE SAVREL, AFIN QUE SON < UTILISATION ERRONNEE ET ILLICITE < FASSE UN PLANTAGE !!!! LA ARGDEM+CODEM JAE E993 < ERREUR : CHEMIN DE LONGUEUR NULLE. ADR X,A < INITIALISATION DE LCHE : < OCTET0=RANG 1ER CARACTERE DU < CHEMIN, < OCTET1=RANG DERNIER CARACTERE DU < CHEMIN+1. STA VAR+LCHE < LONGUEUR DU CHEMIN. LA ARGDEM+OPDEM ANDI MKOPDM < ON NE CONSERVE QUE LES 4 < DERNIERS BITS DE L'OPDEM. CPI FGT < VALIDATION. JG E979 < ERREUR. LR A,X < (X)=OPDEM=INDEX INITIAL DU < LANGAGE INTERPRETATIF. JNE E981 < OPDEM#'A. < < CAS DE L'OPDEM='A : LA DEMANDE DE TYPE 'ECRITURE' (2) < SE TRANSFORMERA A LA FIN EN UNE LECTURE, CAR < ELLE RENVOIE UN RESULTAT, D'OU LA MODIFICATION < DE L'OPDEM DE LA DEMANDE (RAZ) : < STZ ARGDEM+OPDEM < MISE EN LECTURE DE LA DEMANDE < ARGUMENT A T T E N T I O N... LAI FGID < ???? E981: EQU $ CPI FGID < VALIDATION (SUITE). JNE E979 < ERREUR, FONCTION NON RECONNUE. LA ARGDEM+ASDEM < RECUPERATION ASDEM DEMANDE ARG. STA VAR+SAVDEM < &SAVE DANS DCT. PSR W < SAVE @DE LA DEMANDE ARGUMENT. STZ VAR+CT < INITIALISATION DE CT A 'OK'. STZ VAR+NEXTSP < INITIALISATION DE NEXTSP. < < < B O U C L E D E L ' I N T E R P R E T E U R : < < < UTILISATION DES REGISTRES : < (X)=INDEX DU LANGAGE (EQUIVAUT A UN COMPTEUR < ORDINAL OCTET). IL DONNE EN PERMANENCE < L'INSTRUCTION QUE L'ON EXECUTE. < (Y)=INDEX MOT DU LANGAGE INTERPRETATIF (UTILISE < PAR LES GOTO, CALL,... < (W)=ADRESSE EN MEMOIRE DU NOEUD DE NUMERO (NUM). < < E965: EQU $ LBY &VAR+ALTRI < (A)=CODE OPERATION ET INDICATEUR < DE MOVE AVANT EXECUTION. < < TEST DE L'INDICATEUR DE MODIFICATION DE CT : < XWOR%1: VAL XMRZ=K TBT NBITOC-B-XWOR%1+NBITOC JNC E982 < IL NE FAUT PAS TOUCHER A CT. STZ VAR+CT < BIT5=1 : IL FAUT RAZER CT (OK). E982: EQU $ < < TEST DES INDICATEURS DE MOVE : < LBI XMMOV ANDR A,B < (B)=INDICATEUR DE MOVE. SLRS XMCO=K < (A)=CODE OPERATION. CPI LINT < VALIDATION DU CODE-OPERATION. JLE SYSR83 BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER VERIFIER QUE L'ACCES AU < PROGRAMME EST BON ('L' ET 'ALTRI'), < PUIS QUE LUI-MEME EST BON... < SYSR83: EQU $ XR B,X < SAVE INDEX DU LANGAGE DANS B. BR &VAR+MOVT < BRANCHEMENT AU MODULE SPECIFI- < QUE DE MOVE AVANT EXECUTION. < < M O D U L E S D E M O V E : < MOV1: EQU $ LY VAR+NC STY VAR+NT < NT<--(NC). JMP MOV0 MOV2: EQU $ LY VAR+NT STY VAR+NC < NC<--(NT). JMP MOV0 MOV3: EQU $ LX VAR+NT LY VAR+NC STY VAR+NT < NT<--(NC). STX VAR+NC < NC<--(NT). MOV0: EQU $ LR B,X < RESTAURE (X)=INDEX DU LANGAGE < INTERPRETATIF. XR A,X < (A)=INDEX DU LANGAGE, < (X)=CODE-OPERATION. LB &VAR+AINT < (B)=@MODULE SPECIFIQUE DE < L'INSTRUCTION QUE L'ON VIENT < DE DECODER (CODE (X)). TBT NBITMO+BITX < L'ARGUMENT DE CETTE INSTRUCTION < S'IL EXISTE, DOIT-IL ETRE A UNE < FRONTIERE DE MOT ??? RBT NBITMO+BITX < A PRIORI, CONVERSION ADRESSE. PSR B < EMPILEMENT DE CETTE ADRESSE, EN < VUE DE FAIRE UN RSR DE BRANCHEMENT JNC E985 < NON, EB0(ADRESSE)=K. < < CAS OU L'ARGUMENT DE L'INSTRUCTION DOIT < ETRE A UNE FRONTIERE DE MOT : < BIT0(ADRESSE)=1. < SBT NBITMO-B < L'INDEX OCTET DU LANGAGE (DANS A) < EST RENDU IMPAIR A PRIORI..., < AINSI L'OCTET SUIVANT SERA A UNE < FRONTIERE DE MOT... E985: EQU $ ADRI I,A < PROGRESSION DE L'INDEX DU < LANGAGE PAR PASSAGE A L'INSTRUC- < TION SUIVANTE. LR A,X < RESTAURE (X)=INDEX LANGAGE. SLRS NOCMO=K < CONVERSION EN UN INDEX MOT. LR A,Y < (Y)=INDEX MOT DU LANGAGE. RSR < BRANCHEMENT AU MODULE SPECIFIQUE < D'INTERPRETATION. EE965: JMP E965 < RELAI VERS LA BOUCLE DE < L'INTERPRETEUR. < < S O R T I E D E L ' I N T E R P R E T E U R : < E966: EQU $ PLR W < RESTAURE (W)=@DEMANDE. LX VAR+NTONSL < (X)=NOMBRE DE NOEUDS LIBRES DANS L'ARBRE, BSR ASTBOX < QUE L'ON RANGE DANS LA 'BOX' (POUR < 'HDLSTN' UNIQUEMENT...). < < RENVOI EVENTUEL DU RESULTAT DE TEST : < LA VAR+SAVDEM JAGE Z49 < LA FONCTION EVENTUELLEMENT < DEMANDEE N'A PAS ETE EXECUTEE. LA ARGDEM+OPDEM < DANS LE CAS OU LA FONCTION < DEMANDEE A ETE EXECUTEE, ON < POSITIONNE LES BITS DE OPDEM QUI < VALIDENT ASDEM RBT XBNVL < BIT1(OPDEM)=K A PRIORI CPZ VAR+VALLON < TEST INDIC LONGUEUR VALEUR JE E966XX < LONGUEUR VALEUR=2 OCTETS OU PLUS SBT XBNVL < LONGUEUR VALEUR=1 OCTET E966XX: EQU $ SBT XBNV < BIT0(OPDEM)=1. STA ARGDEM+OPDEM LA VAR+NEXTSP < RECUPERATION DE LA VALEUR < DEMANDEE. STA ARGDEM+ASDEM < RENVOI PAR L'ASDEM DE LA DEMANDE. < < RENVOI CONDITION FINALE : < Z49: EQU $ LA VAR+CT < RECUPERATION DE LA CONDITION < FINALE, EN FIN D'INTERPRETATION. E980: EQU $ STA ETAT0 < RENVOI DE CT DANS ETAT0. RSR < C'EST TOUT... < < ERREUR FONCTION INEXISTANTE : < E979: EQU $ LAI ENFDI < CODE ERREUR 2. JMP E980 < < ERREUR CHEMIN DE LONGUEUR NULLE : < E993: EQU $ LAI ENLN < CODE-ERREUR. JMP E980 < ABORT. PAGE < < < E T A B L I S S E M E N T C O N N E X I O N : < < < FONCTION : < ETABLIT DANS NC LA RELATION : < NC--(R)-->NT. < < CO1: EQU $ LY VAR+NT < (Y)=NUMERO DU NOEUD DE TRAVAIL. E969: EQU $ < < ON A ICI : < (Y)=NUMERO DE NT SI CO1, < Q8000 SI DI3. < LA VAR+NC STA VAR+NUM < PREPARATION DU NUMERO DU NOEUD < COURANT. BSR VAR+AN < ACCES AU NOEUD DE NUMERO (NUM) < < ON A ICI : < (W)=ADRESSE DU NOEUD (NUM) EN MEMOIRE. < LBY &VAR+ALTRI < ACCES A LA RELATION DANS A : < (A)=K : S, < (A)=1 : P, < (A)=2 : B. < (A)='FF : B-1. CPI RELBM1 < EST-CE LA DEMANDE DE B-1. JNE E988 < NON S/P/B. LA VAR+SAVREL < DANS LE CAS DE B-1, ON REPREND < LA DERNIERE S/P TRAITEE LORS D'UN < CCHAIN,B. E988: EQU $ CPI XRELAT < VALIDATION DE LA RELATION. JL SYSR84 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER VERIFIER L'ACCES AU PROGRAMME < ('L' ET 'ALTRI'), PUIS LE PROGRAMME < LUI-MEME... < SYSR84: EQU $ ADR A,W < (W)=@DU CHAINAGE CONCERNANT CETTE < RELATION DANS LE NOEUD COURANT. STY O,W < DANS LE CAS 'CO1', CHAINAGE < DE NC, VERS NT PAR LA RELATION, < DANS LE CAS 'DI3', DELETE DE < CETTE RELATION. IC VAR+KWTRI < ET UNE MODIF. DE PLUS... < < ATTENTION : DANS LES 2 CAS (CO1 & DI3), ON NE VERIFIE < PAS L'ETAT DU CHAINAGE AVANT L'OPERATION... < < CAS DES INSTRUCTIONS 2 OCTETS : < E968: EQU $ ADRI I,X < ACCES INSTRUCTION SUIVANTE. JMP E965 < VERS LA BOUCLE DE L'INTERPRETEUR. < < < D I S C O N N E X I O N R E L A T I O N : < < < FONCTION : < ROMPT DANS NC LA RELATION : < NC--(R)-->NT. < < DI3: EQU $ LY INFINI < MEMORISATION DE RELATION < INEXISTANTE, A LA PLACE DU < NUMERO DU NOEUD DE TRAVAIL. JMP E969 < TRAITEMENT IDENTIQUE A CELUI < DE L'ETABLISSEMENT D'UNE < CONNEXION. < < < C R E A T I O N D ' U N N O U V E A U N O E U D ( N T ) < < < FONCTION : < CREE LE NOEUD DE VALEUR 'VALUE' ET CE < NOUVEAU NOEUD DEVIENT NT. < < CR2: EQU $ BSR VAR+CN < APPEL D'UNE ROUTINE SPECIFIQUE < DE CREATION D'UN NOEUD (ALLOCATION < D'ESPACE,...) < < ON A ICI : < (W)=ADRESSE DU NOEUD EN MEMOIRE. < (NUM)=NUMERO ALLOUE AU NOEUD PAR LA ROUTINE, < (CT)=CONDITION DE RETOUR. < LA VAR+CT < TEST DES CONDITIONS DE RETOUR. JANE E966 < ABORT INTERPRETATION. < < OK : MISE A JOUR DU NOEUD DE TRAVAIL : < NT<--(NUM). < LA VAR+NUM STA VAR+NT < < INITIALISATION DU NOEUD : < LY INFINI < AUCUNE RELATION N'EXISTE ENCORE. STY RELATS,W < RELATION S. STY RELATP,W < RELATION P. STY RELATB,W < RELATION B. STZ XNEV0,W < QUELLE PROPRETE !???!??!!! STZ XNEV1,W IC VAR+KWTRI < ET UNE MODIF. DE PLUS... PSR X < SAVE INDEX DU LANGAGE. < < MISE EN PLACE DE LA VALEUR DU NOEUD : < LXI K LBY &VAR+VALUE < (A)=NBRE D'OCTETS OCCUPES PAR < LA VALEUR DU NOEUD. E974: EQU $ ADRI Z+NOCMO-E,A < POUR Y INCLURE LA LONGUEUR < ELLE-MEME, ET ARRONDIR A LA < FRONTIERE DE MOT SUIVANTE. SLRS NOCMO=K LR A,X < (X)=NBRE DE MOTS OCCUPES PAR LA < VALEUR DU NOEUD. LR W,B ADRI DVALN,B < (B)=@ OU METTRE LA VALEUR DANS < LE NOEUD EN MEMOIRE. LA VAR+VALUE RBT BITX < (A)=@VALUE (CF. DCTTRI). CPZR Y < DISTINCTION DES FONCTIONS 'CR2' < ET 'V14', CAR IL IL FAUT INVERSER < EMETTEUR ET RECEPTEUR. JL E975 < OK, C'EST LA FONCTION 'CR2'. XR A,B < CAS DE 'V14', ON INVERSE < EMETTEUR ET RECEPTEUR. E975: EQU $ MOVE < DEPLACEMENT DE LA VALEUR DU < NOEUD (NUM). PLR X < RESTAURE (X)=INDEX DU LANGAGE. JMP E965 < VERS LA BOUCLE DE L'INTERPRETEUR. < < < D E L E T E N O E U D N T : < < < FONCTION : < DELETE LE NOEUD NT. < < DE4: EQU $ LA VAR+NT STA VAR+NUM < PREPARATION DU NUMERO DE NT, < EN VUE DE SON DELETE. BSR VAR+DN < DELETE DU NOEUD NUM, SOIT NT. IC VAR+KWTRI < ET UNE MODIF. DE PLUS... JMP E965 < VERS LA BOUCLE DE L'INTERPRETEUR. < < < M O D I F I C A T I O N D E C T : < < M17: EQU $ XR X,Y < (X)=INDEX MOT DU LANGAGE. LA &VAR+ALTRI < (A)=VALEUR A DONNER A CT. STA VAR+CT < MODIFICATION DE CT. LR Y,X < RESTAURE (X)=INDEX OCTET DU LANGAGE. JMP E972 < FIN DES INSTRUCTIONS 3 OCTETS. < < < A P P E L R O U T I N E S P E C I F I Q U E : < < CA5: EQU $ < < A T T E N T I O N : < LA ROUTINE APPELEE EST RESPONSABLE < DES SAVE/RESTORE DES REGISTRES. < XR X,Y < (X)=INDEX MOT DU LANGAGE, < (Y)=INDEX OCTET DU LANGAGE. PSR Y < SAVE INDEX OCTET DU LANGAGE. LA &VAR+ALTRI < VALIDATION. JANE SYSR85 < OK BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER VERIFIER L'ACCES AU PROGRAMME < ('L' ET 'ALTRI'), PUIS LE PROGRAMME < LUI-MEME... < SYSR85: EQU $ BSR &VAR+ALTRI < APPEL DE LA ROUTINE SPECIFIQUE. PLR X < RESTAURE (X)=INDEX OCTET DU LANGAGE. < < CAS DES INSTRUCTIONS DE 3 OCTETS DE LONG : < E972: EQU $ ADRI NOCMO,X < ACCES A L'INSTTRUCTION SUIVANTE. JMP E965 < VERS LA BOUCLE DE L'INTERPRETEUR. < < < J U M P D A N S L E L A N G A G E < I N T E R P R E T A T I F : < < J15: EQU $ XR X,Y < (Y)=INDEX OCTET DU LANGAGE. < (X)=INDEX MOT DU LANGAGE. LA &VAR+ALTRI < (A)=ADRESSE ABSOLUE DE JUMP. JAGE E991 < VERS TRAITEMENT GOTO. < < CAS D'UN JUMP EN SEQUENCE (!!!?!?) < LR Y,X < RESTAURE (X)=INDEX OCTET DU LANGAGE. JMP E972 < VERS LE TRAITEMENT DES INSTRUCTIONS < DE 3 OCTETS DE LONG. < < < G O T O D A N S L E L A N G A G E < I N T E R P R E T A T I F : < < GO7: EQU $ LA VAR+CT < ACCES A LA CONDITION, LE < BRANCHEMENT ETANT CONDITIONNEL. XR X,Y < (X)=INDEX MOT DU LANGAGE, < (Y)=INDEX OCTET DU LANGAGE. JAL E970 < CT<0 : GOTO . ADRI I,X JAE E970 < CT=K : GOTO . ADRI I,X < CT>0 : GOTO . E970: EQU $ LA &VAR+ALTRI < (A)=ADRESSE DE BRANCHEMENT DANS LE < LANGAGE INTERPRETATIF. JAL E971 < SI L'ADRESSE EST ABSENTE, ON < CONTINUE EN SEQUENCE. < < CAS D'UNE RUPTURE DE SEQUENCE : < E991: EQU $ LB VAR+ALTRI RBT NBITMO+BITX < (B)=BASE DU LANGAGE. SBR B,A < (A)=INDEX MOT DE L'INSTRUCTION < SUIVANTE DANS LE LANGAGE. JAGE SYSR86 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER VERIFIER L'ACCES AU PROGRAMME < ('L' ET 'ALTRI'), PUIS LE PROGRAMME < LUI-MEME... < SYSR86: EQU $ SLLS NOCMO=K < (A)=INDEX OCTET DE L'INSTRUCTION < SUIVANTE. LR A,X < (X)=INDEX OCTET INSTRUCTION < SUIVANTE. JMP EE965 < VERS LA BOUCLE DE L'INTERPRETEUR. < < CAS D'UNE POURSUITE EN SEQUENCE : < E971: EQU $ LR Y,X < RESTAURE (X)=INDEX OCTET DU LANGAGE XWOR%3: VAL 3 < CF. INSTRUCTIONS A 3 ADRESSES... ADRI XWOR%3*NOCMO,X < PASSAGE A L'INSTRUCTION < SUIVANTE EN SEQUENCE. JMP EE965 < VERS LA BOUCLE DE L'INTERPRETEUR. < < < S T A R T D A N S L E L A N G A G E : < < < FONCTION : < (RE-)INITIALISATION DE NC. < < S11: EQU $ XR X,Y < (Y)=INDEX OCTET DU LANGAGE. LA &VAR+ALTRI < (A)=ZONE ARGUMENT DU START. STA VAR+NC < CHANGEMENT DE NOEUD COURANT. LR Y,X < RESTAURE (X)=INDEX OCTET LANGAGE. JMP E972 < VERS LA FIN DES INSTRUCTIONS < DE 3 OCTETS. < < < C H A I N A G E D A N S L ' A R B R E : < < < FONCTION : < PARCOURS LE CHAINAGE SUIVANT POUR LA RELATION R : < NC=R(NC). < (SI POSSIBLE...) < < CH9: EQU $ LA VAR+NC STA VAR+NUM < PREPARATION DU NUMERO DE NC. BSR VAR+AN < ACCES AU NOEUD COURANT (NUM)=NC. < < ON A ICI : < (W)=ADRESSE DU NOEUD EN MEMOIRE. < LBY &VAR+ALTRI < (A)=RELATION DEMANDEE POUR < EFFECTUER LE CHAINAGE. CPI RELBM1 < EST-CE LA DEMANDE DE B-1. JNE E987 < NON S/P/B. LA VAR+SAVREL < DANS LE CAS DE B-1, ON < REPREND LA DERNIERE RELATION < S/P TRAITEE PAR UN CCHAIN,B. E987: EQU $ CPI XRELAT < VALIDATION DE LA RELATION. JL SYSR87 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER VERIFIER L'ACCES AU PROGRAMME < ('L' ET 'ALTRI'), PUIS LE PROGRAMME < LUI-MEME... < SYSR87: EQU $ ADR A,W < (W)=ADRESSE EN MEMOIRE DU CHAINAGE < DU NOEUD COURANT POUR LA < RELATION DEMANDEE. LB O,W < (B)=NUMERO DU NOEUD SUIVANT DANS < LA RELATION. IF X26*NSTREE-K,,,XEIF% IF ATTENTION : LES NUMEROS DES NOEUDS PEUVENT IF ETRE NEGATIFS, ET IL Y A ALORS CONFUSION AVEC IF 'INFINI' QUI INDIQUE L'ABSENCE DE CHAINAGE !!! XEIF%: VAL ENDIF CPZR B < CE NOEUD SUIVANT EXISTE-IL ??? JL E973 < NON, LE CHAINAGE N'EXISTE PAS. < < CAS OU LE NOEUD COURANT CHAINE UN AUTRE < NOEUD DANS LA RELATION DEMANDEE : < STZ VAR+CT < MEMORISATION CHAINAGE OK. CPI RELATB < EST-CE LA RELATION B.??? JNE E989 < NON. < < CAS D'UNE RELATION B DANS UN CCHAIN : < ALORS ON MEMORISE SA RELATION INVERSE < DITE B-1 (B MOINS 1), ET ON LA SAVE < DANS SAVREL. A NOTER QUE B-1 NE PEUT ETRE < QUE S OU P... < STB VAR+NUM < MISE DANS NUM DU FUTUR NOEUD < COURANT. PSR B < PAR PRUDENCE. BSR VAR+AN < ACCES A L'ADRESSE MEMOIRE < DU FUTUR NOEUD COURANT. PLR B < < ON A ICI : < (W)=ADRESSE MEMOIRE DU FUTUR NOEUD COURANT. < LA VAR+NC < (A)=NOEUD COURANT ACTUEL. LYI RELATS < RELATION S A PRIORI. CP RELATS,W < LE NOEUD CHAINE EN SERIE PAR < LE FUTUR NOEUD COURANT EST-IL < LE NOEUD COURANT ACTUEL (A) ????? JE E990 < OUI, DONC : B-1=S. LYI RELATP < NON, ESSAYONS LA RELATION P. CP RELATP,W < LE NOEUD CHAINE EN PARALLELE < PAR LE FUTUR NOEUD COURANT < EST-IL LE NOEUD COURANT ACTUEL ???? JE E990 < OUI, DONC : B-1=P. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < MYSTERE ET BOULES DE GOMME... < PEUT-ETRE LA PAGE COURANTE DE < L'ARBRE A-T'ELLE ETE MAL CHARGEE < (ERREUR DISQUE...)... < E990: EQU $ STY VAR+SAVREL < SAVE B-1 DANS SAVREL. E989: EQU $ STB VAR+NC < CHANGEMENT DE NOEUD COURANT. < NC=R(NC), AVEC : R=S/P/B. JMP E968 < VERS LA FIN DES INSTRUCTIONS DE < 2 OCTETS DE LONG. < < CAS D'UN CHAINAGE INEXISTANT : < (SOIT CHAINAGE=Q8000) < E973: EQU $ STB VAR+CT < MEMORISATION DE CE CHAINAGE < INEXISTANT PAR : CT=Q8000. JMP E968 < VERS LA FIN DES INSTRUCTIONS < DE 2 OCTETS DE LONG. < I M P O R T A N T : NC NE CHANGE < PAS LORSQUE LE CHAINAGE N'EXISTE < PAS. < < < V A L E U R D ' U N N O E U D : < < < FONCTION : < FAIT VALUE=VALEUR(NC). < < V14: EQU $ LA VAR+NC STA VAR+NUM < PREPARATION DU NUMERO DU NOEUD < COURANT. BSR VAR+AN < ACCES AU NOEUD COURANT (NC). < < ON A ICI : < (W)=ADRESSE DE NC EN MEMOIRE. < LYI K < MEMORISONS PAR (Y)=K, QUE C'EST < LA FONCTION V14. PSR X < SAVE INDEX OCTET DU LANGAGE. LBY DVALN,W < (A)=LONGUEUR DE LA VALEUR < DU NOEUD NC. JMP E974 < VERS L'ACCES A LA VALEUR. PAGE CALL #SISP CMS5 DOL2# CALL #SISP CMS5 CHECK# < < < I N I T I A L I S A T I O N : < < < FONCTION : < CE MODULE PERMET DE METTRE LE < HANDLER EN ATTENTE EVENTUELLE DE < FIN DE PRE-CHARGEMENT DE LA RACINE < DE L'ARBRE. < < ABTRI: EQU $ WAIT VAR+DEMTRI+X18 < ATTENTE EVENTUELLE DE FIN < DE PRE-CHARGEMENT. RSR < < < F I N D E T R A V A I L : < < < FONCTION : < CE MODULE REECRIT LE SECTEUR < COURANT (S'IL A ETE MODIFIE), < PUIS FAIT UNE DEMANDE DE RE-CHARGEMENT < DE LA RACINE DE L'ARBRE SANS < ATENTE DE FIN D'E/S AFIN DE MAXIMISER < LA MULTIPROGRAMMATION. < < RBTRI: EQU $ BSR VAR+ASP2 < SAUVEGARDE EVENTUELLE DU SECTEUR < COURANT. < < ON A ICI : < BETA(WEIO(DEMTRI))=K, < < (W)=ADRESSE DEMTRI (E/S DISQUE). IC WEIO < BETA(WEIO) EST MIS A 1 AFIN < QUE SI LE PRE-CHARGEMENT DE < LA RACINE N'EST PAS LANCE, ON < NE BLOQUE PAS A L'ENTREE < SUIVANTE DANS LE HANDLER !!! LA VAR+TAS < (A)=@1ER SECTEUR DE L'ARBRE. IF ROOT,,XEIF%, ADRI ROOT,A < (A)=@SECTEUR DE LA RACINE. XEIF%: VAL ENDIF CP VAR+STC < LE SECTEUR COURANT SERAIT-IL < PAR HASARD LA RACINE DE L'ARBRE?? JE Z1100 < OUI, DONC RIEN A FAIRE !!! < < PRE-CHARGEMENT DE LA RACINE DE L'ARBRE : < STA ARGDEM+ASDEM < MISE DE L'ADRESSE-SECTEUR < DE LA RACINE DANS DEMTRI. STZ ARGDEM+OPDEM < MISE DE DEMTRI EN LECTURE. BSR ACHAND < ENVOI DE LA DEMANDE DE PRE- < CHARGEMENT DE LA RACINE SANS < ATTENTE DE FIN D'OPERATION !!! STA VAR+STC < LA RACINE DE L'ARBRE DEVIENT < LE NOUVEAU SECTEUR COURANT. Z1100: EQU $ RSR PAGE < < < A C C E S 1 E R C A R A C T E R E : < < < RESULTAT : < CT=-2 : INSERT ("+"). < CT=K : DELETE ("-"). < CT=1 : ERREUR. < < XXCTP:: VAL SPLUS-SMOINS < "+", XXCTM:: VAL SMOINS-SMOINS < "-", XXCTE:: VAL EXIST < ERREUR... IF XXCTP-XXCTE,XEIF%,,XEIF% IF ATTENTION : 'XXCTP' ET 'XXCTE' DOIVENT DIFFERE !!! XEIF%: VAL ENDIF IF XXCTM-XXCTE,XEIF%,,XEIF% IF ATTENTION : 'XXCTM' ET 'XXCTE' DOIVENT DIFFERER !!! XEIF%: VAL ENDIF < < CDITRI: EQU $ LBY VAR+LCHE < ACCES A L'INDEX COURANT DU < CHEMIN ARGUMENT. LR A,X LBY &VAR+RCHE < ACCES AU 1ER CARACTERE < DU CHEMIN. ADRI -SMOINS,A < ON RETRANCHE "-". JAE E992 < C'ETAIT "-" CT=K : DELETE. CPI XXCTP JE E992 < C'ETAIT "+" CT<0 : INSERT. LAI XXCTE < ERREUR : CARACTERE DIFFERENT < DE "+" ET "-". E992: EQU $ STA VAR+CT < RENVOI DU CODE DE RECUPERA- < -TION DU 1ER CARACTERE DANS CT. LR X,A ADRI I,A < PROGRESSION INDEX COURANT DU < CHEMIN ARGUMENT. STBY VAR+LCHE < & SAVE IT... RSR PAGE < < < A C C E S A U N C A R A C T E R E < D ' U N M O T : < < < A T T E N T I O N : < DANS LE CAS OU LE CARACTERE RECUPERE < DANS LE CHEMIN EST NUL, ON INSERE COMME < VALEUR DU NOEUD, LE CONTENU DE SAVDEM !!! < (A LA PLACE DU '0'). < < < A T T E N T I O N : < LE BIT 0 DE CHAQUE CARACTERE EST < RAZE A PRIORI (PARITE) !!!! < < GETCAR: EQU $ LB VAR+LCHE < < NOTA : < OCTET0(LCHE)=INDEX COURANT DU CHEMIN, < OCTET1(LCHE)=LONGUEUR DU CHEMIN. < (TOUT EN OCTETS). < SWBR B,A CPR A,B JE E984 < ON EST ARRIVE AU BOUT DU < CHEMIN. < < CAS OU ON N'EST PAS AU BOUT DU CHEMIN : < ANDI MOCD LR A,X < (X)=INDEX COURANT DU CHEMIN. STZ VAR+VALUE1 < RAZ OCTET2 ET OCTET3 DE LA < VALEUR A PRIORI, AFIN DE NE PAS < CONSERVER UNE INFORMATION < ANTERIEURE NON SIGNIFICATIVE !!! LBY &VAR+RCHE < (A)=UN CARACTERE DU CHEMIN. JAE Z16 < SI LE CARACTERE EST NUL, C'EST < UNE DEMANDE D'INSERTION DE < SAVDEM COMME VALEUR DU NOEUD. < < CAS GENERAL : < RBT BITPAR < RAZ A PRIORI DU BIT DE PARITE. XWOR%1: VAL MOCG=K XWOR%1: VAL BIT>XWOR%1=K SBT NBITMO-B-XWOR%1 < MISE EN PLACE D'UNE LONGUEUR < D'UN OCTET. Z17: EQU $ STA VAR+VALUE0 < LONGUEUR VALEUR+OCTET0. ADRI I,X < PROGRESSION DE L'INDEX CHEMIN. LR X,A STBY VAR+LCHE < & SAVE IT... STZ VAR+CT < MEMORISATION SORTIE OK. E984XX: EQU $ RSR < < CAS DU BOUT DU CHEMIN : < XXCTF:: VAL XXCTE+W+W < FIN DE CHEMIN... E984: EQU $ LAI XXCTF < CODE DE FIN DE CHEMIN. STA VAR+CT < MEMORISATION FIN ANORMALE. JMP E984XX < VERS LA SORTIE... < < MISE DE SAVDEM COMME VALEUR D'UN NOEUD : < Z16: EQU $ LA VAR+SAVDEM STBY VAR+VALUE1 < RANGEMENT DE L'OCTET1 DE SAVDEM. SLRS MOCG=K < RECUPERATION OCTET0 DE SAVDEM. XWOR%1: VAL MOCG=K XWOR%1: VAL NBITMO-B-XWOR%1 XWOR%2: VAL NOCMO=K < POUR INSERER UNE LONGUEUR DE "2"... SBT XWOR%1-XWOR%2 < MISE EN PLACE D'UNE LONGUEUR < DE 2 OCTETS. JMP Z17 < VERS LE RANGEMENT. PAGE < < < C A L C U L D E L ' A D R E S S E < S E C T E U R D ' U N N O E U D : < < < ARGUMENT : < NUM=NUMERO DU NOEUD. < < < RESULTAT : < (X)=NUMERO DU SECTEUR (K A NSTREE-Z), < (Y)=ADRESSE DU SECTEUR SUR 'DKF'. < COMPARAISON ENTRE STC ET Y. < < SP1: EQU $ LA VAR+NUM < (A)=NUMERO DU NOEUD. XWOR%1: VAL MKNE)MMOT=K < POUR UN DECALAGE A GAUCHE, XWOR%2: VAL -XWOR%1 < POUR UN DECALAGE A DROITE... IF NSTREE>XWOR%1>XWOR%2-NSTREE,,XEIF%, IF ATTENTION : LE NUMERO DE NOEUD OBTENU PAR IF CONCATENATION D'UN NUMERO DE SECTEUR DANS IF L'ARBRE ET D'UN NUMERO DE NOEUD DANS LE IF SECTEUR NE TIENT PAS SUR UN MOT !!! XEIF%: VAL ENDIF JAGE SYSR88 < OK, LE NOEUD PARAIT CATHOLIQUE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < D'ABORD VOIR D'OU VIENT CE NOEUD < BIZARRE, PUIS ENSUITE SI L'ON RELANCE < ETRE TRES PRUDENT !!! < NE PAS OUBLIER QU'UN NUMERO DE NOEUD < NE PEUT ETRE NEGATIF, DE PAR LES TESTS < DE FIN DE CHAINAGE (PAR RAPPORT A < 'INFINI') QUE FAIT LE 'SGN'... < SYSR88: EQU $ IF NSTREE>XWOR%1-K,,,XEIF% IF ATTENTION : IL VA Y AVOIR CONFUSION IF LORS DES TESTS DE FIN DE CHAINAGE DANS IF L'ARBRE DU 'SGN' (VOIR 'INFINI'...) !!! XEIF%: VAL ENDIF SLRS MKNE)MFFFF=K < RECUPERATION DU NUMERO DE SECTEUR LR A,X < (X)=NUMERO DU SECTEUR DANS L'ARBRE < (ENTRE 0 ET NSTREE-Z). JAL SP1X1 < BERK, POUAHHH, QUEL VILAIN NUMERO DE < SECTEUR DANS L'ARBRE... LRM A WORD NSTREE-Z < (A)=PLUS GRAND NUMERO DE SECTEUR DANS < L'ARBRE, CPR A,X < ALORS LE NUMERO DE SECTEUR QUE L'ON < VIENT DE CALCULER EST-IL BON ??? JLE SP1X2 < OUI, (X)<=(A)... SP1X1: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT ON A PU < TROUVER UN NUMERO DE SECTEUR < QUI NE SOIT PAS DANS L'ARBRE !!! < ATTENTION : FAIRE VACHEMENT < GAFFE SI LE SYSTEME EST RELANCE !!! < SP1X2: EQU $ LR X,A < RESTAURE : < (A)=NUMERO DU SECTEUR DANS L'ARBRE... AD VAR+TAS < TRANSLATION DUE A L'ALLOCATEUR < DISQUE ET AU SGF. LR A,Y < (Y)=@SECTEUR. CP VAR+STC < LE NOEUD APPARTIENT-IL AU < SECTEUR COURANT ???? RSR < TEST EN RETOUR POSSIBLE. PAGE < < < R E E C R I T U R E S E C T E U R C O U R A N T : < < < RESULTAT : < (W)=ADRESSE DEMANDE D'E/S DISQUE. < < SP2: EQU $ LAD VAR+DEMTRI LR A,W < (W)=@DEMANDE D'E/S SUR DISQUE. LA VAR+KWTRI < LE SECTEUR A-T'IL ETE MODIFIE < PENDANT SON SEJOUR EN MEMOIRE ???? JAE Z11 < NON, DON REECRITURE INUTILE. < < CAS OU LA REECRITURE DU SECTEUR COURANT < EST NECESSAIRE, CAR IL A ETE MIS A JOUR : < LAI FGW STA ARGDEM+OPDEM < MISE EN ECRITURE DE DEMTRI. LA VAR+STC JAG SYSR89 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < IL FAUT RECALCULER A LA MAIN < L'ADRESSE DU SECTEUR COURANT, A PARTIR < DU NOEUD COURANT, ET ENSUITE... < SYSR89: EQU $ STA ARGDEM+ASDEM < ASDEM=@SECTEUR COURANT. BSR ACHAND < ENVOI DE LA DEMANDE PRIORITAIRE < D'ECRITURE. STZ VAR+KWTRI < RAZ DU COMPTEUR DE MISE A JOUR. BSR ACHANW < ATTENTE DE FIN D'ECHANGE. Z11: EQU $ RSR PAGE < < < I N I T I A L I S A T I O N S E C T E U R < E N M E M O I R E : < < < ARGUMENT : < (X)=NUMERO DU SECTEUR QUE L'ON INITIALISE. < (A)=ADRESSE DU RELAI VERS TOSA1 (ATOSA1). < < < RESULTAT : < (W)=ADRESSE DU BUFFER DU SECTEUR COURANT. < < < DETRUIT Y. < < SP3: EQU $ LYI FONRB0 < FONCTION 'RESET A 0' ; EN < EFFET LE SECTEUR COURANT SERA < BIENTOT PARTIELLEMENT OCCUPE. BSR ATMOBT < DONNE : < (A)=ADRESSE DE 'TOSA1'. BSR VAR+ASP31 < (A)=(W)=ADRESSE DU BUFFER DU SECTEUR < COURANT. < < NETTOYAGE BRUTAL : < PSR A,X,W < SAUVEGARDES... LA INFINI < (A)=VALEUR QUE L'ON VA METTRE DANS TOUT < LE SECTEUR A PRIORI ('INFINI' ETANT < BIEN CAR INDIQUE UNE FIN DE... ET < DONC SI DES NOEUDS INEXISTANTS SONT < UTILISES, ON POURRA PEUT-ETRE LE < DETECTER PAR CE MOYEN...). LXI YY7 < (X)=NOMBRE DE MOTS A NETTOYER... SP3A1: EQU $ STA O,W < NETTOYAGE, ADRI D,W < ET PASSAGE AU MOT SUIVANT, JDX SP3A1 < S'IL EXISTE... PLR A,X,W < ET RESTAURATIONS... < < INITIALISATION DES "LIBERTES" : < LAI X26 STA XSNN,W < INITIALISATION DU NOMBRE DE < NOEUDS LIBRES DANS LE SECTEUR. LAI XINN0 < PREPARATION DE LA TABLE < D'OCCUPATION DES NOEUDS DU < SECTEUR. CPZR X < EST-CE LE SECTEUR DE LA RACINE. JNE Z15 < NON. IF ROOT-K,,XEIF%, IF ATTENTION : CE QUI PRECEDE EST IDIOT !!! XEIF%: VAL ENDIF < < CAS DU SECTEUR DE LA RACINE : < DC XSNN,W < OCCUPATION A PRIORI DU NOEUD < DE LA RACINE. < < INITIALISATION DE LA RACINE : < LB INFINI STB XSLN+XNESER,W < RELATION S DE LA RACINE. STB XSLN+XNEPAR,W < RELATION P DE LA RACINE. STB XSLN+XNEBAC,W < RELATION B DE LA RACINE. LBI EON < LA RACINE GENERALE DE L'ARBRE < DU SYSTEME EST FAITE DU CARACTERE < !!!! XWOR%1: VAL MOCG=K XWOR%1: VAL NBITMO-B-XWOR%1 XWOR%2: VAL BIT=K < POUR DISPOSER UNE LONGUEUR "1"... SBT NBITMO+XWOR%1-XWOR%2 < MISE EN PLACE D'UNE LONGUEUR < DE 1 CARACTERE. STB XSLN+XNEV0,W < VALEUR DE LA RACINE. STZ XSLN+XNEV1,W < RAZ DE LA VALEUR DE LA RACINE. RBT L < OCCUPATION DU NOEUD DE LA RACINE. Z15: EQU $ < < INITIALISATION DE LA CARTE D'OCCUPATION < DES NOEUDS DU SECTEUR : < STA XSAN+K,W LAI XINN1 STA XSAN+XLXSAN-Z,W IF XLXSAN-2,,XEIF%, IF CE QUI PRECEDE EST IDIOT !!! XEIF%: VAL ENDIF BSR VAR+ASP30 < MISE A JOUR DE LA LISTE 'LMAXSN'... RSR < C'EST TOUT. PAGE < < < L E C T U R E S E C T E U R : < < < ARGUMENT : < (Y)=ADRESSE SECTEUR, < (W)=ADRESSE DEMANDE D'E/S DISQUE 'DKF'. < < SP4: EQU $ < < OPERATION DE LECTURE DU < SECTEUR ARGUMENT (Y) : < STY ARGDEM+ASDEM < ASDEM=@SECTEUR ARGUMENT (Y). STZ ARGDEM+OPDEM < MISE EN LECTURE DE DEMTRI. IF FGR-K,,XEIF%, IF ATTENTION : SI 'FGR' N'EST PAS NUL CE QUI PRECEDE, IF EST STUPIDE (IL DOIT EN ETRE DE MEME AILLEURS) !!! XEIF%: VAL ENDIF SP4X4: EQU $ < ITERATION SUR ERREUR DE LECTURE NON < DETECTEE PAR 'ETADEM'... BSR ACHAND < ENVOI DE LA DEMANDE DE LECTURE < PRIORITAIRE. BSR ACHANW < ATTENTE DE FIN D'ECHANGE. < < VALIDATION DU SECTEUR LU : < PSR A,B,X,W < SAUVEGARDES DIVERSES... BSR VAR+ASP31 < RENVOIE : < (A)=(W)=ADRESSE DU BUFFER EN MEMOIRE, LA XSAN+K,W < (A,B)=LISTE D'OCCUPATION DES NOEUDS LB XSAN+XLXSAN-Z,W < DU SECTEUR COURANT, LX XSNN,W LR X,W < (W)=NOMBRE DE NOEUDS LIBRES ; ON VA DONC < VERIFIER QUE LE NOMBRE DE BITS A 1 < DANS (A,B) EST EGAL A (W)... SP4X1: EQU $ DBT < RECHERCHE DU NOEUD LIBRE COURANT : JC SP4X2 < IL N'EXISTE PAS, ON ARRETE LE COMPTAGE... RBT L,X < IL EXISTE, ON L'EFFACE, ADRI -I,W < ET ON LE DECOMPTE... JMP SP4X1 < ET AU SUIVANT... SP4X2: EQU $ CPZR W < A-T'ON TROUVE AUTANT DE BITS A 1 DANS < 'XSAN' QUE 'XSNN' L'INDIQUAIT ??? PLR A,B,X,W < RESTAURATIONS... JE SP4X3 < OUI, C'EST BON... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE : < VERIFIER LE BUFFER COURANT, ET < AUSSI LA PAGE DE MEMOIRE VIRTUELLE < 'DKA' ASSOCIEE ; VERIFIER QU'IL < S'AGIT BIEN D'UN MORCEAU DE < L'ARBRE... PUIS REITERER LA < LECTURE !!! < JMP SP4X4 < ET ALLONS REFAIRE LA LECTURE... < (OU AUTRE CHOSE...) SP4X3: EQU $ < < GESTION DE 'LMAXSN' : < BSR VAR+ASP30 < MISE A JOUR DE LA LISTE 'LMAXSN'... < < ET RETOUR : < RSR < ET RETOUR COMMUN A 'SP3' ET 'SP4'... PAGE < < < G E S T I O N D E L A L I S T E ' L M A X S N ' : < < < FONCTION : < CETTE LISTE POSSEDE AUTANT D'ENTREES < QU'IL EST POSSIBLE D'AVOIR DE NOEUDS < LIBRES POUR UN SECTEUR NON SATURE ; < DANS L'ENTREE DE RANG (X), ELLE MEMO- < RISE LES 2 DERNIERS SECTEURS RENCONTRES < POSSEDANT (X) NOEUDS LIBRES... < ELLE EST MISE A JOUR APRES CHAQUE LECTURE < OU INITIALISATION EN MEMOIRE D'UN < SECTEUR, ET APRES CHAQUE MODIFICA- < DU COMPTEUR 'XSNN' DU SECTEUR COURANT... < < < NOTA : < LE SECTEUR COURANT LORSQU'IL < EST PRESENT DANS LA LISTE 'LMAXSN', < N'EST DEPLACE DE SA "CASE" COURANTE < A L'UNE DES 2 VOISINNES (ANTERIEURE < OU POSTERIEURE) QUE SI CELLES-CI < DISPOSENT D'AU MOINS UNE ENTREE < LIBRE ('INFINI'), ET CECI AFIN < D'EVITER QUE LORS DE L'ALLOCATION < DES NOEUDS D'UN NOM, UN MEME < SECTEUR DESCENDE TOUT OU PARTIE < DE 'LMAXSN', ECRASANT AINSI D'AUTRES < SECTEURS QUI AURAIENT PU ETRE < UTILES ULETERIEUREMENT. D'AUTRE < PART, LE SECTEUR COURANT ETANT < LE 'STC' ("LAPALISSADE"...), < C'EST SON EXISTENCE QUE L'ON < TESTE DANS 'CNTRI' AVANT DE < CHERCHER UN NOUVEAU SECTEUR COURANT < VIA 'LMAXSN', 'TOSA1', 'TOSA2'... < CE N'EST DONC PAS GRAVE QU'IL NE < SOIT PLUS DANS 'LMAXSN'... < < < ARGUMENT : < (STC)=ADRESSE (ET NON PAS NUMERO RELATIF < DANS L'ARBRE) DU SECTEUR COURANT. < < < RESULTATS : < LES INDICATEURS SONT POSITIONNES PAR < UN 'CPZ' SUR 'XSNN' AFIN D'ETRE COMPATI- < BLE AVEC LE CODE SUIVANT LES 'IC'/'DC' SUR < 'XSNN'... < < SP30: EQU $ PSR A,B,X,Y < SAUVEGARDES ESSENTIELLES... PSR W BSR VAR+ASP31 < (A)=(W)=ADRESSE DU BUFFER DU SECTEUR < COURANT EN MEMOIRE. < < RECHERCHE DU SECTEUR COURANT : < LXI X26 < (X)=INDEX DE 'LMAXSN', < =NOMBRE DE NOEUDS LIBRES CONTENUS < DANS LE SECTEUR DESIGNE PAR L'ENTREE < COURANTE. LY VAR+STC < (Y)=ADRESSE DU SECTEUR COURANT, SP301: EQU $ BSR VAR+ASP32 < A-T'ON TROUVE LE SECTEUR COURANT ??? JE SP302 < OUI, ALLONS LE RETIRER... JDX SP301 < NON, AU PRECEDENT... < < INSERTION (SI PAS TROUVE CI-DESSUS), < OU RE-INSERTION A LA BONNE PLACE S'IL < FUT RENCONTRE PRECEDEMMENT : < SP303: EQU $ LX XSNN,W < (X)=NOMBRE DE NOEUDS LIBRES DU SECTEUR < COURANT ; IL VA SERVIR D'INDEX DE < MISE A JOUR DE 'LMAXSN'... LR X,A < (A)=NOMBRE DE NOEUDS LIBRES COURANT... JAGE SP305 < OK, CE NOMBRE EST VALIDE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < VOIR COMMENT LE NOMBRE DE NOEUDS < LIBRES PEUT ETRE NEGATIF !!! < JMP SP304 < ET ON SAUTE LA MISE A JOUR... SP305: EQU $ CP VAR+MINX26 < LE SECTEUR COURANT EST-IL AU PLANCHER ??? JLE SP304 < OUI, ON NE L'INSERE PAS... LA &VAR+ALMXS1 < (A,B)=ENTREE COURANTE DE LA LISTE, LB &VAR+ALMXS2 BSR VAR+ASP32 < LE SECTEUR COURANT (Y) EST-IL LA ??? JE SP304 < OUI IL ETAIT DEJA LA (DANS 'A' OU DANS < 'B' MIS DANS 'A'...), DONC RIEN A FAIRE. JAL SP308 < NON, LE SECTEUR COURANT N'ETAIT PAS LA, < ET 'A' EST LIBRE DANS L'ENTREE COURANTE. XR A,B < LE SECTEUR COURANT N'ETAIT PAS LA, ET < 'A' N'ETAIT PAS LIBRE, ET ON VA ALORS < EXAMINER 'B' : JAGE SP304 < 'B' EST DEJA OCCUPE : ON N'INSERE DONC < PAS LE SECTEUR COURANT (Y) AFIN D'EVITER < QUE LORS DE L'INSERTION DES NOEUDS D'UN < NOM, UN MEME SECTEUR SE METTE A DESCEN- < DRE 'LMAXSN', ET AINSI ELIMINER TOUT < UN TAS D'AUTRES SECTEURS... SP308: EQU $ LR Y,A < LE SECTEUR COURANT (Y) EST MIS DANS 'A' < LIBRE, OU BIEN DANS L'ANCIEN 'B' LIBRE... STA &VAR+ALMXS1 < ET ON MEMORISE AINSI LE DERNIER SECTEUR STB &VAR+ALMXS2 < RENCONTRE POSSEDANT (X) NOEUDS LIBRES ; < A NOTER QUE C'EST L'ADRESSE ET NON LE < NUMERO DE SECTEURS QUI EST INSERE... < < RETOUR : < SP304: EQU $ CPZ XSNN,W < POUR LA COMPATIBILITE AVEC LES EVENTUELS < 'IC'/'DC' QUI PRECEDENT L'APPEL A 'SP30'. PLR W PLR A,B,X,Y < RESTAURATIONS, RSR < ET RETOUR... < < SUPPRESSION DU SECTEUR COURANT < LORSQU'IL FIGURE ANTERIEUREMENT < DANS 'LMAXSN' : < SP302: EQU $ LA INFINI < EN EFFET, 'SP32' A TROUVE LE SECTEUR < COURANT (Y) SOIT DIRECTEMENT DANS 'A', < SOIT DANS 'B', ET ALORS A PERMUTE 'A' < ET 'B'... STA &VAR+ALMXS1 < ET VOILA, ON MET A LA PLACE DU SECTEUR STB &VAR+ALMXS2 < COURANT 'Q8000'... IF Q8000-K,XEIF%,, IF ATTENTION : LES TESTS QUI SERONT FAITS IF SUR L'OCCUPATION DE 'LMAXSN' MERDERONT !!! XEIF%: VAL ENDIF < < QUELQUES VALIDATIONS DE CETTE METHODE : < XWOR%1: VAL +I XWOR%2: VAL -I IF XWOR%1-XWOR%2/XXXMOY-XWOR%1,,XEIF%, IF ATTENTION : LES TESTS SUIVANTS VONT MERDER !!! XEIF%: VAL ENDIF IF XWOR%1+XWOR%2/XXXMOY,,XEIF%, IF ATTENTION : LES TESTS SUIVANTS VONT MERDER !!! XEIF%: VAL ENDIF LA XSNN,W < (A)=NOMBRE DE NOEUDS LIBRES COURANTS, SBR X,A < (A)=VARIATION DU NOEUDS LIBRES COURANTS= < =NOMBRE DE NOEUDS LIBRES COURANTS- < NOMBRE DE NOEUDS LIBRES ANTERIEURS. CPI XWOR%1 < VALIDATION SUPERIEURE... JG SP306 < TROP GRANDE, ERREUR... CPI XWOR%2 < VALIDATION INFERIEURE... JGE SP307 < OK, (A)>=XWOR%2 OU (A)<=XWOR%1... SP306: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER VOIR LE SECTEUR COURANT ET < SON BUFFER, VOIR SA VERSION COURANTE < EN MEMOIRE VIRTUELLE 'DKA' ET SUR LE < DISQUE 'DKF'... < SP307: EQU $ JMP SP303 < VERS LA RE-INSERTION DU SECTEUR COURANT < DANS L'ENTREE DE RANG 'XSNN' DE LA < LISTE 'LMAXSN'... PAGE < < < R E C H E R C H E D U S E C T E U R C O U R A N T < D A N S L ' E N T R E E C O U R A N T E D E L A < L I S T E ' L M A X S N ' : < < < ARGUMENTS : < (X)=INDEX COURANT DE LA LISTE, < (Y)=SECTEUR COURANT 'STC'. < < < RESULTATS : < (A,B)=ENTREE COURANTE DE LA LISTE 'LMAXSN' < AVEC UNE PERMUTATION DES 2 MOTS SI < LE PREMIER NE CONTENAIT PAS LE SECTEUR < COURANT INITIALEMENT. < LES INDICATEURS SONT POSITIONNES SUR 'JE TROUVE'... < < SP32: EQU $ LA &VAR+ALMXS1 < (A,B)=ENTREE COURANTE, LB &VAR+ALMXS2 CPR Y,A < LE SECTEUR COURANT EST-IL DANS LE < PREMIER MOT ??? JE SP321 < OUI... XR A,B < NON, ON PERMUTE ALORS SYSTEMATIQUEMENT < LES 2 MOTS, QUELQUE SOIT LE RESULTAT DU < TEST SUIVANT... CPR Y,A < LE SECTEUR COURANT EST-IL DANS L'ANCIEN < DEUXIEME MOT ??? SP321: EQU $ RSR < RETOUR, AVEC (A)=SECTEUR COURANT SI < L'UN DES 2 TESTS A ETE POSITIF... PAGE < < < R E C U P E R A T I O N D E L ' A D R E S S E < D U B U F F E R D U S E C T E U R C O U R A N T : < < < RESULTAT : < (A)=(W)=ADRESSE DU BUFFER DU SECTEUR COURANT. < < SP31: EQU $ LA VAR+ABSTC < (A)=ADRESSE DU BUFFER... LR A,W < (W)=ADRESSE DU BUFFER DU SECTEUR... RSR < FACILE ?!??!?! PAGE < < < T E S T D ' E N T I E R E L I B E R T E < D ' U N S E C T E U R : < < < ARGUMENT : < (X)=NUMERO DU SECTEUR (K A NSTREE-Z). < < < RESULTAT : < CARY POUR JC/JNC. < < SP5: EQU $ PSR Y LAD VAR+ATOSA1 < (A)=@DU RELAI VERS TOSA1-1. LYI FONTB < FONCTION DE TEST BIT. BSR ATMOBT < TEST DE L'ETAT DU SECTEUR (X) < DANS TOSA1. PLR Y RSR PAGE < < < D E L E T E N O E U D : < < < ARGUMENT : < NUM=NUMERO DU NOEUD A DELETER. < < DNTRI: EQU $ PSR X,Y BSR VAR+AASP1 < < ON A ICI : < (X)=NUMERO DU SECTEUR AUQUEL APPARTIENT LE NOEUD, < (Y)=ADRESSE DE CE SECTEUR. < JE Z10 < LE SECTEUR AUQUEL APPARTIENT LE < NOEUD A DELETER EST LE SECTEUR < COURANT. < < CAS OU LE SECTEUR AUQUEL APPARTIENT LE NOEUD < A DELETER N'EST PAS LE SECTEUR COURANT : < < < REECRITURE EVENTUELLE DE STC : < BSR VAR+ASP2 < < ON A ICI : < (W)=ADRESSE DEMANDE D'E/S SUR 'DKF'. < STY VAR+STC < NOUVEAU SECTEUR COURANT (Y). BSR VAR+ASP5 < TEST DE L'ETAT DU NOUVEAU SECTEUR < COURANT (DE NUMERO (X)). JNC SYSR8A < OK, IL EXISTE SUR DISQUE. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < JE NE SAIS PAS, MAIS ATTENTION, < SI ON CONTINUE EN SEQUENCE, ON RISQUE < DE LIRE UN SECTEUR N'APPARTENANT PAS < A LA L'ARBRE, ET DONC DE SE PERDRE < COMPLETEMENT... < SYSR8A: EQU $ < < LECTURE DU NOUVEAU SECTEUR COURANT : < BSR VAR+ASP4 Z10: EQU $ BSR VAR+ASP31 < RENVOIE : < (A)=(W)=ADRESSE DU SECTEUR COURANT DANS < SON BUFFER EN MEMOIRE. IC XSNN,W < ET UN NOEUD LIBRE DE PLUS. BSR VAR+ASP30 < MISE A JOUR DE LA LISTE 'LMAXSN'... LYI FONSB < 'SET BIT A 1 SANS VERIF.'. LA XSNN,W CPI X26 < MAINTENANT, LE SECTEUR EST-IL < ENTIEREMENT LIBRE ???? JL Z12 < NON. JE SYSR8B < OUI. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ETRE PRUDENT... < SYSR8B: EQU $ < < LIBERATION D'UN SECTEUR ENTIEREMENT LIBRE : < LAD VAR+ATOSA1 BSR ATMOBT Z12: EQU $ < < MEMORISONS QUE LE SECTEUR COURANT EST < PARTIELLEMENT LIBRE : < LAD VAR+ATOSA2 < < ON A ICI : < (Y)=5 : FONCTION 'SET BIT A 1 SANS VERIF.'. < BSR ATMOBT < < NETTOYAGE, ET LIBERATION < DU NOEUD DANS LE SECTEUR : < LA VAR+NUM ANDI MKNE < (A)=NUMERO DU NOEUD DELETE DANS < LE SECTEUR. CPI X26 < VALIDATION. JL SYSR8C < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ETRE PRUDENT... < SYSR8C: EQU $ LR A,X < (X)=NUMERO DU NOEUD DANS LE SECTEUR. PSR W < SAUVEGARDES... ADRI XSLN,W ADR A,W ADR A,A ADR A,W ADR A,W < (W)=ADRESSE DU NOEUD EN MEMOIRE, IF LOXNE-5,,XEIF%, IF ATTENTION : LA SEQUENCE PRECEDENTE EST FAUSSE !!! XEIF%: VAL ENDIF LA INFINI < 'INFINI' EST LA VALEUR DE NETTOYAGE... STA RELATS,W < CHAINAGE 'SERIE', STA RELATP,W < CHAINAGE 'PARALLELE', STA RELATB,W < CHAINAGE 'ARRIERE', STA XNEV0,W < ET CHAINE STA XNEV1,W < DE CARACTERES... PLR W < ET RESTAURATIONS... LA XSAN+K,W LB XSAN+XLXSAN-Z,W < (A,B)=TABLE D'OCCUPATION DES < NOEUDS DU SECTEUR. TBT L,X < VALIDATION DE L'OPERATION... JNC SYSR8D < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ETRE PRUDENT... < SYSR8D: EQU $ SBT L,X < LIBERATION DU NOEUD DANS LE < SECTEUR COURANT. STA XSAN+K,W STB XSAN+XLXSAN-Z,W < MAJ DE LA TABLE D'OCCUPATION < DU SECTEUR COURANT. IF XLXSAN-2,,XEIF%, IF ATTENTION : CE QUI PRECEDE EST IDIOT !!! XEIF%: VAL ENDIF IC VAR+NTONSL < ET UN NOEUD LIBRE DE PLUS... PLR X,Y STZ VAR+CT < RETOUR OK. RSR PAGE < < < A C C E S N O E U D : < < < ARGUMENT : < NUM=NUMERO DU NOEUD. < < < RESULTAT : < (W)=ADRESSE NOEUD EN MEMOIRE. < < ANTRI: EQU $ PSR X,Y BSR VAR+AASP1 < < ON A ICI : < (X)=NUMERO DU SECTEUR AUQUEL APPARTIENT LE NOEUD < A ACCEDER, < (Y)=ADRESSE DE CE SECTEUR. < JE Z1 < LE SECTEUR AUQUEL APPARTIENT LE < NOEUD DEMANDE EST LE SECTEUR < COURANT. < < CAS OU LE SECTEUR AUQUEL APPARTIENT LE NOEUD < DEMANDE N'EST PAS LE SECTEUR COURANT : < BSR VAR+ASP2 < REECRITURE EVENTUELLE DU < SECTEUR COURANT. < < ON A ICI : < (W)=ADRESSE DEMANDE D'E/S SUR 'DKF'. < STY VAR+STC < NOUVEAU SECTEUR COURANT (Y). BSR VAR+ASP5 < TEST DE L'ETAT DU NOUVEAU < SECTEUR COURANT. JC Z3 < LE NOUVEAU SECTEUR COURANT < N'EXISTE PAS SUR DISQUE, < ALLONS L'INITIALISER EN MEMOIRE. BSR VAR+ASP4 < LECTURE DU SECTEUR COURANT, < LORSQU'IL EXISTE SUR DK (CAS < GENERAL). < < CALCUL DE L'@MEMOIRE DU NOEUD : < Z1: EQU $ BSR VAR+ASP31 < RENVOIE : < (A)=(W)=ADRESSE DU BUFFER DU SECTEUR < COURANT EN MEMOIRE. Z14: EQU $ LA VAR+NUM < (A)=NUMERO DU NOEUD DEMANDE. ANDI MKNE < (A)=NUMERO DU NOEUD DEMANDE < DANS LE SECTEUR COURANT. CPI X26 < VALIDATION DE CE NUMERO. JL SYSR8E < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ETRE PRUDENT, CAR ON RISQUE AVEC < UN MAUVAIS NUMERO DE SE PERDRE... < SYSR8E: EQU $ LR A,X < (X)=NUMERO DU NOEUD DEMANDE < DANS LE SECTEUR COURANT. LA XSAN+K,W LB XSAN+XLXSAN-Z,W < (A,B)=TABLE D'OCCUPATION DES < NOEUDS DU SECTEUR COURANT. TBT L,X < TEST DU NOEUD DEMANDE. JNC SYSR8F < OK, IL EST OCCUPE. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ETRE PRUDENT, CAR ON RISQUE < SI ON CONTINUE EN SEQUENCE D'ACCEDER < A UN NOEUD INEXISTANT, ET DONC A DE < MAUVAIS CHAINAGES... < SYSR8F: EQU $ Z9: EQU $ ADRI XSLN,W < (W)=@DU 1ER NOEUD DU SECTEUR < COURANT EN MEMOIRE. ADR X,W < (W)=W+NUMERO. ADR X,X < (X)=2*NUMERO. ADR X,W < (W)=W+3*NUMERO. ADR X,W < (W)=W+5*NUMERO=@DU NOEUD < DEMANDE EN MEMOIRE. IF LOXNE-5,,XEIF%, IF ATTENTION : LES 'ADR' QUI PRECEDENT SONT FAUX !!! XEIF%: VAL ENDIF PLR X,Y STZ VAR+CT < RETOUR OK. RSR < < INITIALISATION EN MEMOIRE D'UN SECTEUR INEXISTANT : < (CAS DE LA RACINE, OU D'UN SECTEUR < ENTIEREMENT LIBRE). < Z3: EQU $ < < ON A ICI : < (A)=ADRESSE DE 'ATOSA1'. < BSR VAR+ASP3 < INITIALISATION. JMP Z14 < VERS LE CALCUL DE L'@MEMOIRE DU < NOEUD DEMANDE. PAGE < < < C R E A T I O N D ' U N N O E U D : < < < RESULTAT : < NUM=NUMERO DU NOEUD CREE, < (W)=ADRESSE EN MEMOIRE DU NOEUD CREE. < < CNTRI: EQU $ PSR X,Y DC VAR+NTONSL < ET UN NOEUD LIBRE DE MOINS... JNE Z6XX < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < VOIR POURQUOI ON EST ARRIVE LA, < ALORS QUE 'HDLSTN' TESTE LE NOMBRE < DE NOEUDS LIBRES, ET POSSEDE UN SEUIL !!! < Z6XX: EQU $ BSR VAR+ASP31 < RENVOIE : < (A)=(W)=ADRESSE DU BUFFER DU SECTEUR < COURANT. LA VAR+STC < (A)=@SECTEUR COURANT. IF Q8000-K,XEIF%,, IF ATTENTION : LA VALEUR INITIALE DE 'STC' EST IF INCOMPATIBLE AVEC LE TEST 'JAL' !!! XEIF%: VAL ENDIF JAL Z6 < LE SECTEUR COURANT N'EXISTE PAS : < INITIALISATION DU SYSTEME. < < CAS OU IL Y A UN SECTEUR COURANT : < LR A,Y < (Y)=@SECTEUR COURANT SUR DISQUE. < A T T E N T I O N : JE LAISSE CE 'LR' < PARCE QUE JE N'OSE PAS L'ENLEVER, MAIS IL < ME SEMBLE QU'IL NE SERT A RIEN !!! SB VAR+TAS JAGE SYSR8G < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ETRE PRUDENT, CAR ON RISQUE DE < SE PERDRE COMPLETEMENT... < SYSR8G: EQU $ LR A,X < (X)=NUMERO DU SECTEUR COURANT. < < TEST DE L'ETAT DU SECTEUR COURANT : < LA XSNN,W < (A)=NBRE DE NOEUDS LIBRES DANS LE < SECTEUR COURANT. JANE Z53 < IL RESTE DE LA PLACE DANS LE < SECTEUR COURANT. < < CAS OU LE SECTEUR COURANT EST PLEIN : < LYI FONRB < FONCTION 'RESET A 0 SANS VERIF.' < A T T E N T I O N : DESTRUCTION < DE (Y)=@SECTEUR COURANT. LAD VAR+ATOSA2 BSR ATMOBT < MEMORISONS QUE LE SECTEUR < COURANT DE NUMERO (X) EST < ENTIEREMENT OCCUPE. < < REECRITURE EVENTUELLE DU SECTEUR COURANT : < BSR VAR+ASP2 < REECRITURE EVENTUELLE DU < SECTEUR COURANT. < < ON A ICI : < (W)=ADRESSE DEMANDE D'E/S SUR 'DKF'. < < < E X P L O R A T I O N D E ' L M A X S N ' : < LXI X26 < (X)=INDEX DE 'LMAXSN', < =NOMBRE DE NOEUDS LIBRES CONTENUS < DANS LE SECTEUR DESIGNE PAR L'ENTREE < DE RANG (X)... Z6X1: EQU $ PSR B < ON N'EST JAMAIS ASSEZ PRUDENT... LA &VAR+ALMXS1 < (A,B)=ADRESSE D'AU PLUS 2 SECTEURS CON- LB &VAR+ALMXS2 < TENANT (X) NOEUDS LIBRES, EN COMMEN < CANT PAR CEUX QUI EN ONT LE PLUS... JAGE Z6X2 < OK, LE PREMIER MOT CONTIENT UN SECTEUR < INTERESSANT... LR B,A < LE PREMIER MOT ETANT LIBRE, EXAMINONS < LE SECOND : Z6X2: EQU $ PLR B < (RESTAURONS 'B' AU PREALABLE...) JAGE Z1092A < ON S'ARRETE SUR LE PREMIER RENCONTRE... < (PREMIER MOT, OU BIEN LE DEUXIEME < PERMUTE AVEC LE PREMIER...). JDX Z6X1 < PROGRESSONS VERS CEUX QUI EN ONT DE < MOINS EN MOINS... < < R E C H E R C H E D ' U N S E C T E U R < ( P A R T I E L L E M E N T ) L I B R E : < Z6: EQU $ LX VAR+XTOSA2 < (X)=INDEX INITIAL COURANT DE TOSA2. JDX Z1091 < DECREMENTATION ET TEST DE < L'2NDEX INITIAL DE TOSA2. < < REINITIALISATION DE L'INDEX INITIAL COURANT DE TOSA2 : < Z1090: EQU $ LXI X25 < VALEUR INITIALE DE L'INDEX < INITIAL DE TOSA2. < < RECHERCHE D'UN SECTEUR : < Z1091: EQU $ STX VAR+XTOSA2 < MAJ DE L'INDEX INITIAL COURANT. LAD VAR+ATOSA2 < (A)=@REALI INDEXE VERS TOSA2. BSR ASOBT < RECHERCHE D'1N SECTEUR PARTIEL- < LEMENT LIBRE DANS TOSA2, ET < A T T E N T I O N : RAZ DU < BIT CORRESPONDANT A CE SECTEUR < DANS TOSA2 (SI CE SECTEUR < EXISTE !!!) ; CE NUMERO DE SECTEUR EST < RENVOYE DANS 'A'... JNE Z1092 < OK, SECTEUR TROUVE !!! < < CAS OU L'ON N'A PAS TROUVE DE SECTEUR : < LA VAR+XTOSA2 < POUR TEST DE XTOSA2. CPI X25 < LA TABLE TOSA2 VIENT-ELLE < D'ETRE PARCOURUE EN ENTIER ??? JL Z1090 < NON, IL FAUT DONC REPRENDRE < LA RECHERCHE SUR LA TABLE < ENTIERE (EN REINITIALISANT < L'INDEX INITIAL XTOSA2). BSR ASYSER < P L U S D E P L A C E !??!??!??? < D A N S L ' A R B R E !!!! < < QUE FAIRE ??? < PAS GRAND CHOSE, PUISQUE L'ARBRE < EST SATURE ; A NOTER QUE LA SITUATION < EST CRITIQUE... IL FAUT DONC REUSSIR < A SORTIR EN ERREUR DE 'HDLTRI', DELETER < DES NOMS DANS L'ARBRE, PUIS MODIFIER < LE SYSTEME, POUR AUGMENTER SA CAPACITE < CE QUI PEUT-ETRE DELICAT ETANT DONNE < LA CAPACITE LIMITEE DE 'DKF'... < < < CAS OU ON A TROUVE UN SECTEUR DE NUMERO (A) : < Z1092: EQU $ < < ON A ICI : < (A)=NUMERO DU SECTEUR PARTIELLEMENT LIBRE TROUVE. < LR A,X < (X)=NUMERO DU SECTEUR TROUVE. AD VAR+TAS LR A,Y < (Y)=@SECTEUR TROUVE. STA VAR+STC < @NOUVEAU SECTEUR COURANT. BSR VAR+ASP5 < TEST DE L'ETAT DU NOUVEAU < SECTEUR COURANT. JC Z7 < IL EST ENTIEREMENT LIBRE, < ALLONS L'INITIALISER EN MEMOIRE. < < LECTURE DU NOUVEAU SECTEUR COURANT : < BSR VAR+ASP4 BSR VAR+ASP31 < RENVOIE : < (A)=(W)=ADRESSE DU BUFFER DU SECTEUR < COURANT EN MEMOIRE. Z13: EQU $ DC XSNN,W < ET UN NOEUD LIBRE DE MOINS < DANS LE SECTEUR COURANT. BSR VAR+ASP30 < GESTION DE LA LISTE 'LMAXSN'... JE Z8 < IL N'Y A PLUS DE NOEUDS LIBRES < DANS LE SECTEUR COURANT, ON < LAISSE DONC LE BIT CORRESPONDANT < DE TOSA2 A 0. JG Z45X < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < EN FAIT CE CAS PEUT SE RENCONTRER A LA SUITE < D'UNE ERREUR DE LECTURE SUR 'DKF', AUQUEL CAS < LE BUFFER A ETE FORCE A Q8000 ; IL FAUT DONC < VERIFIER QU'ON SE TROUVE BIEN DANS CETTE SITUATION... < LAD VAR+DEMTRI LR A,W < REINITIALISATION DE 'W' SUR LA DEMANDE < D'ENTREE-SORTIE DISQUE 'DKA'... JMP Z6 < ET ON VA CHERCHER UN NOUVEAU SECTEUR ; < A NOTER QUE CELUI QUI VIENT D'ETRE DECOU- < VERT EN ERREUR, RESTE A 0 DANS 'TOSA2' < CE QUI EST TRES BIEN, AINSI ON NE < L'ALLOUERA PLUS !!! < < CAS OU ON A TROUVE UN SECTEUR < A UTILISER PAR 'LMAXSN' ET NON < PAS PAR 'TOSA2' : < Z1092A: EQU $ SB VAR+TAS < PAR COMPATIBILITE AVEC LA GESTION PAR < 'TOSA2', ON CONVERTIT L'ADRESSE SECTEUR < EN UN NUMERO DE SECTEUR RELATIF A LA < RACINE DE L'ARBRE DANS 'A', PSR A,X,Y LR A,X < (X)=NUMERO DU SECTEUR TROUVE, LYI FONRB < (Y)=FONCTION 'RESET BIT SANS VERIF', LAD VAR+ATOSA2 < (A)=ADRESSE DU RELAI VERS 'TOSA2', BSR ATMOBT < ET ON ETABLIT LA COMPATIBILITE AVEC LA < RECHERCHE PAR 'TOSA2' EN CLEARANT LE < BIT CORRESPONDANT AU SECTEUR TROUVE < COMME L'AURAIT FAIT 'SOBT'... PLR A,X,Y JMP Z1092 < ET ON FAIT COMME SI ON L'AVAIT TROUVE < PAR EXPLOITATION DE 'TOS2'... Z45X: EQU $ < < CAS OU LE SECTEUR COURANT N'EST PAS PLEIN < APRES CETTE ALLOCATION, ON REMET A 1 < LE BIT CORRESPONDANT DE TOSA2 : < Z45: EQU $ LYI FONSB < FONCTION 'SET BIT A 1 < SANS VERIF', MAIS ATTENTION < DESTRUCTION DE Y. Z54: EQU $ LAD VAR+ATOSA2 BSR ATMOBT < LE SECTEUR COURANT EST PARTIEL- < LEMENT LIBRE OU ENTIEREMENT < OCCUPE.!!??!?!!.. Z8: EQU $ LR X,Y < (Y)=NUMERO DU SECTEUR COURANT. LA XSAN+K,W LB XSAN+XLXSAN-Z,W < (A,B)=TABLE D'OCCUPATION DU IF XSNN-XSAN-2,,XEIF%, IF ATTENTION : LA TABLE D'OCCUPATION TIENT IF BIZARREMENT DANS (A,B) !!! XEIF%: VAL ENDIF < SECTEUR COURANT. DBT < RECHERCHE DU 1ER NOEUD LIBRE (X). JNC SYSR8H < OK, IL EXISTE. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ATTENTION, CAR SI ON CONTINUE EN < SEQUENCE, ON VA ALLOUER UN NOEUD < INEXISTANT... IL FAUT DONC COMPRENDRE < LES RAISONS DE CETTE SITUATION... < SYSR8H: EQU $ RBT L,X < OCCUPATION DU NOEUD (X). STA XSAN+K,W STB XSAN+XLXSAN-Z,W < MAJ DE LA TABLE D'OCCUPATION < DU SECTEUR COURANT. LR X,A CPI X26 < VALIDATION DU NUMERO DU NOEUD. JL SYSR8I < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < MEME REMARQUE QU'A LA 'SYSER' PRECEDENTE... < SYSR8I: EQU $ < < GENERATION DU NUMERO DU NOEUD COURANT : < LR Y,A < (A)=NUMERO DU SECTEUR. SLLS MKNE)MFFFF=K < CADRAGE CORRECT. ADR X,A < (X)=NUMERO DU NOEUD DANS LE SECTEUR. STA VAR+NUM < RENVOI DU NUMERO DU NOEUD. JMP Z9 < VERS LE CALCUL DE L'@ DU < NOEUD CREE EN MEMOIRE. < < CAS OU LE SECTEUR COURANT EST ENTIEREMENT < LIBRE : INITIALISATION EN MEMOIRE : < Z7: EQU $ < < ON A ICI : < (A)=ADRESSE DE 'ATOSA1'. < BSR VAR+ASP3 < INITIALISATION EN MEMOIRE DU < SECTEUR COURANT. JMP Z13 < < CAS OU LE SECTEUR COURANT N'ETAIT PAS < PLEIN A L'ENTREE DE 'CNTRI' : < Z53: EQU $ DC XSNN,W < ET UN NOEUD DE MOINS !!!! BSR VAR+ASP30 < GESTION DE LA LISTE 'LMAXSN'... JNE Z45 < IL EN RESTE AU MOINS 1, PAR < PRUDENCE ON REMET LE BIT < ASSOCIE DANS TOSA2 A 1. LYI FONRB < DANS LE CAS, OU ON A PRIS LE < DERNIER NOEUD LIBRE, ON MET < LE BIT ASSOCIE DE TOSA2 A 0, < POUR MEMORISER L'ENTIERE < OCCUPATION DU SECTEUR COURANT. JMP Z54 < VERS L'ENTIERE OCCUPATION... CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# PAGE < < < F O R M A T 1 E R S E C T E U R : < S E C T E U R - M A P : < < DSEC SECMAP MSVAL: EQU $ < ORIGINE DU SECTEUR-MAP. < < BLOC DE CONTROLE DU SECTEUR-MAP : < MSIND: EQU $ < ORIGINE DU BLOC DE CONTROLE. SIND:: MOT $-MSVAL < ORIGINE DU BLOC DE CONTROLE. SINDL:: MOT $-MSIND < LONGUEUR EN OCTETS DE LA VALEUR ; < CE MOT EST MODIFIABLE PAR LES < HANDLERS DU SGN LORS D'UNE < DEMANDE SERVICE ; IL PEUT ETRE < RAMENE A LA LONGUEUR DEMANDEE, < SI CELLE-CI EST INFERIEURE A < LA LONGUEUR REELLE. WORD NILK < LONGUEUR OCTETS DE LA VALEUR. < (MODIFIABLE !!!) SINDLS:: MOT $-MSIND < NBRE DE SECTEURS OCCUPES PAR < LA VALEUR, Y COMPRIS LE < SECTEUR-MAP. WORD NILK < NBRE DE SECTEURS OCCUPES < PAR LA VALEUR. SINDLO:: MOT $-MSIND < LONGUEUR EN OCTETS REELLEMENT < OCCUPEES PAR LA VALEUR ; A LA < DIFFERENCE DE 'SINDL', CE MOT < EST INVIOLABLE PAR LES HANDLERS < DU SGN, ET PERMET DONC LE < RENVOI PAR L'EVENTUELLE BOX < DE LA DEMANDE COURANTE DE LA < LONGUEUR REELLE DE LA VALEUR < DEMANDEE !!! WORD NILK < LONGUEUR OCTETS REELLE DE LA < VALEUR (INVIOLABLE !!!). SINDPI:: MOT $-MSIND < FRONTIERE OCTET DE LA VALEUR : WORD NILK < PAIRE OU IMPAIRE ??? < CE MOT EST POSITIONNE LORS D'UN 'STORE' < AVEC LES INDICATEURS SUIVANTS : < OCTET0 : 'AA, < BITS 8-14 : 0...0, < BIT 15 : 0, SI FRONTIERE PAIRE, < : 1, SI FRONTIERE IMPAIRE. < LORS D'UN 'LOAD', ON VA DONC RECONTRER < 4 (2*2) CAS DIFFERENTS : < < 1 - PAIRE AU 'STORE' ET PAIRE AU 'LOAD' : < PAS DE PROBLEMES, OK... < < 2 - IMPAIRE AU 'STORE' ET IMPAIRE AU < 'LOAD' : PAS DE PROBLEMES, OK... < < 3 - IMPAIRE AU 'STORE' ET PAIRE AU < 'LOAD' : IL CONVIENT ALORS DE DECALER < D'UN OCTET A GAUCHE LA DEUXIEME PARTIE < DE LA VALEUR (CELLE QUI N'EST PAS DANS < LE ) AVANT DE PLACER LA < PREMIERE PARTIE DANS LE BUFFER UTILI- < SATEUR... < < 4 - PAIRE AU 'STORE' ET IMPAIRE AU < 'LOAD' : IL CONVIENT DE DECALER D'UN < OCTET A DROITE LA DEUXIEME PARTIE DE LA < VALEUR AVANT DE PLACER LA PREMIERE < PARTIE... < < NOTA : LE MASQUE 'AA00 EST CONSERVE < POUR DES RAISONS HISTORIQUES ; IL AVAIT < ETE CREE POUR DISTINGUER ENTRE DES < "VIEUX" ET DES "NOUVEAUX" ITEMS... < < DATE DE CREATION DE LA VALEUR : < SDATAM:: MOT $-MSIND < ANNEE/MOIS (EN BINAIRE ; DE PLUS POUR < L'ANNEE ON TROUVE 'XY' AU LIEU DE < '19XY', C'EST MESQUIN...). WORD NILK SDATJH:: MOT $-MSIND < JOUR/HEURE. WORD NILK SDATMS:: MOT $-MSIND < MINUTES/SECONDES. WORD NILK < < DISTINCTION "ITEM NORMAL" ET "ITEM SGF" : < SXSGF:: MOT $-MSIND < MOT POUVANT AVOIR PLUSIEURS VALEURS, < ET QUI PERMET DE DISTINGUER UN "ITEM < NORMAL" D'UN "ITEM SGF" : <******************************************************************************* SXSGFN:: VAL K-I < ITEM TYPE "NORMAL" (ET DONC ACCESSIBLE < AUX UTILISATEURS), SXSGFA:: VAL '0@@@@+I < ITEM TYPE "ANCIEN" PERMETTANT DE PASSER < DE L'ANCIENNE A LA NOUVELLE VERSION < DE CMS5, SXSGFF:: VAL '0@@@@+I < ITEM TYPE "SGF" ACCESSIBLE UNIQUEMENT < AU SYSTEME... <******************************************************************************* WORD NILK < < DONNEES UTILISEES LORS DES GESTIONS < DE VOLUME AVEC EXTENSION D'ADRESSE < SUR LE DISQUE D'EXTENSION 'NSPDKG' : < (CES DONNEES SONT NULLES LORSQU'IL < N'Y A PAS DE VOLUME MONTE...) < SVALNU:: MOT $-MSIND < NUMERO DU VOLUME CONTENANT LE BLOC DE < DONNEES ETENDANT L'ITEM COURANT. WORD NILK SVALAD:: MOT $-MSIND < ADRESSE DE CE BLOC DE DONNEE SUR LE < DISQUE D'EXTENSION. WORD NILS < < ZONE DE PATCH : < PATMAP:: MOT $-MSIND < ZONE DE PATCH DU SECTEUR-MAP. XPATMA:: VAL 4 < LONGUEUR DE LA ZONE DE PATCH... DZS XPATMA < C'EST PEU, MAIS CELA SUFFIT... < < CARTE D'OCCUPATION DE LA VALEUR : < SMAP:: MOT $-MSVAL < CARTE D'IMPLANTATION DE LA < VALEUR SUR LE DISQUE, Y COMPRIS < LE SECTEUR-MAP ; ON TROUVE AINSI < LA LISTE DES SECTEURS UTILISES. NTRN DZS TZSWAP-TZSCRA+QUANTA-E/QUANTA TRN < < PREMIERE PARTIE DE LA VALEUR : < SVAL:: MOT $-MSVAL TZVAL:: VAL YY7*QUANTA-SVAL < NOMBRE DE MOTS DISPONIBLES POUR < LA PREMIERE PARTIE DE LA VALEUR. DZS TZVAL < PREMIERE PARTIE DE LA VALEUR. FSECMA:: VAL $-MSVAL < FIN DU SECTEUR MAP. IF YY7*QUANTA-FSECMA,,XEIF%, IF A T T E N T I O N : LE FORMAT DU SECTEUR IF MAP EST MAUVAIS !!! XEIF%: VAL ENDIF PROG PAGE < < < E X T E N S I O N D E L A C A P A C I T E D E < S T O C K A G E S U R L E S D I S Q U E S : < < < PHILOSOPHIE : < ON DISPOSE DES TROIS COMMANDES < SUIVANTES AU 'CCI' : < < !ASSIGN =DKU, < !DKU M = , < !DKU INITIALISATION = . < < LA PREMIERE PERMET DE S'APPROPRIER < 'DKU' QUI EST LE DISQUE D'EXTENSION < TANDIS QUE LA SUIVANTE Y PERMET < LE MONTAGE D'UN VOLUME DONT ON < SE DONNE LE NUMERO, ENFIN LA DERNIERE < FAIT L'INITIALISATION DU VOLUME ET < SON MONTAGE. < UN VOLUME EST DONC UN DISK-PACK, < ATTACHE A UN UNIQUE (!!!), < QUI POSSEDE ENTRE AUTRES CHOSES < UNE TABLE D'ALLOCATION PAR BLOCS < SUFFISANTS POUR CONTENIR UNE IMAGE < COULEUR TOUT EN OPTIMISANT LES < TRANSFERTS (CF. 'LVOLIM'). < LORS DES ACCES 'SGN' PAR 'LON', < 'STN' ET 'DLN', ON PEUT ATTEINDRE < DES VALEURS RESIDANT SUR LE DISQUE < D'EXTENSION ; LORSQUE CELA EST < DEMANDE (VOIR LE FORMAT ALORS < PARTICULIER DE 'ASDEM'), LA VALEUR < D'UNE LONGUEUR OBLIGATOIRE DE < 'LVALU' MOTS CONTIENT : < 1 - POUR 'STN' : LE NUMERO DU VOLUME, < ET L'ADRESSE DISQUE SUR 'NSPDKG' A < PARTIR DE LAQUELLE ON SOUHAITE QUE < L'ALLOCATION SOIT FAITE (POUR AINSI < FAVORISER LES ALLOCATIONS DE BLOCS < CONTIGUS), < 2 - POUR 'LON' ET 'DLN' RIEN EN < TANT QU'ARGUMENT. < LA DU EST DONC DANS < CE CAS, UN CHAINAGE VERS UN VOLUME, < ET A L'INTERIEUR DE CELUI-CI, UNE < ADRESSE PHYSIQUE DE BLOC (TYPE "IMAGE"). < ENFIN, AU DEBUT DU VOLUME UNE ZONE < DE 'SECVOL' Q-SECTEURS EST LAISSEE < LIBRE POUR USAGES SPECIFIQUES... < APRES UN 'STN', ON CONNAIT SI < TOUT S'EST BIEN PASSE L'ADRESSE D'IMPLAN- < TATION DU BLOC SUR LE DISQUE ; CE BLOC < PEUT DONC ETRE RELU, SOIT EN SPECIFIANT < SON ET L'ENVOYANT A 'LON', SOIT < EN ENVOYANT DIRECTEMENT A 'DKU' UNE < DEMANDE DE TRANSFERT RAPIDE 'DKU' <--> 'MEMTV'. < POUR TERMINER, IL CONVIENT DE DIRE < QUE LE BLOC TYPE "IMAGE" EST SYSTEMATI- < QUEMENT, LORS DES ACCES AUX VOLUMES < LU OU ECRIT A PARTIR DE 'MEMTV'... < < < Q - S E C T E U R D E D E F I N I T I O N D ' U N < V O L U M E : < < LVOL:: VAL YY7 < LONGUEUR MAX PREVUE POUR LA DEFINITION < D'UN VOLUME ; A NOTER QU'ON N'UTILISE < PAS LE Q-SECTEUR EN ENTIER... ELVOL: EQU ZERO+LVOL < POUR UNE REFERENCE EN AVANT DANS LA < LISTE DES BLOCS MEMOIRE AUTORISES EN < ACCES DIRECT... VOL0:: MOT O < DEBUT DU Q-SECTEUR... VOLNUM:: MOT VOL0 < NUMERO DU VOLUME ; A NOTER QUE CELUI-CI < NE PEUT ETRE NUL, CAR LA NULLITE INDI- < L'ABSENCE DE VOLUME MONTE (ET CECI, BIEN < SUR DANS LE BUFFER RESIDENT QUI LE CON- < TIENDRA...). VOLNSP:: MOT VOLNUM+D < 'NSP' DU DISQUE D'EXTENSION, LORS DE < L'INITIALISATION DU VOLUME (...). VOLACN:: MOT VOLNSP+D < DU DEMANDEUR LORS DE L'INITIALISA- < TION ; A NOTER QUE C'EST LUI SEUL QUI < POURRA L'ATTEINDRE, VIA LE 'SGN' ULTE- < RIEUREMENT (MAIS NE PAS OUBLIER LA COM- < MANDE "!L" SOUS ":SYS"... VOLCLE:: MOT VOLACN+XXACN < PREMIERE CLEF DE VALIDATION : XWOR%1: VAL MOCG=K CLEVOL:: VAL XXK2>XWOR%1?XXK3 < DONT VOICI LA VALEUR... VOL23:: MOT VOLCLE+D < DEUXIEME CLEF DE VALIDATION : ELLE CON- < TIENT 'LVOLIM', ET ON FAIT CELA CAR < IL EST SOUVENT NECESSAIRE DE FAIRE < DES DIVISIONS ET DES MULTIPLICATIONS < PAR 'LVOLIM', ET QUE JE NE SAVAIS PAS < OU LE METTRE... VOLNIM:: MOT VOL23+D < NOMBRE DE BLOCS LIBRES ('NVOLIM' INI- < TIALEMENT). LVOPAT:: VAL 2 < LONGUEUR DE LA ZONE DE PATCH... VOLPAT:: MOT VOLNIM+D < ZONE DE PATCH DU DESCRIPTEUR DE < VOLUME... VOLTAB:: MOT VOLPAT+LVOPAT < DEBUT DE LA TABLE D'ALLOCATION DES < BLOCS, ET QUI EST LA DERNIERE INFOR- < MATION SIGNIFICATIVE DU Q-SECTEUR... LVOLTA:: VAL LVOL-VOLTAB < LONGUEUR POSSIBLE DE LA TABLE D'ALLO- < CATION DES BLOCS. < < INSTRUCTIONS REFERENCEES EN AVANT, < ET UTILISANT DES SYMBOLES ICI DEFINIS : < ESGNX1: EQU $ < SAUVEGARDE DU "$"... <******************************************************************************* STZ VOLNUM,L < "PAS DE VOLUME MONTE"... XWOR%1: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE, <******************************************************************************* STZNUM: EQU ZERO+XWOR%1 < "PAS DE VOLUME MONTE". <******************************************************************************* STA VOLNSP,L < "PAS DE VOLUME MONTE"... XWOR%1: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE, <******************************************************************************* STANSP: EQU ZERO+XWOR%1 < "PAS DE VOLUME MONTE". $EQU ESGNX1 < PUIS ANNULATION DU CODE GENERE... < < < F O R M A T D U V O L U M E : < < SECVOL:: VAL '0800 < NUMERO DU Q-SECTEUR CONTENANT LE < DESCRIPTEUR DU VOLUME. NTRN LSECVO:: VAL LVOL+YY7Q-E/YY7Q < NOMBRE DE Q-SECTEUR OCCUPE PAR < DESCRIPTEUR DU VOLUME. TRN VOLSE0:: VAL SECVOL+LSECVO < NUMERO DU PREMIER Q-SECTEUR ALLOUABLE. LVOLIM:: VAL '23 < NOMBRE DE Q-SECTEURS FORMANT UN BLOC ; < EN FAIT UN BLOC EST UNE IMAGE DE < TELEVISION COULEUR, ET '23 EST UN < PEU TROP ; MAIS CE "GAP" EST VOLONTAIRE < ET CONSTITUE UN MOYEN DE MAXIMISER LE < TAUX DE TRANSFERT DES ANIMATIONS ; EN < EFFET LA DUREE DE GAP, EST SUFFISANTE < POUR PERMETTRE SIMULTANEMENT LE DEPLA- < CEMENT DES TETES D'UNE PISTE A L'AUTRE... < LES BLOCS SONT DONC DEPHASES LES UNS < PAR RAPPORT AUX AUTRES... XWOR%1: VAL TVLIMA*LK*XNCOOL/YY7Q < NOMBRE DE Q-SECTEURS NECESSAIRES POUR < STOCKER UNE IMAGE COULEUR ; A NOTER QUE < LA DIVISION DOIT TOMBER JUSTE CAR PAR < UN HEUREUX HASARD : 'QUANTA'='XNCOOL'. IF LVOLIM-XWOR%1,,,XEIF% IF ATTENTION : LA TAILLE D'UN BLOC D'ALLOCATION IF EST TROP PETITE POUR CONTENIR UNE IMAGE COULEUR !!! XEIF%: VAL ENDIF < < < N O M B R E D E B L O C S A L L O U A B L E S : < < XWOR%1: VAL TDKM-VOLSE0 < NOMBRE DE Q-SECTEURS DISPONIBLES. XWOR%2: VAL XXXMOY=K < ON EST OBLIGE DE FAIRE CELA PARCEQUE < 'TDKM' EST REPRESENTE PAR UN NOMBRE < NEGATIF... XWOR%3: VAL -XWOR%2 NTRN XWOR%4: VAL XWOR%1>XWOR%3/LVOLIM>XWOR%2 < NOMBRE DE BLOCS QUE L'ON POURRAIT RANGER < AU MAXIMUM, XWOR%5: VAL XWOR%4/NBITMO*NBITMO < MAIS LA TABLE D'ALLOCATION A UN FORMAT < DE MOTS, DONC ON ARRONDIT INFERIEUREMENT < EN MULTIPLES DE 'NBITMO'... TRN NVOLIM:: VAL XWOR%5 < NOMBRE DE BLOCS ALLOUABLES. MVOLIM:: VAL NVOLIM/NBITMO < NOMBRE DE MOTS NECESSAIRES A LA TABLE < D'ALLOCATION DES BLOCS. IF MVOLIM-LVOLTA,XEIF%,XEIF%, IF ATTENTION : LA TAILLE PREVUE POUR LE DESCRIPTEUR IF DE VOLUME (ET LA TABLE D'ALLOCATION) EST INSUFFISANTE !!! XEIF%: VAL ENDIF < < < I N D I C A T E U R S ' S G N ' D ' A C C E S < A U ' D K U ' : < < SGNU0:: VAL NEXIST < L'ACCES 'DKU' N'A PAS ETE DEMANDE POUR < CE HANDLER, MAIS CELUI-CI EST LEGAL... SGNU1:: VAL NSPDKG < L'ACCES 'DKU' A ETE DEMANDE. SGNUI:: VAL SGNU0-I < L'ACCES 'DKU' POUR EXTENSION EST FORMEL- < LEMENT INTERDIT... IF SGNUI-K,XEIF%,, IF ATTENTION : 'SGNUI' DOIT ETRE NEGATIF IF A CAUSE DES TESTS QUI SUIVRONT !!! XEIF%: VAL ENDIF IF SGNU1-K,,,XEIF% IF ATTENTION : 'SGNU1' DOIT ETRE POSITIF !!! XEIF%: VAL ENDIF IF SGNU0-K,,XEIF%, IF ATTENTION : 'SGNU0' DOIT ETRE NUL !!! XEIF%: VAL ENDIF < < < F O R M A T D E L A < V A L E U R > L O R S < D E D E M A N D E S D ' E X T E N S I O N : < < VALUNU:: MOT O < NUMERO DU VOLUME SUPPORT DE LA < ETENDUE CHAINEE PAR LA NORMALE. VALUAD:: MOT VALUNU+D < ADRESSE DISQUE EXPRIMEE EN Q-SECTEUR < DE L'EXTENSION DE VALEUR. A NOTER QUE < CES 2 VALEURS 'VALUNU' ET 'VALUAD' SE < RETROUVENT DANS LE SECTEUR-MAP (ET CECI < POUR FACILITER LE TRAVAIL DE 'LON' ET < 'DLN'...). LVALU:: VAL VALUAD+D < NOMBRE DE MOTS OCCUPES OBLIGATOIREMENT < PAR LA DE CHAINAGE D'UNE < EXTENSION. PAGE < < < B U F F E R S P E R M A N E N T S S G N : < < CALL #SISP CMS5 DOL2# BUFSTN: EQU $ DZS YY7*QUANTA BUFLON: EQU $ DZS YY7*QUANTA BUFLNS: EQU $ DZS YY7*QUANTA BUFLNU: EQU $ DZS YY7*QUANTA BUFDLN: EQU $ DZS YY7*QUANTA < < NOTA : < 'BUFNXP' ET 'BUFNXS' PARAISSANT < INUTILE, ILS SONT SUPPRIMES ; C'EST < POURQUOI LE SOUS-PROGRAMME 'SP14' A < ETE INTRODUIT ; IL VALIDE L'ADRESSE < DU BUFFER STATIQUE 'BUFSAV'... < CALL #SISP CMS5 DOL1# PAGE < < < C O N S T A N T E S D I V E R S E S : < < XYSGN1:: VAL W-I < CAS D'UN CHAMP A DEPLACER, XYSGN2:: VAL XYSGN1+I < CAS DE 2 CHAMPS A DEPLACER. XXSGN1:: VAL COSBT?BITSIG=FMASK(K=FCINST?XYSGN2 < FUTUR VALEUR DE 'ETAT1' LORSQU'IL < FAUT CALCULER LE NOMBRE DE CHAMPS... XXSGN2:: VAL XXACN < LONGUEUR DES . XXSGN3:: VAL 22 < INCREMENT DES LONGUEURS DE PILE. XWOR%1: VAL 32 < NOMBRE ARBITRAIRE FIXANT UNE LIMITE < SUPERIEURE AU NOMBRE DE BLOCS 'DKM' < ('QUANTA'-SECTEURS) QUE L'ON PEUT < GROUPER, LORSQUE CELA EST POSSIBLE < LORS DES ECHANGES DE VALEURS ('SP11'). XWOR%2: VAL YY8Q < NOMBRE D'OCTETS CONSTITUANT L'UNITE < D'ALLOCATION DE 'DKM'. XXSGN9:: VAL XWOR%1*XWOR%2 < NOMBRE MAXIMUM D'OCTETS QUE L'ON < PUISSE GROUPER, LORSQUE CELA EST < POSSIBLE, DANS 'SP11'. IF XXSGN9,,,XEIF% IF ATTENTION : VUS LES TESTS QUI SUIVRONT, IF 'XXSGN9' DOIT ETRE STRICTEMENT POSITIF !!! XEIF%: VAL ENDIF XXSGNS:: VAL 64 < SEUIL ARBITRAIRE ; SI LE NOMBRE DE < NOEUDS LIBRES EST INFERIEUR A CE < SEUIL, 'HDLSTN' REFUSE DE TRAVAILLER... XXSGNT:: VAL 128 < SEUIL ARBITRAIRE ; SI LE NOMBRE DE < Q-SECTEURS LIBRES SUR 'DKM' EST INFE- < RIEUR A CE SEUIL, 'HDLSTN' REFUSERA < DE TRAVAILLER !!! NTRN IF Q8000-E/YY8Q+E-XXSGNT,XEIF%,, IF ATTENTION : 'XXSGNT' DOIT ETRE AU MOINS SUPERIEUR IF A LA LONGUEUR MAXIMALE D'UNE VALEUR EXPRIMEE IF EN NOMBRE DE SECTEURS !!! XEIF%: VAL ENDIF TRN SGNFUP:: VAL NOSOSE < A PRIORI, TOUTES LES FONCTIONS 'SGN' < DOIVENT SE DEROULER EN BAS... < ON LUI FAIT DONC PRENDRE SYSTEMATIQUE- < MENT LA PAGE 0, SAUF... IF SGNFUP-NOSOSE,,XEIF%, IF ATTENTION : TOUTES LES FONCTIONS DE 'DLN', 'STN', IF 'LON', 'LNS' ET 'LNU' DOIVENT SE DEROULER EN BAS IF AFIN QUE LA TRANSMISSION DE LA 'CDA' COURANTE DE IF L'UTILISATEUR LORS DES ACCES AUX VOLUMES D'EXTENSION IF DANS 'HDLSVC' FONCTIONNE CORRECTEMENT !!! XEIF%: VAL ENDIF XWOR%1: VAL K XWOR%1: VAL COSBT?FGSGN=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FGSGNA=FMASK(K?XWOR%1=FCINST SGNFUQ:: VAL XWOR%1 < POUR 'NXS' ET 'NXP', LES FONCTIONS < D'ACCES PEUVENT SE DEROULER EN MEMOIRE < HAUTE... PAGE < < < D C T S T O R E - N O M : < < DCTSTN: EQU $ PSTSTN: WORD K;K;K;K;COM+DEPCS;DCTSTN;NIL;PILSTN;HANDLR;SMST;SO;SE #@ASCI " STN" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLSAV < HANDLER GENERAL DE GESTION < DES NOMS,VALEURS. WORD HDLSTN < HANDLER SPECIFIQUE 'STORE NOM'. WORD K;XXSGN1 < ETAT: ETAT1='8001 AFIN < DE CALCULER LE NOMBRE DE CHAMPS < A DEPLACER EN FONCTION DE < L'OPDEM D'APPEL. < N=K SI OPDEM=2,N=1 SI OPDEM=A WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD SGNFUP < DCTFUP ("ALTITUDES" DES FONCTIONS). < < < Z O N E V A R I A B L E : < < VARSAV: EQU $ VARSTN: EQU $ IF VARSTN-DCTSTN-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < : < WORD STNNOM,X ANOMS:: VAL $-D-VARSAV < RELAI VERS LE NOM SYSTEME. NOMS:: VAL $-VARSAV < NOM SYSTEME. STNNOM: EQU $ WORD NILK < POUR USAGE SPECIFIQUE LORS DES < INSERT/DELETE DANS LES ARBRES. NOMSX1:: VAL $-VARSAV < PROPREMENT DIT... DZS XXSGN2 < DESTINE A RECEVOIR L'ACN < DU DEMANDEUR. BYTE EON;K < EON POUR L'ACN. DZS LNOMS/NOCMO < NOM ARGUMENT. IF XXSGN2*NOCMO+LNOMS-XXSGNS,XEIF%,, IF ATTENTION : 'XXSGNS' DOIT ETRE AU MOINS SUPERIEURE IF A LA LONGUEUR MAXIMALE D'UN !!! XEIF%: VAL ENDIF WORD NIL < RELAI VALEUR EVENTUEL. < < BUFFER ET DEMANDE : < WORD BUFSTN BUFSAV:: VAL $-D-VARSAV < ADRESSE MOT DU BUFFER DE TRAVAIL < ALLOUE AUX HANDLERS. WORD NILX ANOM:: VAL $-D-VARSAV < RELAI VERS LE NOM ARGUMENT. DEMSAV:: VAL $-VARSAV < BLOC DESTINE AUX DEMANDES. DZS LDEM0B WORD NILK IVAL:: VAL $-D-VARSAV < INDEX 1ER OCTET DE LA VALEUR. < < RELAIS DE SOUS-PROGRAMMES : < WORD SP6 ASP6:: VAL $-D-VARSAV < REMISE A ZERO DU BUFFER. WORD SP7 ASP7:: VAL $-D-VARSAV < GET/RELEASE SECTEURS. WORD SP8 ASP8:: VAL $-D-VARSAV < INITIT. DE W AVEC L'@DU BUFFER. WORD SP9 ASP9:: VAL $-D-VARSAV < MOVE 1ERE PARTIE DE LA VALEUR. WORD SP10 ASP10:: VAL $-D-VARSAV < E/S DK. WORD SP11 ASP11:: VAL $-D-VARSAV < E/S DE LA VALEUR SUR DK. WORD SP12 ASP12:: VAL $-D-VARSAV < INSERT/DELETE NOM. WORD SP13 ASP13:: VAL $-D-VARSAV < E/S DK AVEC COMME SEUL ARGUMENT < L'ADRESSE SECTEUR (B). WORD SP14 ASP14:: VAL $-D-VARSAV < SOUS-PROGRAMME RIDICULE SE CONTENTANT < DE METTRE L'ADRESSE DU BUFFER STATIQUE < 'BUFSAV' DANS 'A'... ET DE VALIDER < BIEN SUR !!! WORD SP20 ASP20:: VAL $-D-VARSAV < SOUS-PROGRAMME DE LECTURE DU DESCRIPTEUR < D'UN VOLUME D'EXTENSION... WORD SP21 ASP21:: VAL $-D-VARSAV < SOUS-PROGRAMME DE RE-ECRITURE DU DES- < CRIPTEUR D'UN VOLUME D'EXTENSION... WORD SP40 ASP40:: VAL $-D-VARSAV < SOUS-PROGRAMME POSITIONNANT (SLO,SLE) < SUR 'MEMTV', PUIS ENVOYANT LA DEMANDE < COURANTE A 'CHAND'... < < RELAIS D'ADDRESSES (A CAUSE DE < CES MAUDITS SAUTS SUPERIEURS < A 128 MOTS...) : < WORD Z23 RAZ23:: VAL $-D-VARSAV < FONCTION NON RECONNUE, WORD Z28 RAZ28:: VAL $-D-VARSAV < ENVOI DE LA DEMANDE COURANTE, WORD Z36 RAZ36:: VAL $-D-VARSAV < SORTIE OK, AVEC 'BOX', WORD Z51 RAZ51:: VAL $-D-VARSAV < SORTIE OK, WORD Z36XY2 RAZ362:: VAL $-D-VARSAV < TEST D'EXTENSION DE VOLUME, WORD Z26 RAZ26:: VAL $-D-VARSAV < ERREUR DE . WORD Z26XX RAZ26X:: VAL $-D-VARSAV < ERREUR "SATURATION D'UN ESPACE"... < < INDICATEURS : < WORD NRELAT < PAS DE DEMANDE DE VALEUR. TENEXT:: VAL $-D-VARSAV < POUR L'INITIALISATION DE < L'ASDEM DE LA DEMANDE A HDLTRI. WORD NIL AOVAL:: VAL $-D-VARSAV < ADRESSE OCTET DU 1ER OCTET < DE LA VALEUR DANS LE BUFFER < UTILISATEUR < CE MOT EST UTILISE PAR SP11 < ET EST UTILISABLE DANS BEAUCOUP < DE CAS COMME MOT DE TRAVAIL OU < DE PATCH! WORD NILK ASTRAV:: VAL $-D-VARSAV < MOT DE TRAVAIL POUR SP11 WORD XXSGN9 VGROUP:: VAL $-D-VARSAV < NOMBRE MAXIMUM D'OCTETS QUE L'ON < PUISSE GROUPER, LORSQUE CELA EST < POSSIBLE, DANS 'SP11'. SXSGF0:: VAL SXSGFA < VALEUR INITIALE DE 'SGNSGF' POUR LES < HANDLERS TESTANT LA NATURE "SGF" DES < ITEMS. WORD SXSGF0 SGNSGF:: VAL $-D-VARSAV < INDICATEUR MEMORISANT LA VALEUR DU BIT < 'XXXSGF' DE L'OPDEM ARGUMENT (VOIR LES < VALEURS 'SXSGF' A CE PROPOS...). WORD SGNU0 ISGNUV:: VAL $-D-VARSAV < INDICATEUR D'AUTORISATION ET DE DEMANDE < D'ACCES A 'DKU' : 3 VALEURS SONT LICITES: < 'SGNU0' : ACCES POSSIBLE A 'DKU', MAIS < NON DEMANDE, < 'SGNUI' : ACCES INTERDIT A 'DKU', < 'SGNU1' : ACCES DEMANDE A 'DKU' POUR LA < DEMANDE COURANTE. < (VOI DE PLUS LES VALEURS POSSIBLES DE < 'ASGNU' ET EN PARTICULIER 'ISGNPV'...) ISGNPV:: VAL NIL-ZERO < VALEUR QUE PREND 'ASGNU' LORSQU'IL N'Y < A PAS DE VOLUME MONTE. WORD NIL ASGNU:: VAL $-D-VARSAV < MEMORISATION DE L'ADRESSE DU BUFFER COU- < RANT DU DESCRIPTEUR DU VOLUME COURANT, < OU 'ISGNPV' S'IL N'Y A PAS DE VOLUME < MONTE, ALORS QUE LE DEMANDEUR DEMANDE < L'EXTENSION SUR VOLUME... WORD MONT0 NVSGNU:: VAL $-D-VARSAV < MEMORISATION DU NUMERO DE VOLUME COURANT < A L'ENTREE DES HANDLERS 'SGN' LORSQUE < L'ACCES A L'EXTENSION SUR VOLUME A ETE < DEMANDE. WORD NILK SGNCDA:: VAL $-D-VARSAV < NUMERO DE LA PREMIERE PAGE DE 32K DE < LA 'CDA' UTILISEE LORS DES EXTENSIONS < SUR VOLUME. < < < P I L E : < < XWPILE: VAL LPILEH+XXSGN3 PILSTN:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T L O A D - N O M : < < DCTLON: EQU $ PSTLON: WORD K;K;K;K;COM+DEPCS;DCTLON;NIL;PILLON;HANDLR;SMST;SO;SE #@ASCI " LON" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLSAV < HANDLER GENERAL. WORD HDLLON < HANDLER SPECIFIQUE 'LOAD-NOM'. WORD K;XXSGN1 < ETAT: ETAT1='8001 AFIN < DE CALCULER LE NOMBRE DE CHAMPS < A DEPLACER EN FONCTION DE < L'OPDEM D'APPEL < N=K SI OPDEM=2,N=1 SI OPDEM='A WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD SGNFUP < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE : < VARLON: EQU $ IF VARLON-DCTLON-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD LONNOM,X < RELAI NOM SYSTEME. LONNOM: EQU $ WORD NILK < 1ER MOT DU NOM SYSTEME. DZS XXSGN2 < ACN DU DEMANDEUR. BYTE EON;K DZS LNOMS/NOCMO < NOM ARGUMENT. WORD NIL < RELAI-VALEUR. WORD BUFLON < ADRESSE MOT DU BUFFER DE TRAVAIL. WORD NILX < RELAI VERS LE NOM ARGUMENT. DZS LDEM0B < BLOC DE DEMANDE. WORD NILK < INDEX 1ER OCTET DE LA VALEUR. WORD SP6 < CLEAR BUFFER DE TRAVAIL. WORD SP7 < GET/RELEASE SECTEURS DK. WORD SP8 < INIT. DE W AVEC @BUFFER. WORD SP9 < MOVE VALEUR. WORD SP10 < E/S DK (1SECTEUR). WORD SP11 < E/S VALEUR SUR DK. WORD SP12 < INSERT/DELETE NOM. WORD SP13 < E/S DK AVEC ARG=@SECTEUR. WORD SP14 < A <-- (BUFSAV). WORD SP20 < LECTURE DU DESCRIPTEUR DE VOLUME, WORD SP21 < REECRITURE DU DESCRIPTEUR DE VOLUME. WORD SP40 < (SLO,SLE) <-- 'MEMTV', PUIS 'CHAND'... WORD Z23 < FONCTION NON RECONNUE, WORD Z28 < ENVOI DE LA DEMANDE COURANTE, WORD Z36 < SORTIE OK, AVEC 'BOX', WORD Z51 < SORTIE OK, WORD Z36XY2 < TEST D'EXTENSION DE VOLUME, WORD Z26 < ERREUR DE . WORD Z26XX < ERREUR "SATURATION D'UN ESPACE"... WORD RELATS < DEMANDE DU SUIVANT SERIE. WORD NIL < AOVAL WORD NILK < ASTRAV WORD XXSGN9 < VGROUP. WORD SXSGF0 < SGNSGF. WORD SGNU0 < ISGNU. WORD NIL < ASGNU. WORD MONT0 < NVSGNU. WORD NILK < SGNCDA. < < PILE : < XWPILE: VAL LPILEH+XXSGN3 PILLON:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T L O A D - N O M S O U S : S Y S : < < DCTLNS: EQU $ PSTLNS: WORD K;K;K;K;COM+DEPCS;DCTLNS;NIL;PILLNS;HANDLR;SMST;SO;SE #@ASCI " LNS" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC. WORD XXLOC0 DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLSVS < HANDLER GENERAL. WORD HDLLON < HANDLER SPECIFIQUE. WORD K;XYSGN1 < ETAT : ETAT1=0. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD SGNFUP < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE : < VARLNS: EQU $ IF VARLNS-DCTLNS-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD LNSNOM,X < RELAI NOM-SYSTEME. LNSNOM: EQU $ WORD NILK < 1ER MOT DU NOM-SYSTEME. DZS XXSGN2 < ACN. BYTE EON;K DZS LNOMS/NOCMO < NOM ARGUMENT. WORD NIL < RELAI VALEUR. WORD BUFLNS < ADRESSE MOT DU BUFFER DE TRAVAIL. WORD NILX < RELAI NOM ARGUMENT. DZS LDEM0B < BLOC DE DEMANDE. WORD NILK < INDEX 1ER OCTET DE LA VALEUR. WORD SP6 < CLEAR BUFFER DE TRAVAIL. WORD SP7 < GET/RELEASE SECTEURS DK. WORD SP8 < INIT. W AVEC @BUFFER ALLOUE. WORD SP9 < MOVE VALEUR. WORD SP10 < E/S DK 1 SECETEUR. WORD SP11 < E/S DK VALEUR ENTIERE. WORD SP12 < INSERT/DELETE NOM. WORD SP13 < E/S DK AVEC ARG=@SECTEUR. WORD SP14 < A <-- (BUFSAV). WORD SP20 WORD SP21 WORD SP40 WORD Z23 < FONCTION NON RECONNUE, WORD Z28 < ENVOI DE LA DEMANDE COURANTE, WORD Z36 < SORTIE OK, AVEC 'BOX', WORD Z51 < SORTIE OK, WORD Z36XY2 < TEST D'EXTENSION DE VOLUME, WORD Z26 < ERREUR DE . WORD Z26XX < ERREUR "SATURATION D'UN ESPACE"... WORD RELATS < DEMANDE SUIVANT-SERIE. WORD NIL < AOVAL WORD NILK < ASTRAV WORD XXSGN9 < VGROUP. WORD SXSGFN < SGNSGF. WORD SGNUI < ISGNU ('DKU' INTERDIT POUR 'LNS'). WORD NIL < ASGNU. WORD MONT0 < NVSGNU. WORD NILK < SGNCDA. < < PILE : < XWPILE: VAL LPILEH+XXSGN3 PILLNS:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T L O A D - N O M S O U S < A C N > : < < DCTLNU: EQU $ PSTLNU: WORD K;K;K;K;COM+DEPCS;DCTLNU;NIL;PILLNU;HANDLR;SMST;SO;SE #@ASCI " LNU" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC. WORD XXLOC0 DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLSVU < HANDLER GENERAL. WORD HDLLON < HANDLER SPECIFIQUE. WORD K;XYSGN2 < ETAT : ETAT1=1, IL Y A EN EFFET < 2 CHAMPS A RECUPERE DANS LE < NOM ARGUMENT ET . WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD SGNFUP < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE : < VARLNU: EQU $ IF VARLNU-DCTLNU-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD LNUNOM,X < RELAI NOM-SYSTEME. LNUNOM: EQU $ WORD NILK < 1ER MOT DU NOM-SYSTEME. DZS XXSGN2 < ACN. BYTE EON;K DZS LNOMS/NOCMO < NOM ARGUMENT. WORD NIL < RELAI VALEUR. WORD BUFLNU < ADRESSE MOT DU BUFFER DE TRAVAIL. WORD NILX < RELAI NOM ARGUMENT. DZS LDEM0B < BLOC DE DEMANDE. WORD NILK < INDEX 1ER OCTET DE LA VALEUR. WORD SP6 < CLEAR BUFFER DE TRAVAIL. WORD SP7 < GET/RELEASE SECTEUR DK. WORD SP8 < INIT. W AVEC @BUFFER ALLOUE. WORD SP9 < MOVE VALEUR. WORD SP10 < E/S DK 1 SECTEUR. WORD SP11 < E/S DK VALEUR ENTIERE. WORD SP12 < INSERT/DELETE NOM. WORD SP13 < E/S DK AVEC ARG=@SECTEUR. WORD SP14 < A <-- (BUFSAV). WORD SP20 WORD SP21 WORD SP40 WORD Z23 < FONCTION NON RECONNUE, WORD Z28 < ENVOI DE LA DEMANDE COURANTE, WORD Z36 < SORTIE OK, AVEC 'BOX', WORD Z51 < SORTIE OK, WORD Z36XY2 < TEST D'EXTENSION DE VOLUME, WORD Z26 < ERREUR DE . WORD Z26XX < ERREUR "SATURATION D'UN ESPACE"... WORD RELATS < DEMANDE SUIVANT-SERIE. WORD NIL < AOVAL WORD NILK < ASTRAV WORD XXSGN9 < VGROUP. WORD SXSGFN < SGNSGF. WORD SGNUI < ISGNU ('DKU' INTERDIT POUR 'LNU'). WORD NIL < ASGNU. WORD MONT0 < NVSGNU. WORD NILK < SGNCDA. < < PILE : < XWPILE: VAL LPILEH+XXSGN3 PILLNU:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T D E L E T E - N O M : < < DCTDLN: EQU $ PSTDLN: WORD K;K;K;K;COM+DEPCS;DCTDLN;NIL;PILDLN;HANDLR;SMST;SO;SE #@ASCI " DLN" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLSAV < HANDLER GENERAL. WORD HDLDLN < HANDLER SPECIFIQUE DELETE-NOM. WORD K;XXSGN1 < ETAT : ETAT1='8001 AFIN < DE CALCULER LE NOMBRE DE CHAMPS < A DEPLACER EN FONCTION DE < L'OPDEM D'APPEL < N=K SI OPDEM=2,N=1 SI OPDEM='A WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD SGNFUP < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE : < VARDLN: EQU $ IF VARDLN-DCTDLN-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD DLNNOM,X < RELAI NOM SYSTEME. DLNNOM: EQU $ WORD NILK < 1ER MOT DU NOM SYSTEME. DZS XXSGN2 < DESTINES A L'ACN DU DEMANDEUR. BYTE EON;K DZS LNOMS/NOCMO < NOM ARGUMENT. WORD NIL < RELAI-VALEUR. WORD BUFDLN < ADRESSE MOT DU BUFFER DE TRAVAIL. WORD NILX < RELAI VERS LE NOM ARGUMENT. DZS LDEM0B < BLOC DE DEMANDE. WORD NILK < INDEX 1ER OCTET DE LA VALEUR. WORD SP6 < CLEAR BUFFER DE TRAVAIL. WORD SP7 < GET/RELEASE SECTEURS DK. WORD SP8 < INIT. DE W AVEC @BUFFER. WORD SP9 < MOVE VALEUR. WORD SP10 < E/S DK (1SECTEUR). WORD SP11 < E/S VALEUR SUR DK. WORD SP12 < INSERT/DELETE NOM. WORD SP13 < E/S DK AVEC ARG=@SECTEUR. WORD SP14 < A <-- (BUFSAV). WORD SP20 < LECTURE DU DESCRIPTEUR DE VOLUME, WORD SP21 < REECRITURE DU DESCRIPTEUR DE VOLUME. WORD SP40 WORD Z23 < FONCTION NON RECONNUE, WORD Z28 < ENVOI DE LA DEMANDE COURANTE, WORD Z36 < SORTIE OK, AVEC 'BOX', WORD Z51 < SORTIE OK, WORD Z36XY2 < TEST D'EXTENSION DE VOLUME, WORD Z26 < ERREUR DE . WORD Z26XX < ERREUR "SATURATION D'UN ESPACE"... WORD RELATS < DEMANDE DE LA VALEUR SUIVANTE < EN SERIE LORS DU TEST PRECEDANT < LE DELETE. WORD NIL < AOVAL WORD NILK < ASTRAV WORD XXSGN9 < VGROUP. WORD SXSGF0 < SGNSGF. WORD SGNU0 < ISGNU. WORD NIL < ASGNU. WORD MONT0 < NVSGNU. WORD NILK < SGNCDA. < < PILE : < XWPILE: VAL LPILEH+XXSGN3-2 PILDLN:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T S U I V A N T S E R I E : < < DCTNXS: EQU $ PSTNXS: WORD K;K;K;K;COM+DEPCS;DCTNXS;NIL;PILNXS;HANDLR;SMST;SO;SE #@ASCI " NXS" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC. WORD XXLOC0 DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLSAV WORD HDLNXT < HANDLER SPECIFIQUE NEXT. WORD K;XYSGN1 < ETAT : ETAT1=0. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD SGNFUQ < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE : < VARNXS: EQU $ IF VARNXS-DCTNXS-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD NXSNOM,X < RELAI NOM-SYSTEME. NXSNOM: EQU $ WORD K DZS XXSGN2 < ACN DEMANDEUR. BYTE EON;K DZS LNOMS/NOCMO < NOM ARGUMENT. WORD K WORD NIL < ADRESSE MOT DU BUFFER DE TRAVAIL !!! WORD NILX < RELAI NOM-ARGUMENT. DZS LDEM0B < BLOC DE DEMANDE. WORD K WORD SP6 WORD SP7 WORD SP8 WORD SP9 WORD SP10 WORD SP11 WORD SP12 WORD SP13 WORD SP14 < INUTILE, J'ESPERE !!! WORD SP20 WORD SP21 WORD SP40 WORD Z23 < FONCTION NON RECONNUE, WORD Z28 < ENVOI DE LA DEMANDE COURANTE, WORD Z36 < SORTIE OK, AVEC 'BOX', WORD Z51 < SORTIE OK, WORD Z36XY2 < TEST D'EXTENSION DE VOLUME, WORD Z26 < ERREUR DE . WORD Z26XX < ERREUR "SATURATION D'UN ESPACE"... WORD RELATS < DEMANDE DE LA VALEUR DU NOEUD < SUIVANT EN SERIE. WORD NIL < AOVAL WORD NILK < ASTRAV WORD XXSGN9 < VGROUP. WORD SXSGFN < SGNSGF. WORD SGNUI < ISGNU ('DKU' INTERDIT A 'NXS'). WORD NIL < ASGNU. WORD MONT0 < NVSGNU. WORD K < < PILE : < XWPILE: VAL LPILEH+XXSGN3-2 PILNXS:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T S U I V A N T P A R A L L E L E : < < DCTNXP: EQU $ PSTNXP: WORD K;K;K;K;COM+DEPCS;DCTNXP;NIL;PILNXP;HANDLR;SMST;SO;SE #@ASCI " NXP" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC. WORD XXLOC0 DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLSAV WORD HDLNXT < HANDLER SPECIFIQUE NEXT. WORD K;XYSGN1 < ETAT : ETAT1=0. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD SGNFUQ < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE : < VARNXP: EQU $ IF VARNXP-DCTNXP-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD NXPNOM,X < RELAI NOM-SYSTEME. NXPNOM: EQU $ WORD K DZS XXSGN2 < ACN DEMANDEUR. BYTE EON;K DZS LNOMS/NOCMO < NOM-ARGUMENT. WORD K WORD NIL < ADRESSE MOT DU BUFFER DE TRAVAIL !!! WORD NILX < RELAI NOM-ARGUMENT. DZS LDEM0B < BLOC DE DEMANDE. WORD K WORD SP6 WORD SP7 WORD SP8 WORD SP9 WORD SP10 WORD SP11 WORD SP12 WORD SP13 WORD SP14 < INUTILE, J'ESPERE !!! WORD SP20 WORD SP21 WORD SP40 WORD Z23 < FONCTION NON RECONNUE, WORD Z28 < ENVOI DE LA DEMANDE COURANTE, WORD Z36 < SORTIE OK, AVEC 'BOX', WORD Z51 < SORTIE OK, WORD Z36XY2 < TEST D'EXTENSION DE VOLUME, WORD Z26 < ERREUR DE . WORD Z26XX < ERREUR "SATURATION D'UN ESPACE"... WORD RELATP < DEMANDE DE LA VALEUR DU NOEUD < SUIVANT PARALLELE. WORD NIL < AOVAL WORD NILK < ASTRAV WORD XXSGN9 < VGROUP. WORD SXSGFN < SGNSGF. WORD SGNUI < ISGNU ('DKU' INTERDIT A 'NXP'). WORD NIL < ASGNU. WORD MONT0 < NVSGNU. WORD K < < PILE : < CALL #SISP CMS5 DOL2# PILNXP: EQU $-DEPILE XWPILE: VAL LPILEH+XXSGN3-2 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R G E N E R A L D E < G E S T I O N D E S ( N O M S , V A L E U R S ) : < < < PHILOSOPHIE DES NOMS : < SOIT UN AUQUEL UN DEMANDEUR < VEUT ASSOCIER UNE CERTAINE VALEUR. < VA ETRE RANGE DANS L'ARBRE GENERAL DU < SYSTEME. POUR EVITER LES CONFLITS DE NOM ENTRE < UTILISATEURS (...), L'ESPIONNAGE (...), < ON ASSOCIE A CHAQUE DEMANDEUR UN NUMERO < DE COMPTE OU . LE SYSTEME A UN NUMERO < DE COMPTE COMMUN A TOUS SES MODULES :SYS. < FINALEMENT UN DEMANDEUR DEVIENT < POUR LE SYSTEME UN , TEL QUE : < < ::= . < < ( DESIGNE UN CARACTERE SPECIAL DE FIN < DE NOM RENDU NECESSAIRE PAR LES NOMS QUI < POSSEDENT DES RACINES COMMUNES TELS QUE < 'DEBUT' ET 'DEBUTANT'...) < < < EXTENSION D'ADRESSAGE PAR VOLUME : < SOUS CERTAINES CONDITIONS, LA < ATTACHEE A UN PEUT ETRE EN FAIT UN < CHAINAGE VERS UN BLOC DE TYPE "IMAGE" < SITUE A UNE CERTAINE ADRESSE, SUR UN < CERTAIN VOLUME. CET ACCES A DES VOLUMES < MONTABLES N'EST AUTORISE QUE POUR 'LON', < 'STN' ET 'DLN', CE QUI FAIT QUE LES < VOLUMES SONT PRIVES (ATTACHES A UN < SEUL ), MAIS CE N'EST PAS UNE < CONTRAINTE AU NIVEAU SYSTEME, IL < SUFFIT DE SE SOUVENIR DE LA COMMANDE < "!L" SOUS ":SYS"... < ON NOTERA ENFIN QUE POUR 'LON' ET < 'STN' LE BLOC DE TYPE "IMAGE" EST < ECHANGE DIRECTEMENT ENTRE 'DKU' < ET 'MEMTV'. < < < NOTA : < LORSQUE L'EXTENSION SUR VOLUME < EST DEMANDEE (VOIR 'ASDEM'), ALORS < QU'IL N'Y A PAS DE VOLUME REEL- < LEMENT MONTE (VOIR 'BOX'), ALORS < TOUT EST REALISE, SAUF L'ACCES AU < VOLUME 'NSPDKG' (A SAVOIR L'ALLO- < CATION OU LE RELEAASE DE BLOCS, < LA MISE A JOUR DU DESCRIPTEUR < DU VOLUME,...) ET LES TRANSFERTS < ENTRE 'MEMTV' ET LE VOLUME ; CELA < PERMET DES REDEMARRAGES A "FROID" < DU SYSTEME... < < < UTILISATION DE ETAT1 ET NBCCH : < (ETAT1)=VALEUR INITIALE DE NBCCH AVANT CHAQUE < RECUPERATION DE (/ ). < SI ETAT1='8001 (< 0), SON DERNIER < BIT EST UN MASQUE APPLIQUE A Y (=2 OU 7 : < INDEX DU PERMETTANT DE < CALCULER NBCCH EN FONCTION DE L'OPDEM < D'APPEL (NBCCH=K SI OPDEM=2, ET < NBCCH=1 SI OPDEM=A)). < (NBCCH)=NBRE COURANT DE CHAMPS A RECUPERER MOINS 1. < < A T T E N T I O N : < 'NBCCH' N'EST PAS UNE ZONE ; IL < EST MANIPULE DANS UN REGISTRE (CF. < LA BOUCLE DE RECUPERATION DE ) !!! < < < ARGUMENT : < (AMDEM)=ADRESSE-OCTET D'UNE ZONE MEMOIRE < CONTENANT : < . < ( EST LA VALEUR A ASSOCIER < A ). < (CODEM)=LONGUEUR OCTET DE CETTE ZONE ; DANS LE CAS < DES EXTENSIONS SUR VOLUME, ON A ALORS : < MOCG(CODEM)=NUMERO DE LA PREMIERE PAGE < DE 32K DE LA 'CDA' UTILISEE, < MOCD(CODEM)=LVALU*NOCMO IMPERATIVEMENT. < (ASDEM) : SI <0 : LA VALEUR SUIT IMMEDIATEMENT < LE NOM, MAIS ATTENTION, POUR < 'LON', 'STN' ET 'DLN', LE < CHAMP 'MSGNU', S'IL CONTIENT < LA VALEUR 'ISGNU', PRECISE < QU'IL S'AGIT D'UNE EXTENSION < SUR VOLUME AMOVIBLE, LA VALEUR < REELLE DU DEPLACEMENT ETANT < DANS 'MSGNU')'MMOT'... LE 'CODEM' < DONNE ALORS LA LONGUEUR NON < COMPRIS LE BLOC DE TYPE "IMAGE". < SI >=K: ASDEM DONNE LE DEPLACEMENT DE LA < VALEUR PAR RAPPORT A L'ORIGINE < DU NOM, C'EST-A-DIRE AMDEM. < (DEPLACEMENT EN OCTETS !!!!) < (OPDEM)='2 : ON CONCATENERA DEVANT , < 'A : ON NE FERA PAS CETTE CONCATENATION ; CE < MODE RESERVE AU NUMERO DE COMPTE :SYS, < ET AU SYSTEME PERMET DE TRAVAILLER < DIRECTEMENT SUR LE CATALOGUE PRIMAIRE < DES NUMEROS DE COMPTE. < (A NOTER QUE CES 2 CODES SONT DES CODES D'ECRITURE < A CAUSE DES SWAPPINGS EVENTUELS...) < NOTA : LE BIT 'XXXSGF' PERMET DANS LE < CAS DE 'LON', 'STN' ET 'DLN' DE DISCRI- < MINER LES APPELS PROVENANT DU 'SGF' VIA < LE CCI DES AUTRES ; AINSI, ON PEUT ESPERER < QUE LES UTILISATEURS NE POURRONT PAS < CREER D'ITEMS RESSEMBLANT A DES FICHIERS < LORSQUE LE BIT 'OTODLN' DE 'ETASYS' EST A 0. < (BOX) : TRANSMET, LORSQU'ELLE EST VALIDE < S'IL Y A UN VOLUME MONTE POUR LE < DEMANDEUR : < =+NSPDKG : UN VOLUME EST MONTE, < =-NSPDKG : IL N'Y A PAS DE VOLUME MONTE. < < FGSGNA: VAL FGSGNA < VOIR LES DEFINITIONS FGSGN: VAL FGSGN < DU SYSTEME... < < < ENTRY DU HANDLER : < HDLSAV : ENTREE NUMERO DE COMPTE IMPLICITE : CELUI < CONTENU DANS LA DCT DANS LE CAS D'UN < UTILISATEUR, OU :SYS SINON. < HDLSVS : ENTREE AVEC LE NUMERO DE COMPTE :SYS < IMPLICITE. < HDLSVU : ENTREE AVEC NUMERO DE COMPTE PRECISE < DEVANT LE NOM ARGUMENT. < < < CODES-ERREUR : < 1 : ERRONE, < 2 : ARGUMENTS ERRONNES. < 3 : LE NOM EXISTE DEJA POUR < UN STORE, < 4 : LE NOM N'EXISTE PAS POUR < UN LOAD/DELETE. < OU BIEN IL S'AGIT D'UN ITEM < DE CONNEXION AU SGF, POUR < LEQUEL LE FICHIER EXISTTE ENCORE. < 5 : EN MODE NEXT (SERIE OU PARAL- < LELE) LE SUIVANT DEMANDE < N'EXISTE PAS. < 8 : PLUS DE PLACE DANS L'ARBRE, OU < BIEN DANS L'ESPACE 'DKM'... < 10: UN ACCES 'DKU' A ETE DEMANDE SUR UN < HANDLER POUR LEQUEL CELA EST INTERDIT. < 11: LORS D'UN ACCES 'DKU' LA LONGUEUR DE < LA DIFFERE DE LVALU*NOCMO(=4). < 12: LE DESCRIPTEUR DU VOLUME EST MAUVAIS. < 13: LE VOLUME DEMANDE N'EST PAS LE VOLUME < MONTE. < < <******************************************************************************* ENNE:: VAL 1 < NOM ERRONE, ENAE:: VAL '0@@@@+I < ARGUMENTS ERRONES, ENNES:: VAL '0@@@@+I < LE NOM EXISTE DEJA POUR UN STORE, ENNX:: VAL '0@@@@+I < LE NOM N'EXISTE PAS POUR LOAD/DELETE, ENSX:: VAL '0@@@@+I < LE SUIVANT N'EXISTE PAS EN NEXT. ENPDP:: VAL '0@@@@+I+I+I < PLUS DE PLACE DANS L'ARBRE, OU < BIEN SUR 'DKM'... ENDKUS:: VAL '0@@@@+I+I+I+I+I+I+I+I < UN ACCES 'DKU' A ETE DEMANDE, ALORS < QUE CELA EST INTERDIT SUR CE HANDLER. ENDKUL:: VAL '0@@@@+I < UN ACCES 'DKU' A ETE DEMANDE, ET LA < LONGUEUR DE EST MAUVAISE. ENDKUV:: VAL '0@@@@+I < LE DESCRIPTEUR DU VOLUME EST MAUVAIS. ENDKUW:: VAL '0@@@@+I < LE VOLUME DEMANDE N'EST PAS LE VOLUME < MONTE. <******************************************************************************* <******************************************************************************* XWOR%F: VAL ENNES ENNES: @VAL '0@@@@ < ERREUR : NOM PRE-EXISTANT POUR UN 'STN'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL ENNX ENNX: @VAL '0@@@@ < ERREUR : NOM INEXISTANT POUR 'LON'/'DLN'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL ENSX ENSX: @VAL '0@@@@ < ERREUR : SUIVANT INEXISTANT EN 'NXP/NXS'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* USE W,DEM0 USE L,DCT0 RZ23: EQU $ BR VAR+RAZ23 < FONCTION NON RECONNUE... < < < E N T R Y : S Y S I M P L I C I T E : < < HDLSVS: EQU $ LA ACNSYS LB ACNSYS+U < RECUPERATION (A,B)=':SYS'. STA VAR+NOMSX1 STB VAR+NOMSX1+U < ON FORCE ':SYS' DEVANT LE IF U-1,,XEIF%, IF TOUT CELA EST IDIOT !!! XEIF%: VAL ENDIF < NOM ARGUMENT. LXI FGSGNA < BIEN QUE L'ON AIT FORCE ':SYS' < ON FAIT COMME SI CE N'ETAIT PAS < :SYS, EN EFFET, L'ACN DU < DEMANDEUR N'EST PAS OBLIGATOI- < REMENT CELUI DU SYSTEME, ET < AINSI ON BLOQUE LA FONCTION 'A. JMP Z66 < < < E N T R Y A C N P R E C I S E : < < HDLSVU: EQU $ LA ARGDEM+OPDEM < VALIDATION DE LA FONCTION < DEMANDEE. CPI FGSGNA < SEULE '2 EST AUTORISEE. JMP Z91 < VERS UN TRAITEMENT IDENTIQUE < A LA FONCTION 'A SUR HDLSAV. < < < E N T R Y A C N I M P L I C I T E : < < HDLSAV: EQU $ < < DISCRIMINATION DES APPELS "NORMAUX" < DES APPELS POUR LE "SGF" (CAS DE < 'HDLSTN', 'HDLLON' ET 'HDLDLN') : < LBI SXSGFN < (B)=APPEL NORMAL A PRIORI... LA ARGDEM+OPDEM TBT XXXSGF < ALORS ??? JNC Z18XX < OUI, "ITEM NORMAL"... RBT XXXSGF < NON, "ITEM SGF", STA ARGDEM+OPDEM < ON EFFACE 'XXXSGF', LBI SXSGFF < ET (B)=APPEL SGF... Z18XX: EQU $ STB VAR+SGNSGF < ET MEMORISATION DE LA NATURE DE L'APPEL. < < RECUPERATION DE L' DU DEMANDEUR : < LA ARGDEM+ETADEM < (A)=NSP DU DEMANDEUR. CPI NSPACT < EST-CE LE NIVEAU ESCLAVE, PAR < L'INTERMEDIAIRE D'UN NIVEAU < DE SERVICE ???? JNE Z18 < NON, C'EST LE SYSTEME. < < CAS D'UNE DEMANDE ESCLAVE ; ALORS W QUI < CONTIENT L'ADRESSE DE LA DEMANDE DEMESC, < DONNE AUSSI A UNE TRANSLATION PRES < L'ADRESSE DE L'ACN DE L'ESCLAVE DEMANDEUR : < LA ACNESC-DEMESC,W LB ACNESC-DEMESC+U,W JMP Z19 < (A,B)=ACN DE L'ESCLAVE DEMANDEUR. < < CAS DU SYSTEME DEMANDEUR : < Z18: EQU $ LA ACNSYS LB ACNSYS+U < (A,B)= DU SYSTEME. Z19: EQU $ < (A,B)= DEMANDEUR. STA VAR+NOMSX1 < GENERATION DU . STB VAR+NOMSX1+U < < VALIDATION DE LA FONCTION DEMANDEE (EN < TENANT COMPTE DU NUMERO DE COMPTE DU < DEMANDEUR) : < < < ON A ICI : < (A,B)= DEMANDEUR. < LXI FGSGNA < INITIALISATION A PRIORI, LE < DEMANDEUR N'EST PAS :SYS. CP ACNSYS JNE Z66 < CE N'EST PAS :SYS (X=2). LR B,A CP ACNSYS+U JNE Z66 < CE N'EST PAS :SYS (X=2). LXI FGSGN < C'EST :SYS (X='A). Z66: EQU $ XXSGN5:: VAL NOMSX1-NOMS*NOCMO < RANG DU PREMIER CARACTERE DU ET . XXSGN4:: VAL XXSGN2*NOCMO+W+XXSGN5 < (+1 A CAUSE DE 'EON') IDEM, LORSQU'IL < Y A CONCATENATION... IF XXSGN4-XVACN7,,XEIF%, IF ATTENTION : LA VALEUR ANTICIPEE DE 'XXSGN4' EST FOLLE !!! XEIF%: VAL ENDIF IF XXSGN4-XXSGN5-XVACN5,,XEIF%, IF ATTENTION : LA VALEUR ANTICIPEE DE 'XXSGN5' EST FOLLE !!! XEIF%: VAL ENDIF LYI XXSGN4 < A PRIORI, (Y)=RANG DU PREMIER < CARACTERE DE DANS < . (CONCATENATION < DEMANDEE ET ). LA ARGDEM+OPDEM < (A)=FONCTION DEMANDEE. CPI FGSGNA JE Z68 < OK, FONCTION 'AVEC CONCATENATION' < DE ET . CPR A,X < TEST DES AUTRES FONCTIONS < EN TENANT COMPTE DE L' < DEMANDEUR. Z91: EQU $ < ENTRY POUR HDLSVU. JNE RZ23 < ERREUR : FONCTION NON RECONNUE, < OU FONCTION 'A DEMANDEE PAR < UN DIFFERENT DE :SYS. LYI XXSGN5 < (Y)=RANG DU PREMIER CARACTERE DU < LORSQUE LA CONCATENATION N'EST < PAS DEMANDEE. Z68: EQU $ TBT XXXSGF < VALIDATION DE L'ORIGINE DE L'APPEL, JNC Z68XX < ARRIVE ICI, 'XXXSGF' NE PEUT ETRE QUE < NUL DANS L'OPDEM... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE POURQUOI JE ME SUIS TROMPE !!! < Z68XX: EQU $ < < < T E S T D E L ' E X T E N S I O N S U R V O L U M E : < < IF SGNUI-K,XEIF%,, IF ATTENTION : LE 'CPZ' EST MAUVAIS !!! XEIF%: VAL ENDIF CPZ VAR+ISGNUV < L'EXTENSION EST-ELLE VALIDE ??? JL Z68XX9 < NON, 'ISGNUV' RESTE INTACT, IF SGNU0-K,,XEIF%, IF ATTENTION : LE 'STZ' EST MAUVAIS !!! XEIF%: VAL ENDIF STZ VAR+ISGNUV < OUI, ON L'INHIBE A PRIORI... Z68XX9: EQU $ LA ARGDEM+ASDEM < (A)='ASDEM' DE LA DEMANDE : XWOR%1: VAL MSGNU=K SLRD XWOR%1 < ET ACCES AU DISCRIMINATEUR DES ACCES < AUX EXTENSIONS SUR VOLUME... < (B)=RESIDU DE 'ASDEM'... XWOR%1: VAL -XWOR%1 XWOR%2: VAL CODBT=FMASK(K?MSGNU=FCINST)MSGNU IF XWOR%2-L,,XEIF%, ANDI MSGNU>XWOR%1 < EXTRACTION DU CHAMP 'MSGNU'. XEIF%: VAL ENDIF IF XWOR%2-BSGNU,,XEIF%, IF ATTENTION : 'BSGNU' EST BIZARRE !!! XEIF%: VAL ENDIF CPI ISGNU < ALORS, EST-CE L'EXTENSION VOLUME ??? JNE Z68XX1 < NON... < < CAS OU L'ACCES VOLUME EST DEMANDE : < RBT MSGNU=BSGNU < ON SUPPRIME LE BIT DE DISCRIMINATION, < CE QUI DONNE : < (A)='NSP' D'ACCES AU DISQUE DE SUPPORT < DU VOLUME D'EXTENSION. IF SGNUI-K,XEIF%,, IF ATTENTION : LE 'CPZ' EST MAUVAIS !!! XEIF%: VAL ENDIF CPZ VAR+ISGNUV < OUI, MAIS L'ACCES AU VOLUME EST-IL < AUTORISE SUR CE HANDLER ??? JL Z68XX2 < NON, ERREUR !!! < < CAS OU L'ACCES VOLUME EST LICITE : < PSR A LA NSPTYP < (A)='NPSTYP' DE LA DEMANDE INCIDENTE : TBT VBOX < LA 'BOX' EST-ELLE VALIDE ??? PLR A JNC Z68XX5 < NON, ON LAISSE 'A' INCHANGE... LA BOX < OUI, (A)='BOX'... Z68XX5: EQU $ < < ON A ICI : < (A)='NSP' DU DISQUE TRANSMIS PAR 'BOX' SI CELLE-CI EST < VALIDEE (CE 'NSP' EST EN POSITIF OU EN < NEGATIF SUIVANT QUE LE VOLUME EST MONTE < OU PAS), < ='NSP' DU DISQUE D'EXTENSION TRANSMIS PAR 'ASDEM' < SINON. < IF ISGNPV-K,,XEIF%, IF ATTENTION : LE 'STZ' EST IDIOT !!! XEIF%: VAL ENDIF STZ VAR+ASGNU < A PRIORI, ON FAIT COMME SI LE VOLUME < N'ETAIT PAS MONTE... < < TEST DU VOLUME COURANT : < JAG Z68XX7 < (A)>0 : IL Y A UN VOLUME DE MONTE... NGR A,A < (A)<0 : IL N'Y A PAS DE VOLUME MONTE < POUR CET UTILISATEUR, MAIS ON < CONNAIT QUAND MEME LE 'NSP' DU < DISQUE SUPPORT... JAG Z68XX8 < OK,LE 'NVP' EST VALIDE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT ON PEUT SE < RETROUVER EN PRESENCE D'UN 'NVP' < DE DISQUE SUPPORT D'EXTENSION NUL !!! < Z68XX8: EQU $ JMP Z68XX6 < ON VA TRAITER LA DEMANDE D'EXTENSION < LICITE, MAIS SANS FAIRE LES OPERATIONS < QUI ACCEDE REELLEMENT AU DISQUE ; POUR < CE FAIRE, ON A : < (ASGNU)='ISGNPV'... < < CAS OU L'OPERATION EST LICITE, < ET QU'IL Y A UN VOLUME MONTE : < Z68XX7: EQU $ PSR A,X,L,W < SAUVEGARDE EN PARTICULIER DE LA BASE < DE LA 'DCT' COURANTE ET DU 'NSP' DU < DU DISQUE D'EXTENSION 'A'. LR L,W < QUE L'ON MET TEMPORAIREMENT DANS 'W'... LR A,X < (X)='NSP' DU SUPPORT DU VOLUME, LA ETASYS < (A)=LISTE DES INDICATEURS SYSTEME, TBT NBITAB+NBITAB-NSPDK,X < ALORS, LE DISQUE DEMANDE EST-IL LA ??? JC Z68XXU < OK, 'DKU' EST LA... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT LA DEMANDE DE < MONTAGE A PU ETRE ACCEPTEE, ALORS < QUE 'DKU' EST ABSENT, ET QUE LE < 'CCI' LE DETECTE ; PEUT-ETRE 'ETASYS' < A-T'IL ETE MODIFIE DEPUIS A LA MAIN !!! < JMP Z68XXV < ET ON FAIT COMME S'IL N'Y AVAIT PAS DE < VOLUME DE DEMANDE... Z68XXU: EQU $ BSR ACADCT < (A)=(L)=ADRESSE DE LA 'DCT' DU SUPPORT < DU VOLUME D'EXTENSION. WORD LAVOLV < INSTRUCTION 'LA VAR+ABVOLU', QUI DONNE : < (A)=ADRESSE DU BUFFER DE DESCRIPTION < DU VOLUME COURANT, LR A,L < (L)=ADRESSE DU DESCRIPTEUR DE VOLUME. STA VAR-DCT0+ASGNU,W < QUE L'ON SAUVEGARDE DANS LA 'DCT' < DU HANDLER COURANT DU 'SGN' (A NOTER < L'USAGE DE 'W' A LA PLACE DE 'L'). IF MONT0-K,,XEIF%, IF ATTENTION : LES VALIDATIONS QUI SUIVENT SONT IDIOTES !!! XEIF%: VAL ENDIF IF NSPVID-K,,XEIF%, IF ATTENTION : LES VALIDATIONS QUI SUIVENT SONT IDIOTES !!! XEIF%: VAL ENDIF LA VOLNSP,L < (A)='NSP' D'INITIALISATION DU VOLUME, JALE Z68XX3 < OU BIEN IL N'Y A PAS DE VOLUME MONTE, < OU BIEN LE DISK-PACK EN PLACE N'EST < PAS UN VOLUME... LA VOLNUM,L < (A)=NUMERO DU VOLUME COURANT : JANE Z68XX4 < OK, LE VOLUME PARAIT BON (DU MOINS, IL < Y EN A UN DE MONTE...). Z68XX3: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE : CELA PEUT SE PRODUIRE < DANS LE CAS OU LE DISK-PACK AURAIT ETE < CHANGE DISCRETEMENT ENTRE LE MOMENT DU < MONTAGE ET MAINTENANT !!! < Z68XXV: EQU $ PLR A,X,L,W JMP Z68XXW < ET ON FAIT COMME SI L'ACCES 'DKU' N'AVAIT < PAS ETE DEMANDE... < < CAS D'UN ACCES 'DKU' DEMANDE, < ALORS QUE L'ACCES EST POSSIBLE, < ET LE VOLUME APPAREMMENT BON : < Z68XX4: EQU $ STA VAR-DCT0+NVSGNU,W < ON MEMORISE LE NUMERO DE VOLUME COURANT, < CAR ON EN AURA BESOIN DANS 'DLN' ET 'LON' < POUR COMPARER LE NUMERO DE VOLUME SUPPORT < DE L'ITEM ET LE NUMERO DU VOLUME MONTE. PLR A,X,L,W Z68XX6: EQU $ STA VAR+ISGNUV < ET ON POSITIONNE L'INDICATEUR 'ACCES < A 'DKU' DEMANDE ET LICITE', AVEC < LE 'NSP' D'ACCES AU DISQUE... < NE PAS OUBLIER 'ASGNU' !!! Z68XXW: EQU $ SLLD NBITMO < RECUPERATION DU RESIDU DE 'ASDEM', < DANS 'B'... XWOR%1: VAL MSGNU=K SARS NBITMO-XWOR%1 < DONT ON ETEND LE SIGNE, CAR EN EFFET < LE DEPLACEMENT - DANS LE < CAS DES EXTENSIONS SUR VOLUME TIENT < DANS LE CHAMP 'MSGNU')'MMOT'. STA ARGDEM+ASDEM < ET ON FAIT COMME SI DE RIEN N'ETAIT (ON < FAIT EN SORTE QU'A PARTIR D'ICI 'ASDEM' < QUE L'EXTENSION SUR VOLUME SOIT < DEMANDEE OU PAS, 'ASDEM' SOIT LE MEME...) IF PAGSGN-MOCG,,XEIF%, IF ATTENTION : LES INSTRUCTIONS SUR OCTET SONT INVALIDES !!! XEIF%: VAL ENDIF LBY ARGDEM+CODEM < (A)=NUMERO DE LA PREMIERE PAGE DE 32K < DE LA 'CDA' UTILISEE PAR CETTE EX- < TENSION SUR VOLUME, CPI XNDSLO < EST-ELLE VALIDE ??? JG Z68YX1 < NON, CELA SIGNIFIE QUE LE 'CODEM' NE < VALAIT PAR 'LVALU*NOCMO' LORSQUE LE < 'HDLSVC' A RECU CETTE DEMANDE, DONC, < EN CAS D'ERREUR ON NE FAIT RIEN... STA VAR+SGNCDA < OK, ON LE MEMORISE EN VUE DE SON UTILI- < SATION PAR 'SP40'... LAI K STBY ARGDEM+CODEM < PUIS ON CLEAR LE MOCG(CODEM), AFIN QU'ON < FASSE COMME SI DE RIEN N'ETAIT... Z68YX1: EQU $ < < < A C C E S A < N O M > : < < Z68XX1: EQU $ LA ARGDEM+ASDEM < VALIDATION DE ASDEM. CP ARGDEM+CODEM < TEST DE SORTIE DE LA VALEUR DE < L'ESPACE REPRESENTE PAR AMDEM < ET CODEM. JGE RZ23 < ERREUR : ASDEM>=CODEM. < < RECUPERATION DU ARGUMENT : < LA ARGDEM+AMDEM < (A)=@OCTET DE LA ZONE MEMOIRE < NOM+VALEUR. BSR AMEM < GENERATION D'1N RELAI D'ACCES < AU . STA VAR+ANOM < RELAI D'ACCES AU DANS A. < < ON A ICI : < (X)=RANG DU 1ER CARACTERE DE . < LB ARGDEM+CODEM < (B)=CODEM ARG. CPZR B < VALIDATION. JLE RZ23 < ERREUR. XWOR%1: VAL MOCG=K XWOR%1: VAL -XWOR%1 IF MOCG>XWOR%1+N-YY8,,XEIF%, IF ATTENTION : LE 'LBY' EST IDIOT !!! XEIF%: VAL ENDIF LBY ARGDEM+CODEM < (A)=NOMBRE DE SECTEURS PAR DEFAUT < NECESSAIRES A LA VALEUR ; CE < NOMBRE EST APPROXIMATIF, CAR < LE CODEM CONTIENT LE < EN PLUS DE LA ... NTRN CPI TZSWAP-TZSCRA+QUANTA-E/QUANTA*QUANTA-E TRN < VALIDATION DU NOMBRE DE SECTEURS PAR < RAPPORT A LA CAPACITE DE LA MAP. < (CALCULEE A L'AIDE DE LA TAILLE DE < L'ESPACE DE SWAPPING...). JGE RZ23 < ERREUR : TROP GRANDE. ADR X,B < (B)=RANG DU DERNIER OCTET DE < LA ZONE MEMOIRE NOM+VALEUR. LAI EON STBY VAR+NOMSX1+XXSGN2 < RESTAURATION A PRIORI DE < DERRIERE L' , AU CAS OU < UN APPEL A 'HDLSVU' AVEC UN < DE LONGUEUR ERRONNEE < AURAIT PRECEDE... < < DETERMINATION DU NOMBRE DE CHAMPS A DEPLACER : < LA ETAT1 < RECUPERATION DE ETAT1. JAGE Z1020 < ETAT>=0 : ETAT1 DONNE < DIRECTEMENT LE NBRE DE CHAMPS < A DEPLACER -1. ANDR Y,A < SINON, ETAT1 EST UN MASQUE : < (A)=1 SI (Y)=7 (OPDEM=2), < (A)=K SI (Y)=2 (OPDEM=A). EORI XYSGN2 < INVERSION DU BIT15 DE A : < (A)=K SI OPDEM=2 (1 CHAMP A MOVER), < (A)=1 SI OPDEM=A (2 CHAMPS). < < VALIDATION DE L'INDEX DU < AVANT CHQUE CHAMP A DEPLACER : < Z1020: EQU $ PSR A < SAUVEGARDE DU NOMBRE DE CHAMPS < RESTANT A DEPLACER LR Y,A < POUR VALIDATION DE (Y). CPI XXSGN4 < (Y) NE PEUT VALOIR QUE 2 OU 7 !!! JG Z25 < ERREUR : ON DEPLACE 2 CHAMPS, < ET L' DONNE EN ARGUMENT < EST ERRONE... < < BOUCLE DE RECUPERATION DE : < (OU ) < Z20: EQU $ < < ON A ICI : < (X)=INDEX , < (Y)=INDEX . < <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : LBY &VAR+ANOM < (A)=UN CARACTERE DE . <******************************************************************************* RBT BITPAR < RAZ DU BIT DE PARITE, POUR EVITER PAR < EXEMPLE DE CREER DES NOMS CONTENANT DES < 'EOT' INTRODUITS ICI AVEC LA PARITE... JAE Z25 < LES CARACTERES 'NULL' SONT < INTERDITS (CF. L'USAGE SPECIAL < QUI EN EST FAIT DANS L'AR- < BORICULTEUR). XR X,Y < ECHANGE INDEX. STBY &VAR+ANOMS < GENERATION . XR X,Y < RE-ECHANGE DES INDEX. ADRI I,X < PROGRESSION INDEX . ADRI I,Y < PROGRESSION INDEX . CPI EON < LE CARACTERE TRANSFERE ETAIT-IL < LE CARACTERE ???? JE Z21 < OUI, DONC LE TRANSFERT EST TERMINE. LR Y,A CPI LNOMS+XXSGN4 < VALIDATION INDEX . JGE Z25 < ERREUR, LE CARACTERE < MANQUE... CPR B,X JNE Z20 < OK, ACCES CARACTERE SUIVANT DE < . < < CAS OU ARRIVE A L'EXPIRATION DU COMPTE < D'OCTETS, ON N'A PAS RENCONTRE L' : < BSR ACANSP < CANSP RENVOIE : (A)=NSP DU HANDLER < QUI UTILISE ACTUELLEMENT HDLSAV. CPI NSPNXP < EST-CE 'HDLNXP' ??? JE Z21 < L'ABSENCE DE EST DONC < NORMALE (CF. LES RECONSTI- < TUTIONS DE CATALOGUES). CPI NSPNXS < EST-CE 'HDLNXS' ?? JNE Z25 < NON, LE HANDLER COURANT, < N'ETANT NI 'HDLNXP', NI < 'HDLNXS', L'ABSENCE DE , < EST UNE ERREUR 'NOM-ERRONNE'. < < FIN DE BOUCLE DE RECUPERATION : < Z21: EQU $ PLR A < RECUPERATION ET ADRI -I,A < DECREMENTATION DU < NOMBRE DE CHAMPS A DEPLACER JAGE Z1020 < IL Y A ENCORE DES CHAMPS < DU TYPE , A < DEPLACER. < < DETERMINATION DE LA POSITION DE LA VALEUR : < LA ARGDEM+ASDEM FOLLOW:: VAL FGSGNN < VALEUR STANDARD A DONNER A 'ASDEM' POUR < INDIQUER UNE VALEUR QUI SUIT IMMEDIATE- < MENT UN NOM... <******************************************************************************* XWOR%F: VAL FOLLOW FOLLOW: @VAL '0@@@@ < 'ASDEM' SI SUIT . CALL #SISP CMS5 GEN CTE# <******************************************************************************* IF FOLLOW-K,XEIF%,, IF ATTENTION : LE 'JAL' QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF JAL Z92 < ASDEM<0 : LA VALEUR SUIT < IMMEDIATEMENT LE NOM, D'OU : < IVAL=X. LR A,X < DANS LE CAS OU ASDEM>=K, ON A : < IVAL=ASDEM. Z92: EQU $ STX VAR+IVAL < SAUVEGARDE DANS IVAL DE < L'INDEX DU 1ER OCTET DE LA < VALEUR DU . < < TEST D'UN ACCES AUX EXTENSIONS SUR VOLUME : < CPZ VAR+ISGNUV < UN ACCES AUX VOLUMES EST-IL DEMANDE ??? JLE Z92X1 < NON, OU BIEN IL EST ILLICITE... < < CAS D'UN ACCES EXTENSIONS DEMANDE : < LR B,A < (A)='CODEM' ARGUMENT=INDEX DU PREMIER < OCTET N'APPARTENANT PLUS A LA < , SBR X,A < (A)=LONGUEUR EN OCTETS DE , CPI LVALU*NOCMO < CETTE LONGUEUR EST-ELLE BIEN CELLE QUI < EST IMPOSEE LORS DES EXTENSIONS SUR < VOLUME ??? XWOR%1: VAL PAGSGN)MMOT < MASQUE DU 'CODEM' REEL... IF LVALU*NOCMO-XWOR%1,XEIF%,XEIF%, IF ATTENTION : LA MISE DU NUMERO DE LA PREMIERE PAGE IF DE 32K DE LA 'CDA' UTILISEE LORS DES EXTENSIONS SUR IF VOLUME DANS PAGSGN(CODEM) EST IMPOSSIBLE !!! XEIF%: VAL ENDIF JNE Z92X2 < NON, ALORS LA DEMANDE EST REFUSEE... Z92X1: EQU $ < < < T E S T D E L ' E X I S T E N C E D E < N O M > : < < < < GENERATION D'UNE DEMANDE AU GESTIONNAIRE DES ARBRES : < (L'ARBORICULTEUR ?????) < LA VAR+TENEXT < INITIALISATION DE L'ASDEM VERS < LE HANDLER HDLTRI. STA VAR+DEMSAV+T+ASDEM LRM A BYTE NSPTRI;COSBT?VBOX=FMASK(K=FCINST < VALIDATION DE LA 'BOX'... STA VAR+DEMSAV+XXNSP < NSPTYP DE LA DEMANDE. LAI FGT < FONCTION DE TEST. STA VAR+DEMSAV+T+OPDEM LAD VAR+NOMSX1 < @MOT DU . SLLS NOCMO=K < @OCTET DU . STA VAR+DEMSAV+T+AMDEM ADRI -XXSGN5,Y < (Y)=NBRE DE CARACTERES DU < . STY VAR+DEMSAV+T+CODEM LAD VAR+DEMSAV XR A,W < (W)=@DEMANDE A L'ARBORICULTEUR, < (A)=@DEMANDE ARGUMENT DE HDLSAV. BSR ACHAND < ENVOI DE LA DEMANDE DE TEST < DU . WAIT WEIO < ATTENTE DE FIN DE TEST. < < NOTA : < LES CONDITIONS DE RETOUR DE HDLTRI < (ETADEM) NE SERONT TESTEES QUE DANS LES < HANDLERS SPECIFIQUES, PUISQUE < L'INTERPRETATION DIFFERE SUIVANT LA < FONCTION QUI EST DEMANDEE. < LR A,W < RESTAURE (W)=@DEMANDE A HDLSAV. LA VAR+DEMSAV+T+ETADEM < < ON A ICI : < (A)=CONDITION DE RETOUR DE L'ARBORICULTEUR, < (X)=RANG DU 1ER OCTET DE LA VALEUR. < (B)=RANG DERNIER OCTET DE LA VALEUR. < BSR ARIT < APPEL DU HANDLER SPECIFIQUE. IF XBNV-BITSIG,,XEIF%, IF ATTENTION : DES TESTS MERDERONT !!! XEIF%: VAL ENDIF < < < A T T E N T I O N : < 'ETAT0' DES HDLSAV DOIT ETRE POSITIONNE < PAR LES HANDLERS SPECIFIQUES... < < < < < S O R T I E S D U H A N D L E R : < < Z22: EQU $ RSR < < ERREUR : TROP LONG : < Z25: EQU $ PLR A < CAR ON AVAIT EMPILER LE < NOMBRE DE CHAMPS A DEPLACER LAI ENNE < CODE-ERREUR. Z24: EQU $ STA ETAT0 < RENVOI DU CODE-ERREUR DANS ETAT0. JMP Z22 < VERS LA SORTIE. < < ERREUR : ARGUMENT DE LA DEMANDE ERRONNES : < Z23: EQU $ LAI ENAE < CODE ERREUR. JMP Z24 < VERS LE RENVOI DU CODE ERREUR < AU DEMANDEUR. < < ERREUR : DEMANDE D'EXTENSION SUR < VOLUME A UN HANDLER 'SGN' POUR < LEQUEL CELA EST ILLICITE : < Z68XX2: EQU $ LAI ENDKUS < CODE D'ERREUR, JMP Z24 < VERS SON RENVOI AU DEMANDEUR... < < ERREUR : LA LONGUEUR DE < EST MAUVAISE (DIFFERENTE DE < LVALU*NOCMO) LORS D'UNE EXTEN- < SION SUR VOLUME) : < Z92X2: EQU $ LAI ENDKUL < CODE D'ERREUR, JMP Z24 < VERS SON RENVOI AU DEMANDEUR... PAGE < < < C L E A R B U F F E R D E T R A V A I L : < < < FONCTION : < CETTE VERSION DE 'SP6' REMPLACE < LA VERSION QUI AVAIT A SA CHARGE < D'ALLOUER ET RELEASER DES BUFFERS < ALLOUES DYNAMIQUEMENT ; AUJOURD'HUI, < LES CHOSES ONT CHANGE, LE BUFFER < EST LIE STATIQUEMENT AU HANDLER, ET < ON SE CONTENTE DE LE RAZER... < < SP6: EQU $ PSR A,X,W LRM X WORD YY7*QUANTA < (X)=NOMBRE DE MOTS A RAZER. BSR VAR+ASP14 < A <-- (BUFSAV). LR A,W < (W)=ADRESSE DU BUFFER. IF MONT0-K,,XEIF%, IF ATTENTION : LE 'STZ' EST MAUVAIS !!! XEIF%: VAL ENDIF IF NSPVID-K,,XEIF%, IF ATTENTION : LE 'STZ' DE CLEAR DU BUFFER EST MAUVAIS !!! XEIF%: VAL ENDIF SP6X: EQU $ STZ O,W < RAZ DU BUFFER MOT A MOT... ADRI P,W < AU MOT SUIVANT... JDX SP6X < S'IL EXISTE... PLR A,X,W RSR PAGE < < < G E T / R E L E A S E S E C T E U R S : < < < ARGUMENTS : < (A)=NSPGET/NSPREL, SUIVANT LA FONCTION DEMANDEE, < (B)=NBRE DE SECTEURS CONCERNES. < < SP7: EQU $ SWBR A,A STA VAR+DEMSAV+XXNSP < GENERATION DU NSPTYP DE LA < DEMANDE. BSR VAR+ASP14 < (A)=ADRESSE MOT DU BUFFER STATIQUE. ADRI SMAP,A < (A)=@MOT DE LA LISTE DE SECTEURS. STA VAR+DEMSAV+T+AMDEM STB VAR+DEMSAV+T+CODEM STZ VAR+DEMSAV+T+OPDEM BR VAR+RAZ28 < VERS L'ENVOI DE LA DEMANDE. PAGE < < < I N I T I A L I S A T I O N D E W : < < < RESULTAT : < (W)=ADRESSE MOT DU BUFFER STATIQUE. < (A)=(W) AVANT L'APPEL. < < SP8: EQU $ BSR VAR+ASP14 < (A)=ADRESSE MOT DU BUFFER STATIQUE. XR A,W < INITIALISATION DE W. RSR PAGE < < < A <-- ( B U F S A V ) < E T V A L I D A T I O N : < < SP14: EQU $ LA VAR+BUFSAV < A <-- (BUFSAV), JAL SP14X < OK, (BUFSAV) DOIT ETRE UNE ADRESSE < DANS L'ESPACE 'DOL2'... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ETRE TRES PRUDENT, ET VERIFIER SI < ON EST DANS 'NXP' OU 'NXS', AUQUEL < CAS, CELA SIGNIFIERAIT QUE LES < BUFFERS 'BUFNXP' ET 'BUFNXS' ETAIENT < UTILES !!! < ATTENTION, METTRE QUELQUE CHOSE < DANS 'A'... < SP14X: EQU $ RSR PAGE < < < D E P L A C E M E N T V A L E U R : < < < FONCTION : < CETTE ROUTINE EST CHARGEE DES < TRANSFERTS ENTRE LE BUFFER DU < SECTEUR-MAP, ET LA 1ERE PARTIE DE LA VALEUR < (2*SIND OCTETS AU MAX). < < < ARGUMENTS : < (W)=ADRESSE BUFFER, < (A)=ADRESSE OCTET DU RECEPTEUR (ZONE ARG, OU BUFFER), < (B)=ADRESSE OCTET DE L'EMETTEUR (BUFFER OU ZONE ARG). < SI (A) OU (B) EST NUL (MAIS PAS LES 2...), < IL EST ALORS REMPLACE PAR L'ADRESSE MOT < DE LA PREMIERE PARTIE DE LA VALEUR DANS < LE BUFFER STATIQUE !!! < < SP9: EQU $ STZ VAR+DEMSAV+T+OPDEM < MISE EN LECTURE. JANE Z27X < (A) EST UNE ADRESSE OCTET... BSR VAR+ASP14 < A <-- (BUFSAV). ADRI SVAL,A < (A)=ADRESSE MOT DE LA PREMIERE PARTIE < DE LA VALEUR : AMDEM EST UNE ADRESSE < MOT : BIT15(OPDEM)=K. Z27X: EQU $ STA VAR+DEMSAV+T+AMDEM CPZR B JNE Z27XX < (B) EST UNE ADRESSE OCTET... BSR VAR+ASP14 LR A,B < B <-- (BUFSAV). ADRI SVAL,B < (B)=ADRESSE MOT DE LA PREMIERE PARTIE < DE LA VALEUR : ASDEM EST UNE ADRESSE < MOT : BIT15(OPDEM)=1 : IC VAR+DEMSAV+T+OPDEM IF WHOMEM-NBITMO+B,,XEIF%, IF ATTENTION : LE 'IC' PRECEDENT EST MAUVAIS !!! XEIF%: VAL ENDIF Z27XX: EQU $ STB VAR+DEMSAV+T+ASDEM LAI NSPMEM SWBR A,A SBT TYPAD < UNE DES 2 ADRESSES EST UNE ADRESSE < DE MOT (SUPERIEURE A 32K). STA VAR+DEMSAV+XXNSP < GENERATION D'UN NSPTYP VERS < LE HANDLER HDLMEM. < < CALCUL DU NBRE D'OCTETS A DEPLACER : < LA SIND+SINDL,W < (A)=LONGUEUR OCTETS DE LA VALEUR. JAE Z40 < RIEN A FAIRE, LE COMPTE < D'OCTETS EST NUL. JAG SYSR8J < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER VERIFIER LE CONTENU DU < BUFFER STATIQUE, POUR VOIR SI < ON A BIEN CHARGE UN SECTEUR-MAP... < JMP Z40 < ET ON NE FAIT RIEN... SYSR8J: EQU $ LRM B WORD NOCMO*TZVAL < (B)=NOMBRE D'OCTETS MAX QUE L'ON PEUT < RANGER DANS LE SECTEUR MAP. CPR B,A < LA VALEUR TIENT-ELLE ENTIEREMENT < DANS LE SECTEUR MAP ??? JLE Z27 < A<=B : (A) EST BON, TOUTE LA < VALEUR TIENT DANS LE SECTEUR-MAP... LR B,A < A>B : ON NE VA DONC METTRE QUE < LES (B) PREMIERS OCTETS DE LA < VALEUR (2*TZVAL) DANS LE SECTEUR-MAP. Z27: EQU $ STA VAR+DEMSAV+T+CODEM < < PARTIE COMMUNE A TOUTES LES ROUTINES < D'APPEL DE HANDLERS : < Z28: EQU $ LAD VAR+DEMSAV XR A,W < (W)=@DEMSAV, < (A)=SAVE W. BSR ACHAND < ENVOI DE LA DEMANDE (W). BSR ACHANW < ATTENTE DE FIN DE SERVICE. LR A,W < RESTAURE W. Z40: EQU $ RSR < GO BACK... PAGE < < < L E C T U R E / E C R I T U R E < 1 S E C T E U R : < < < ARGUMENTS : < 1- SP10 : < (A)=ADRESSE OCTET DU BUFFER. < OU '0000 S'IL S'AGIT DU BUFFER STATIQUE (BUFSAV). < (B)=ADRESSE SECTEUR SUR 'DKM', < (X)=COMPTE OCTETS DE L'ECHANGE, < (Y)=K SI LECTURE, 2 SI ECRITURE. < 2- SP13 : LA DEMANDE DEMSAV EST DEJA GENEREE SAUF EN CE QUI < CONCERNE L'ADRESSE SECTEUR ASDEM : < (B)=ADRESSE SECTEUR SUR 'DKM'. < < XXSP10:: VAL ZERO-ZERO < INDICATEUR 'BUFFER STATIQUE'... SP10: EQU $ STY VAR+DEMSAV+T+OPDEM STA VAR+DEMSAV+T+AMDEM STX VAR+DEMSAV+T+CODEM SP13: EQU $ LR B,A CP INFINI < VALIDATION ADRESSE SECTEUR JNE SYSR8K BSR ASYSER < < QUE FAIRE ??? < DIEU SEUL LE SAIT, COMMENT EN < EST-ON ARRIVE LA... < SYSR8K: EQU $ CPZ VAR+DEMSAV+T+AMDEM JNE Z28REM < CE N'EST PAS LE BUFFER STATIQUE... IF XXSP10-K,,XEIF%, IF LE TEST PRECEDENT EST IDIOT... XEIF%: VAL ENDIF BSR VAR+ASP14 < (A)=ADRESSE MOT DU BUFFER STATIQUE. STA VAR+DEMSAV+T+AMDEM Z28REM: EQU $ LAI K JNE Z28REN < CE N'EST PAS LE BUFFER STATIQUE... SBT TYPAD < DANS LE CAS DU BUFFER STATIQUE, ON < INDIQUE QU'IL S'AGIT D'UNE ADRESSE < MOT (AU-DELA DE 32K). Z28REN: EQU $ STA VAR+DEMSAV+XXNSP < 'NSPTYP'. LAI NSPDKB < ACCES A LA MEMOIRE VIRTUELLE, < QUI SERA PEUT-ETRE INEFFECTIF... STBY VAR+DEMSAV+XXNSP < NSP DU NSPTYP (NSPDKM OU NSPDKB). STB VAR+DEMSAV+T+ASDEM < ADRESSE SECTEUR BR VAR+RAZ28 < VERS L'ENVOI DE LA DEMANDE. PAGE < < < E / S O P T I M I S E E D ' U N E < V A L E U R S U R D I S Q U E : < < < OPTIMISATION : < ELLE PORTE SUR LES REGROUPEMENTS DES < SECTEURS CONTIGUS; EN EFFET LORS D'UNE ALLOCATION DE < SECTEURS, IL A Y A PAS MAL DE CHANCES POUR < QU'UN CERTAIN NBRE DE SECTEURS SOIENT < ALLOUES DE MANIERE CONTIGUE. IL EST DONC < SOUHAITABLE LORS DES E/S DE LES REGROUPER POUR < MINIMISER LE NBRE DE TRANSFERT !!!!! < < < ARGUMENTS : < (Y)=K : UN ECHANGE DK-->VALEUR EST DEMANDE, < =2 : UN ECHANGE VALEUR-->DK EST DEMANDE. < (W)=ADRESSE DU BUFFER. < < < A T T E N T I O N : DETRUIT W !!! < < SP11: EQU $ LA SIND+SINDL,W < (A)=COMPTE OCTETS DE LA VALEUR, < OU Q8000 S'IL S'AGIT DE LA LECTURE < DU SECTEUR-MAP DE LA VALEUR, < EN EFFET, ON NE CONNAIT PAS < LA LONGUEUR REELLE. PSR A < SAVE COMPTE OCTETS DE LA VALEUR. LRM B,X WORD NOCMO*TZVAL < (B)=VALEUR DE TRANSLATION DES ADRESSES < OCTET DES BUFFERS, ET DE DECOMPTE < DES OCTETS RESTANT A ECHANGER. WORD YY8Q < (X)=TAILLE EN OCTETS D'UN QUANTUM. LA VAR+ANOM < (A)=@OCTET DE LA VALEUR. TBT NBITMO-B < CETTE @OCTET EST-ELLE IMPAIRE ??? SBCR B < SI OUI, ON DECREMENTE D'UNE < UNITE LA VALEUR DE TRANSLATION < DES ADRESSES, AFIN QUE POUR LES < EVENTUELS MORCEAUX SUIVANTS DE < DE LA VALEUR, ON SE TROUVE A < DES FRONTIERES DE MOT, AFIN < DE NE PAS CONTRARIER LES < HANDLERS DISQUES... STA VAR+AOVAL < SAVE ADR OCTET DE LA VALEUR < (FRONTIERE DE MOT OU D'OCTET) < < ON A DONC ICI : < (B)=2*TZVAL OU 2*TZVAL-1 : < (B)=VALEUR DE TRANSLATION DE 'ANOM' ET DE < DECOMPTE DU COMPTE D'OCTETS RESIDULES, < TEL QUE LES'ANOM' SUIVANTS SOIENT < TOUS A UNE FRONTIERE DE MOTS. POUR LE 1ER < CELA N'A PAS D'IMPORTANCE, CAR IL EST < RAMENE A UNE FRONTIERE DE MOTS PAR HDLMEM. < XXSGN6:: VAL -2 < INDICATEUR 'PROCHAINE E/S PORTE < SUR LE SECTEUR-MAP'. XXSGN7:: VAL -1 < INDICATEUR 'LE PROCHAIN SECTEUR A < LIRE SUIT LE SECTEUR-MAP'. LAI XXSGN6 STA VAR+ASTRAV < ASTRAV=-2 : MEMORISATION < DU FAIT QUE LA PROCHAINE < E/S PORTERA SUR LE SECTEUR < MAP DE LA VALEUR. BSR VAR+ASP14 < (A)=ADRESSE MOT DU BUFFER A UTILISER < LA PREMIERE FOIS, MAIS SI JE NE ME < TROMPE PAS, CETTE VALEUR N'EST PAS < UTILISEE, CAR AVANT L'APPEL DE 'SP10', < ON FAIT : A <-- 0. < LA 1ERE FOIS. < < BOUCLE D'ECHANGE DES SECTEURS : < Z29: EQU $ < < UTILISATION DE ASTRAV ET ETADEM: < ASTRAV=-2: LA PROCHAINE E/S PORTERA SUR LE < SECTEUR-MAP < ASTRAV=-1: LA PROCHAINE E/S PORTERA SUR LE 1ER < SECTEUR SUIVANT LE SECTEUR-MAP < ASTRAV=K : ALORS, ASDEM CONTIENT L'ADRESSE DU SECTEUR < PRECEDENT < ETADEM=1ER SECTEUR D'UN GROUPE DE SECTEURS CONSECUTIFS < LORSQUE ASTRAV=K < < < A T T E N T I O N : < LES ADRESSES DE BUFFER PEUVENT ETRE < DES ADRESSES DE MOT (CAS DU BUFFER < STATIQUE BUFSAV) OU DES ADRESSES D' < OCTET (DANS LA VALEUR) !!! < < PSR B < SAVE LA VALEUR DE TRANSLATION. LB SMAP,W < (B)=@SECTEUR COURANT, ET < (A)=@OCTET BUFFER COURANT !!!! < < PRISE EN COMPTE DU SECTEUR (B) : < PSR A,B < SAVE (A)=@OCTET DU BUFFER, < ET (B)=@SECTEUR. LA VAR+ASTRAV < RECUPERATION DE L'INDICATEUR ASTRAV CPI XXSGN6 < LA PROCHAINE E/S DOIT-ELLE < PORTER SUR LE SECTEUR-MAP < DE LA VALEUR ??? JE Z990 < OUI : SECTEUR-MAP. JAL Z993 < NON,ASTRAV=-1 DONC IL S'AGIT < DU 1ER SECT SUIVANT LE SECT-MAP < DE LA VALEUR LA VAR+DEMSAV+T+ASDEM < ADRESSSE SECTEUR PRECEDENT < < CAS DES SECTEURS SUIVANTS LE SECTEUR-MAP < ET LE 1ER SECTEUR DE LA VALEUR : < SBR B,A < FORMONS LA DIFFERENCE ENTRE < A (@SECTEUR PRECEDENT) ET B < (@SECTEUR COURANT). CPI -P < LES 2 SECTEURS SONT-ILS CONSE- < CUTIFS ??? (C'EST-A-DIRE : < LE SECTEUR COURANT SUIT-IL D'UNE < UNITE LE SECTEUR PRECEDENT ???). JNE Z991 < NON, IL FAUT FAIRE UNE E/S SUR < SUR LE GROUPE PRECEDENT DE < SECTEURS CONSECUTIFS... < < CAS DES SECTEURS CONSECUTIFS : < LA VAR+DEMSAV+T+CODEM ADR X,A < ON FAIT PROGRESSER LA LONGUEUR < COURANTE DU GROUPE DE SECTEURS < CONSECUTIFS. CP VAR+VGROUP < A-T'ON ATTEINT LE MAXIMUM DU NOMBRE < D'OCTETS GROUPABLES ??? JG Z991 < OUI, ON L'A DEPASSE, DONC ON VA < REALISER L'ECHANGE EN ATTENTE (EN < EXCLUANT DONT LE SECTEUR COURANT (B). STA VAR+DEMSAV+T+CODEM PLR A,B < RESTAURE : (A)=@OCTET DU BUFFER, < ET (B)=@SECTEUR COURANT. JMP Z992 < VERS LA MEMORISATION DU NOUVEAU < SECTEUR PRECEDENT. < < CAS DES SECTEURS NON CONSECUTIFS : < Z991: EQU $ LB VAR+DEMSAV+T+ETADEM < RECUPERATION DANS B DE L'ADRESSE < DU 1ER SECTEUR DU GROUPE DE < SECTEURS CONSECUTIFS QUE L'ON < A REPERE. BSR VAR+ASP13 < E/S PORTANT SUR LE GROUPE DE < SECTEURS CONSECUTIFS DONT LE < 1ER EST A L'ADRESSE (B) ; < L'AMDEM ET LE CODEM DE DEMSAV < SONT DEJA POSITIONNES. < (AINSI QUE L'OPDEM...) < < INITIALISATION D'UN NOUVEAU GROUPE DE < SECTEURS CONSECUTIFS (CAS DU 1ER SECTEUR < APRES LE SECTEUR-MAP (ASDEM=-1) OU < CAS DE 2 SECTEURS NON CONSECUTIFS). < Z993: EQU $ PLR A,B < RESTAURE (A)=@OCTET DU BUFFER < COURANT ET RELATIF AU SECTEUR < DONT L'ADRESSE EST DANS B. STA VAR+DEMSAV+T+AMDEM < AMDEM(DEMSAV). STX VAR+DEMSAV+T+CODEM < CODEM(DEMSAV)). STB VAR+DEMSAV+T+ETADEM < MEMORISATION DU 1ER SECTEUR < DU NOUVEAU GROUPE. STZ VAR+ASTRAV < POUR INDIQUER QUE ASDEM VA CONTE < NIR L'ADR DU SECT PRECEDENT JMP Z992 < VERS LE CHANGEMENT DE SECTEUR < PRECEDENT. < < CAS DU SECTEUR-MAP DE LA VALEUR : < Z990: EQU $ PLR A,B < RESTAURE (A)=@OCTET DU BUFFER DU < SECTEUR MAP ET (B)=@SECTEUR-MAP. LAI XXSP10 < ON INDIQUE AINSI QUE L'ECHANGE < PORTE SUR LE BUFFER STATIQUE BUFSAV. BSR VAR+ASP10 < ECHANGE DU SECTEUR-MAP D'ADRESSE < (B) DANS LE SENS (Y) ; A NOTER < AU PASSAGE QU'ON INITIALISE < AINSI L'OPDEM DE DEMSAV AVEC < (Y) POUR LES FUTURS APPELS DE < SP13. LBI XXSGN7 < (B)=INDICATEUR QUE LE PROCHAIN < SECTEUR EST LE 1ER SECTEUR < APRES LE SECTEUR-MAP. STB VAR+ASTRAV < POUR INDIQUER QUE LA PROCHAINE < E/S PORTERA SUR LE 1ER SECT SUIVANT < LE SECTEUR-MAP < < CHANGEMENT DE SECTEUR PRECEDENT (ASDEM) : < Z992: EQU $ STB VAR+DEMSAV+T+ASDEM < < PROGRESSION DANS L'ECHANGE : < PLR B < RESTAURE (B)=VALEUR DE TRANSLATION. PLR A < RESTAURE (A)=LONGUEUR OCTETS DE < LA VALEUR. < < TRAITEMENT DU CAS DE LA LECTURE DU SECTEUR-MAP : < CP INFINI < SI (A)=Q8000, C'EST QU'ON VIENT < DE LIRE LE SECTEUR-MAP DE < LA VALEUR, ON EST DONC MAINTENANT < EN MESURE DE DETERMINER LA < VRAIE LONGUEUR DE LA VALEUR. JNE Z37 < NON, CE N'EST PAS LA < LECTURE DU SECTEUR-MAP. LA SIND+SINDL,W < SI OUI, ON ACCEDE A LA LONGUEUR < REELLE. < A T T E N T I O N : ON PEUT < UTILISER W, CAR IL N'A PAS ENCORE < ETE MODIFIE PAR UN ADRI 1,W. JAGE Z992X < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER VOIR LE BUFFER POINTE PAR (W), ET < VERIFIER QU'IL CONTIENT L'INFINI, SIGNE D'UNE < ERREUR 'DKM'... < JMP Z995 < ET ON ABANDONNE... Z992X: EQU $ CP VAR+NOMS < COMPARAISON A LA LONGUEUR < DEMANDEE. < (EN TRANSIT TEMPORAIRE DANS NOMS) JLE Z993Y < OK, ON EN DEMANDE PLUS OU < LA MEME LONGUEUR. LA VAR+NOMS < DANS LE CAS OU ON EN < DEMANDE MOINS, C'EST LA < LONGUEUR DEMANDEE QUI < L'EMPORTE... STA SIND+SINDL,W < LA LONGUEUR DEMANDEE REMPLACE < LA LONGUEUR REELLE DE LA VALEUR, < C'EST BEAUCOUP PLUS PRUDENT. < < < NOTA IMPORTANT : < SI ON PASSE ICI, C'EST QUE LA MAP < VIENT D'ETRE LUE ; IL S'AGIT DONC < D'UNE OPERATION DE 'LOAD'. SI CE 'LOAD' < EST A UNE ADRESSE-OCTET PAIRE, < ET SI LE 'STORE' DE LA VALEUR QUE < L'ON RECUPERE ETAIT A UNE ADRESSE- < OCTET IMPAIRE, ON SAIT QU'ALORS < LE DERNIER OCTET RANGE DANS LE < SECTEUR-MAP EST DUPLIQUE AU DEBUT < DE LA SUITE DE LA VALEUR ; ON A < DONC UN OCTET EN TROP, IL FAUT < DONC ALORS INCREMENTER D'UNE UNITE < LE NOMBRE D'OCTETS DEMANDE DANS < LA DEMANDE UTILISATEUR. DE PLUS < LISANT UN OCTET DE TROP, LA VALEUR < MISE EN MEMOIRE RISQUE D'ECRASER < QUELQUE CHOSE (SOIT DANS L'ESPACE < UTILISATEUR, SOIT EN DEHORS...), < C'EST POURQUOI ON VA LIRE LA DEUXIEME < PARTIE DE LA VALEUR (AVANT LA PREMIERE < PARTIE INCLUSE DANS LA MAP RAPPELONS-LE) < UN MOT PLUS BAS DANS LA MEMOIRE, D'OU < UNE DECREMENTATION DE 2 UNITES DE < SON ADRESSE OCTET. ENFIN, LE DECALAGE < DE LA VALEUR SERA FAIT (LORSQUE NECESSAIRE) < SYSTEMATIQUEMENT VERS LA DROITE (LE CODE < 'ZLEFT' EST CONSERVE, CAR ON NE SAIT < JAMAIS...). < < Z993Y: EQU $ LA SIND+SINDPI,W < COMMENT FUT LE 'STORE' ??? TBT NBITMO-B < PAIR OU IMPAIR ??? JNC Z993X < 'STORE' PAIR, OK... LA VAR+AOVAL < COMMENT EST LE 'LOAD' ??? TBT NBITMO-B < PAIR OU IMPAIR ??? JC Z993X < 'LOAD' IMPAIR, OK... DC VAR+ANOM < DANS LE CAS D'UN 'STORE' DC VAR+ANOM < IMPAIR, ET D'UN 'LOAD' PAIR, ON DC VAR+AOVAL < NOUVELLE ADRESSE OCTET DC VAR+AOVAL < DE LA VALEUR... IC SIND+SINDL,W < LIT UN OCTET DE PLUS, 2 OCTETS < PLUS BAS DANS LA MEMOIRE... Z993X: EQU $ LA SIND+SINDL,W < (A)=NOMBRE D'OCTETS A RECUPERER... Z37: EQU $ SBR B,A < CALCUL DANS A DU COMPTE < D'OCTETS RESIDUELS. JALE Z30 < C'EST FINI... IF Q8000,XEIF%,, IF ATTENTION : 'Q8000' DOIT ETRE NEGATIF !!! XEIF%: VAL ENDIF < < CAS OU IL RESTE DES OCTETS : < CPR A,X < REGARDONS SI LES OCTETS < RESIDUELS TIENNENT DANS UN < SECTEUR ???? JLE Z31 < ET NON. LR A,X < SI OUI, LA LONGUEUR D'ECHANGE < DEVIENT LE NBRE D'OCTETS RESIDUELS. Z31: EQU $ PSR A < SAVE LE COMPTE D'OCTETS ENCORE < A ECHANGER. ADRI P,W < POUR ACCES A L'ADRESSE DU < SECTEUR SUIVANT. LA VAR+ANOM < (A)=@OCTET DU 1ER OCTET A < ECHANGER. ADR B,A < PROGRESSION DE L'@OCTET COURANTE < DE LA VALEUR. STA VAR+ANOM < & SAVE. LR X,B < NOUVELLE VALEUR DE TRANSALTION. JMP Z29 < VERS L'ECHANGE SUIVANT. < < CAS OU IL N'Y A PLUS D'OCTETS A ECHANGER : < Z30: EQU $ BSR VAR+ASP8 < RESTAURATION DE 'W' SUR 'BUFSAV' ; < NOTONS QU'IL SERA SUREMENT ENCORE < DETRUIT... CPZ VAR+ASTRAV JL Z995 < ASTRAV=-1: LA VALEUR TENAIT < EN ENTIER DANS LE SECTEUR-MAP, < IL N'Y A DONC PLUS RIEN A FAIRE... LB VAR+DEMSAV+T+ETADEM < SINON, RECUPERATION DANS < B DE L'ADRESSE DU 1ER < SECTEUR DU GROUPE COURANT. BSR VAR+ASP13 < E/S SUR LE GROUPE COURANT DE < SECTEURS CONSECUTIFS. CPZR Y < LECTURE OU ECRITURE? JNE Z995X1 < ECRITURE NE RIEN FAIRE < LECTURE: ALORS IL FAUT PEUT-ETRE < DECALER D'UN OCTET A DROITE OU < A GAUCHE LA < 2NDE PARTIE DE LA VALEUR QUE L' < ON VIENT DE LIRE XXSGN8:: VAL 'AA < MASQUE DE VALIDATION... LAI XXSGN8 SWBR A,A < A(BITS 0-14)= MASQUE DE VALIDATION < DERNIER BIT SIND+SINDPI EOR SIND+SINDPI,W RBT NBITMO-B < MASQUE SUR BITS 0-14 JAE Z995X2 < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < REGARDER SI ON EST BIEN EN PRESENCE < D'UN SECTEUR-MAP DANS 'BUFSAV'... < JMP Z995 < ET ON ABANDONNE... Z995X2: EQU $ LA SIND+SINDPI,W < A(BIT 15)=FRONTIERE AU STORE EOR VAR+AOVAL < ADRESSE OCTET AU LOAD TBT NBITMO-B < MEMES FRONTIERES (SURES ET < RECONNUES...) AU LOAD ET AU < STORE? JNC Z995 < OUI, DONC PAS DE RECADRAGE < NON,DONC RECADRAGE GAUCHE OU < DROIT DE LA 2NDE PARTIE DE LA VALEUR LRM A,B WORD -NOCMO*TZVAL < POUR CALCULER LA LONGUEUR DE LA 2EME < PARTIE DE LA VALEUR DANS X. WORD NOCMO*TZVAL < (B)=POUR TRANSLATER L'ADRESSE OCTET < DE LA VALEUR POUR CONNAITRE CELLE < DE LA DEUXIEME PARTIE. AD SIND+SINDL,W < (A)=LONGUEUR DE LA 2EME PARTIE DE LA VALE LR A,X < QUE L'ON MET DANS X... LA VAR+AOVAL TBT NBITMO-B < TEST FRONTIERE AU LOAD SBCR B < (B)=VALEUR DE TRANSLATION EN CONSE < QUENCE: < (B)=2*SIND SI FRONTIERE PAIRE < (B)=2*SIND-1 SINON < < RAPPEL : < COMME ANNONCE PRECEDEMMENT, ON < VA FAIRE SYSTEMATIQUEMENT UN DECA- < LAGE A DROITE, ON SUPPRIME DONC < LE CODE SUIVANT : <<<< TBT NBITMO-B <<<< JNC ZLEFT < ZRIGHT: EQU $ < MOVE RIGHT ADR B,A < (A)=RELAI POUR INDEXATION ULTERIEURE LR X,B ADRI -Z,B < (B)=INDEX DU MOVE,SUR DERNIER OCTET < DE LA VALEUR LYI -I < (Y)=PAS DU MOVE (DE DROITE A < GAUCHE) JMP ZRGLF < < RAPPEL : < COMME ANNONCE PRECEDEMMENT, BIEN < QU'IL N'Y AIT PLUS QUE DES DECALAGES < A DROITE, ON CONSERVE LE CODE 'ZLEFT', < CAR ON NE SAIT JAMAIS !!! < ZLEFT: EQU $ < MOVE LEFT ADR B,A < (A)=RELAI POUR INDEXATION ULTERIEURE LBI I < (B)=INDEX DU MOVE,SUR 2ND OCTET < DU 1ER SECTEUR LYI I < (Y)=PAS DU MOVE (DE GAUCHE A DROITE) < < BOUCLE DE DECALAGE DE LA DEUXIEME PARTIE DE LA VALEUR : < ZRGLF: EQU $ SLRS NOCMO=K < (A)=RELAI MOT... SBT BITX < ...INDEXE STA VAR+AOVAL < EN MOT DE TRAVAIL ZLOOP: EQU $ < BOUCLE DE MOVE D'UN OCTET < A DROITE OU A GAUCHE DE LA < SECONDE PARTIE DE LA VALEUR LR X,W < SAUVEGARDE COUNT LR B,X < INDEX OCTET LBY &VAR+AOVAL SBR Y,X STBY &VAR+AOVAL ADR Y,B < PROGRESSION INDEX LR W,X < RESTAURATION COUNT JDX ZLOOP < < DISCRIMINATION 'LOAD'/'STORE' : < LYI FGR < RESTAURATION Y (LECTURE) Z995: EQU $ BSR VAR+ASP8 < RESTAURE (W)=ADRESSE DU BUFFER ; MIEUX < VAUT LE FAIRE TROP QUE PAS ASSEZ... IF FGR-K,,XEIF%, IF ATTENTION : LE TEST SUIVANT EST IDIOT !!! XEIF%: VAL ENDIF CPZR Y < EST-CE UN LOAD OU UN STORE ??? JNE Z995X1 < UN STORE ('FGW')... < < CAS DES 'LOADS' : < LA SIND+SINDPI,W TBT NBITMO-B < Y-A-T'IL EU 'STORE' IMPAIR ??? JNC Z995X1 < NON... LA VAR+AOVAL TBT NBITMO-B < EST-CE UN 'LOAD' PAIR ??? JC Z995X1 < NON... DC SIND+SINDL,W < OUI, IL FAUT RETABLIR LA BONNE VALEUR < DE 'SINDL' QUE L'ON AVAIT INCREMENTEE, < CAR EN EFET LORS DU 'LOAD', A LA SUITE < DE 'SP11', ON APPELLE 'SP9', ET SI PAR < MALHEUR LA LONGUEUR DE LA VALEUR DEMAN- < DEE TIENT DANS LE SECTEUR-MAP, ON VA SE < RECUPERER UN OCTET DE TROP !!! Z995X1: EQU $ RSR PAGE < < < I N S E R T / D E L E T E N O M : < < < ARGUMENTS : < (Y)=LONGUEUR SEUL, < (A)=CARACTERE DE FONCTION ("+" OU "-"), < (B)=ADRESSE DU SECTEUR-MAP. < < SP12: EQU $ STA VAR+NOMS < LE CARACTERE DE FONCTION EST < MIS DEVANT LE . ADRI XXSGN5,Y < (Y)=LONGUEUR DU < POUR L'OPERATION DEMANDEE. LR Y,X < (X)=INDEX 1ER CARACTERE DERRIERE < LE . LAI KNUL STBY &VAR+ANOMS < MISE DE '0 EN DERNIER CARACTERE < DU AFIN QUE < L'ARBORICULTEUR Y INSERE < L'ADRESSE DU SECTEUR-MAP. STB VAR+DEMSAV+T+ASDEM < TRANSMISSION DE L'ADRESSE < DU SECTEUR-MAP PAR L'ASDEM. LAI NSPTRI SWBR A,A STA VAR+DEMSAV+XXNSP < NSPTYP VERS L'ARBORICULTEUR. LAI FGID < FONCTION INSERT/DELETE. STA VAR+DEMSAV+T+OPDEM LAD VAR+NOMS SLLS NOCMO=K ADRI NOCMO-E,A < (A)=@OCTET DU CARACTERE DE FONCTION < ("+" OU "-") PRECEDANT LE < . STA VAR+DEMSAV+T+AMDEM STY VAR+DEMSAV+T+CODEM BR VAR+RAZ28 < VERS L'EXECUTION DE L'INSERT/ < DELETE DU NOM. PAGE < < < L E C T U R E D U D E S C R I P T E U R < D U V O L U M E C O U R A N T : < < < FONCTION : < CE SOUS-PROGRAMME LIT SUR < LE DISQUE SUPPORT DES EXTENSIONS < DE VOLUME LE DESCRIPTEUR DU < VOLUME COURANT. ENSUITE, IL < VERIFIE QUE CE DESCRIPTEUR EST < BON, ET QUE DONC LE VOLUME < COURANT EST BON... < < < ARGUMENTS : < (A)='NSP' DU DISQUE SUPPORT DE VOLUME. < < < RESULTATS : < (A)=ADRESSE DU BUFFER CONTENANT LE < DESCRIPTEUR DU VOLUME COURANT. < LES INDICATEURS SONT POSITIONNES < TELS QU'ON PEUT FAIRE UN 'JE' SI < LE DESCRIPTEUR EST BON, OU S'IL N'Y < A PAS DE VOLUME MONTE... < < SP20: EQU $ PSR X,W LR A,X < (X)='NSP' DU DISQUE SUPPORT DE < L'EXTENSION DE VOLUME, LAD VAR+DEMSAV LR A,W < (W)=ADRESSE DE LA DEMANDE QUE L'ON VA < GENERER POUR ATTEINDRE LE DISQUE. LA VAR+ASGNU STA ARGDEM+AMDEM < MISE EN PLACE DE L'ADRESSE-MOT DU < BUFFER, CPI ISGNPV < ALORS, Y-A-T'IL UN VOLUME MONTE ??? JE SP20C < NON, ON SORT IMMEDIATEMENT ; A NOTER < QUE LES INDICATEURS SONT POSITIONNES < POUR UN 'JE'... SWBR X,A < POSITIONNEMENT DU 'NSP', ORI XDSYM?XTYPAD < GENERATION D'UNE DEMANDE EN MODE SYMBOLI- < QUE AVEC ADRESSE DE MOTS ET NON D'OCTETS, STA NSPTYP < GENERATION DU 'NSPTYP', LRM A,X WORD LVOL*NOCMO < (A)=LONGUEUR EN OCTETS DU BUFFER < CONTENANT LE DESCRIPTEUR, WORD SECVOL < (X)=ADRESSE DU Q-SECTEUR SUPPORT DU < DESCRIPTEUR DE VOLUME, STA ARGDEM+CODEM < MISE EN PLACE DE LA LONGUEUR DE L'ECHANGE STX ARGDEM+ASDEM < ET L'ADRESSE DISQUE DE L'ECHANGE. LAI FGR < (A)=FONCTION DE LECTURE... < < PARTIE COMMUNE LECTURE/ECRITURE : < SP20A: EQU $ STA ARGDEM+OPDEM < MISE EN PLACE DE LA FONCTION, BSR ACHAND < ENVOI DE LA DEMANDE D'ADRESSE (W), BSR ACHANW < ET TEST DE FIN D'ECHANGE... < < VALIDATION DU DESCRIPTEUR : < LA ARGDEM+AMDEM < RECUPERATION DE L'ADRESSE-MOT DE < L'ECHANGE, LR A,W < (W)=ADRESSE DU DESCRIPTEUR, LAI LVOLIM CP VOL23,W < VALIDATION DE LA PREMIERE CLEF, JNE SP20B < MAUVAISE, LES INDICATEURS SONT POSITION- < POUR UN TEST EN RETOUR... LRM A WORD CLEVOL CP VOLCLE,W < VALIDATION DE LA DEUXIEME CLEF... < < RETOUR : < SP20B: EQU $ < ICI, LES INDICATEURS SONT POSITIONNES < POUR UN TEST EN RETOUR SUR LA COHERENCE < DU DESCRIPTEUR... LR W,A < (A)=ADRESSE DU DESCRIPTEUR DE VOLUME... SP20C: EQU $ < CAS OU IL N'Y A PAS DE VOLUME MONTE... PLR X,W RSR < < < R E E C R I T U R E D U D E S C R I P T E U R < D E V O L U M E : < < < FONCTION : < CONTRAIREMENT AUX AUTRES TABLES < DU SYSTEME LES DESCRIPTEURS DE < VOLUME SONT REECRITS SYSTEMATIQUE- < MENT AFIN D'ASSURER LEUR INTEGRITE ; < AINSI, ON N'OPTIMISE NI LES 'STN', < NI LES 'DLN' RELATIFS A DES < SUR VOLUME, MAIS AU MOINS LE VOLUME < EST TOUJOURS BON, QUELQUE SOIT LE < FONCTIONNEMENT DU SYSTEME (SAUF < EXCEPTION BIEN ENTENDU...). < < < ARGUMENTS : < AUCUN, CAR ON SUPPOSE QUE 'SP20' < EST PASSE AVANT... < < < RESULTATS : < (A)=ADRESSE DU BUFFER CONTENANT LE < DESCRIPTEUR DU VOLUME. < < SP21: EQU $ PSR X,W LAD VAR+DEMSAV LR A,W < (W)=ADRESSE DE LA DEMANDE A ENVOYER, IF ISGNPV-K,,XEIF%, IF ATTENTION : LE 'CPZ' EST MAUVAIS !!! XEIF%: VAL ENDIF CPZ ARGDEM+AMDEM < ALORS, Y-A-T'IL UN VOLUME DE MONTE ??? JNE SP21A < OUI, ALLLONS REECRIRE LE DESCRIPTEUR... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT IL PEUT SE < FAIRE QUE 'SP21' SOIT APPELE, < ALORS QU'IL N'Y A PAS DE VOLUME < MONTE !!! < CPZ ARGDEM+AMDEM < ET ON REPOSITIONNE LES INDICATEURS... JMP SP20C < ET ON SORT IMMEDIATEMENT... SP21A: EQU $ LAI FGW < (A)=FONCTION D'ECRITURE, JMP SP20A < VERS L'ENVOI DE LA DEMANDE DE REECRITURE < DU DESCRIPTEUR DE VOLUME... PAGE < < < S T O R E N O M E T V A L U E : < < < FONCTION : < CE HANDLER SPECIFIQUE, RANGE LA < VALEUR SUR DISUQE, PUIS INSERE LE < NOM ASSOCIE DANS L'ARBRE DU < SYSTEME. < < < ARGUMENT : < (A)=CODE DE RETOUR DU TEST DE L'ARBORICULTEUR, < (B)=RANG DU DERNIER CARACTERE DE LA VALEUR, < (X)=RANG DU 1ER CARACTERE DE LA VALEUR. < (Y)=LONGUEUR . < < < RESULTAT : < SI LA BOX DE LA DEMANDE COURANTE EST < VALIDE, CELLE-CI RECOIT LE NBRE D'OCTETS < REELLEMENT RANGES, AVEC DE PLUS UN < INDICATEUR DISANT SI LA EST < EST UNE EXTENSION SUR VOLUME (UTILE < POUR 'LON'...) : IVALEX:: VAL BITSIG < BIT POSITIONNE DANS LA LONGUEUR DE LA < TRANSMISE DANS 'BOX' POUR < INDIQUER SI CELLE-CI EST EN REALITE < UNE VALEUR D'EXTENSION SUR VOLUME. < < CALL #SISP CMS5 CHECK# AZ26: EQU $ BR VAR+RAZ26 < ERREUR : NOM PRE-EXISTANT... HDLSTN: EQU $ JAE AZ26 < ERREUR : LE NOM EXISTE DEJA... XWOR%9: VAL BOX-NSPTYP LA VAR+DEMSAV+XWOR%9 < (A)=NOMBRE DE NOEUDS LIBRES, CPI XXSGNS < Y-EN-A T'IL ASSEZ ??? JL AZ26XX < NON, PAS DE 'STORE' !!! IF NSTREE*X26,,,XEIF% IF ATTENTION : CE QUI PRECEDE EST IDIOT !!! XEIF%: VAL ENDIF LA NSL < (A)=NOMBRE DE Q-SECTEURS LIBRES SUR 'DKM' SLRS S < ON DECALE, CAR EN EFFET 'NSL' EST < SOUVENT UN NOMBRE DE 16 BITS !!! XWOR%9: VAL -S CPI XXSGNT>XWOR%9 < CELA SUFFIT-IL ??? AZ26XX: JL BZ26XX < NON, PAS DE 'STORE' !!! < < OK, LE NOM N'EXISTE PAS ENCORE : < BR VAR+RAZ362 < VERS LE TEST DES SUR VOLUMES. < (ON FAIT AINSI A CAUSE DES MERVEILLEUX < SAUTS SUPERIEURS A 128 MOTS, MERCI LA < SEMS...) Z36XY3: EQU $ < RETOUR DU DEBRANCHEMENT... < < ALLOCATION DE L'ESPACE-DISQUE DE LA VALEUR : < SBR X,B STB SIND+SINDL,W < MISE DE LA LONGUEUR OCTETS DE < LA VALEUR DANS LE BUFFER (SINDL). STB SIND+SINDLO,W < DE MEME SINDLO CONTIENT LA < LONGUEUR OCTETS DE LA VALEUR... LA VAR+SGNSGF < ON MET DANS LA MAP DE L'ITEM SA STA SIND+SXSGF,W < NATURE "NORMAL" OU "SGF", SACHANT < QU'IL EXISTE UNE NATURE "ANCIEN"... LRM A WORD YY7*QUANTA+SVAL*NOCMO-E ADR A,B < (B)=NOMBRE D'OCTETS NECESSAIRES EXPRIMES < EN MULTIPLES DE YY8. LRM A WORD YY8Q STA SIND+SINDLS,W < PROVISOIRE, POUR FAIRE UNE DIVISION... LAI K DV SIND+SINDLS,W LR A,B < (B)=NOMBRE DE QUANTA NECESSAIRES. STB SIND+SINDLS,W < SAVE NBRE DE SECTEURS OCCUPES < PAR LA VALEUR Y COMPRIS LE < SECTEUR-MAP. LAI NSPGET BSR VAR+ASP7 < ALLOCATION (B) SECTEURS. < < DATE DE CREATION DE LA VALEUR : < XWOR%1: VAL XXMAXT=K < POUR RECUPERER LA VALEUR COURANTE DES < COMPOSANTES DE LA DATE... PSR X,L LXI NSPDAT BSR ACADCT < (L)=ADRESSE DE LA LISTE DES COMPOSANTES < DE LA DATE. LB XXHANE,L < (B)=ANNEE, LA XXHMOI,L < (A)=MOIS, SLLS XWOR%1 SCRD XWOR%1 STA SIND+SDATAM,W < ANNEE/MOIS. LB XXHJOU,L < (B)=JOUR, LA XXHHEU,L < (A)=HEURE, SLLS XWOR%1 SCRD XWOR%1 STA SIND+SDATJH,W < JOUR/HEURE. LB XXHMIN,L < (B)=MINUTES, LA XXHSEC,L < (A)=SECONDES, SLLS XWOR%1 SCRD XWOR%1 STA SIND+SDATMS,W < MINUTES/SECONDES. PLR X,L < < TRANSFERT DE LA 1ERE PARTIE DE LA VALEUR < DANS LE BUFFER ALLOUE : < LA VAR+ANOM SLLS NOCMO=K < (A)=@OCTET DE A UNE < FRONTIERE DE MOTS. AD VAR+IVAL < (A)=@OCTET DE LA VALEUR. STA VAR+ANOM < ANOM=@OCTET DU 1ER OCTET < DE LA VALEUR. < POSITIONNEMENT DE SIND+SINDPI < EN SECTEUR-MAP : < ='AA00 SI ADRESSE OCTET PAIRE, < ='AA01 SI ADRESSE OCTET IMPAIRE. LBI XXSGN8 SWBR B,B TBT NBITMO-B < TEST PAIRE/IMPAIRE ??? JNC Z36XX SBT NBITAB-B Z36XX: EQU $ STB SIND+SINDPI,W < < < T E N T A T I V E D E C O M P R E S S I O N : < < < FONCTION : < LE PROBLEME DE COMPRIMER LES ITEMS EST < TRES DELICATS ; EN EFFET S'IL EST POSSIBLE < DE COMPACTER EN CONFONDANT ZONE EMETTRICE < ET ZONE RECEPTRICE (EN FAISANT QUE CETTE < DERNIERE PRECEDE LA PREMIERE DE 2 OCTETS < DANS LE CAS OU LES COMPTEURS SONT SUR UN < MOT), IL EST IMPOSSIBLE DE LE FAIRE LORS < DU DECOMPACTAGE DAUTANT PLUS QU'IL EST < POSSIBLE DE DEMANDER MOINS D'OCTETS QUE < N'EN CONTIENT LA VALEUR... < DE PLUS TOUS CES ALGORITHMES IMPLIQUENT < UNE MODIFICATION RADICALE DU 'SGN' ; LA < MEDIOCRE SOLUTION PROPOSEE CONSISTE A < DETECTER DES SOUS-ENSEMBLES DU BUFFER < INITIAL CONFONDUS A L'ECRITURE SUR 'DKM' < AVEC UN Q-SECTEUR, ET CONTENANT LE MEME < OCTET REPETE ; DANS CES CONDITIONS, ON CREE < UN Q-SECTEUR INEXISTANT SUR 'DKM' CORRESPON- < DANT A CET OCTET, ET C'EST 'HDLDKM' QUI SE < CHARGE DU BUFFER SANS ENTREE-SORTIE... < < < NOTA : < LA COMPRESSION PEUT ETRE INHIBE < EN MODIFIANT L'INSTRUCTION 'DCOMPR' ; < INHIBER LA COMPRESSION A POUR EFFET < DE PERDRE DE L'ESPACE DISQUE, MAIS < EN REVANCHE, ON GAGNE DU TEMPS, CAR < EN GENERAL, LES S SERONT < CHARGEES EN PEU D'ENTREES/SORTIES. < < LRM A,B,Y WORD -NOCMO*TZVAL < (A)=-LONGUEUR EN OCTETS DE LA WORD NOCMO*TZVAL < PREMIERE PARTIE DE LA VALEUR=-(B). WORD YY7Q < (Y)=LONGUEUR EN MOTS D'UN Q-SECTEUR. AD SIND+SINDL,W < (A)=NOMBRE D'OCTETS A RANGER AILLEURS < QUE DANS LE SECTEUR-MAP, JALE Z36XX1 < IL N'Y EN A PAS... PAS DE COMPACTAGE... LR A,X < (X)=NOMBRE D'OCTETS SUR LESQUELS TENTER < UN PETIT COMPACTAGE... BSR VAR+ASP14 < A <-- (BUFSAV). PSR A,W < SAUVEGARDE DE (A)=(BUFSAV), CAR EN < EFFET, ON VA LE TRUANDER A CAUSE < DE 'SP7' LORS DU RELEASE INDIVIDUEL < DE SECTEURS... ET (W)=ADRESSE DU BUFFER. IC VAR+BUFSAV < AFIN DE POINTER A 'SMAP' MOTS PRES < LE PREMIER SECTEUR SUIVANT LE SECTEUR- < MAP. LA VAR+ANOM TBT NBITMO-B < EST-CE UNE ADRESSE PAIRE ??? SBCR B < REGRESSION EVENTUELLE DE L'ADRESSE... TBT NBITMO-B < EST-CE UNE ADRESSE PAIRE ??? ADCR X < PROGRESSION EVENTUELLE DU COMPTE < D'OCTETS... ADR B,A SLRS NOCMO=K LR A,W < (W)=ADRESSE MOT DANS LA VALEUR DU < PREMIER MOT TOMBANT A UNE FRONTIERE < DE Q-SECTEUR. < < BOUCLE DE TRAITEMENT DU Q-SECTEUR COURANT : < Z36XX2: EQU $ PSR Y,W < SAUVEGARDE DE LA LONGUEUR D'UN Q-SECTEUR, < ET DE L'ADRESSE DE LA TRANCHE COURANTE < DE LA VALEUR. XXCPR:: VAL K < VALEUR AUTORISANT LA COMPRESSION DES < ITEMS, XXNCPR:: VAL XXCPR)BIT < VALEUR INIHIBANT LA COMPRESSION DES < ITEMS... DCOMPR: LAI XXCPR < INSTRUCTION VARIABLE ACCESSIBLE PAR UN < 'NSP', ET PERMETTANT D'AUTORISER OU < D'INHIBER LA COMPRESSION DES ITEMS (VOIR < 'XXCPR' ET 'XXNCPR'). < NOTA : CETTE INSTRUCTION EST MODIFIABLE < DYNAMIQUEMENT PAR LES COMMANDES < "!SGN C ON" ET "!SGN C OFF" DU < 'CCI'... EOR O,W < (A)=MOT COURANT (ON TRAVAILLE EN MOTS < PAR COMPATIBILITE AVEC 'DKM'), SWBR A,A < AFIN DE COMPARER LA PREMIERE FOIS < L'OCTET DROIT ET CELUI DE GAUCHE... Z36XX3: EQU $ CP O,W < LES MOTS SONT-ILS IDENTIQUES (ET LES < 2 PREMIERS OCTETS LA PREMIERE FOIS...). JNE Z36XX5 < NON, PAS DE COMPACTAGE POSSIBLE... ADRI P,W < OUI, PASSONS AU MOT SUIVANT... ADRI -I*NOCMO,X < DECOMPTE DES OCTETS TRAITES, ADRI -I,Y < DECOMPTE DES MOTS TRAITES DANS LE < Q-SECTEUR COURANT, CPZR X < A-T'ON EPUISE LES OCTETS RESIDUELS ??? JLE Z36XX4 < OUI, C'EST FINI... CPZR Y < EST-ON AU BOUT DU Q-SECTEUR COURANT ??? JNE Z36XX3 < NON, ON CONTINUE... < < CAS OU UNE SEQUENCE REPETITIVE A ETE DETECTEE : < Z36XX4: EQU $ LAI NSPREL < AFIN DE FAIRE DU RELEASE, LBI W < D'UN SEUL SECTEUR... BSR VAR+ASP7 < RELEASE DU SECTEUR COURANT. LA -P,W < (A)=MOT REPETE, LB VAR+DEMSAV+T+AMDEM LR B,W < (W)=ADRESSE MEMOIRE OU EST RANGEE < L'ADRESSE DU Q-SECTEUR QUE L'ON < VIENT DE RENDRE... DKMINX:: VAL MOCG < ADRESSE DU PREMIER Q-SECTEUR INEXISTANT, < UTILISE PAR 'DKM' POIR INITIALISER < LES BUFFERS... IF DKMINX)MMOT(TDKM,,XEIF%, IF ATTENTION : 'DKMINX' EST EN FAIT UN SECTEUR EXISTANT !!! XEIF%: VAL ENDIF XWOR%1: VAL DKMINX=K XWOR%1: VAL -XWOR%1 XWOR%2: VAL TDKM>XWOR%1+I < +I A CAUSE DU GROUPAGE DES Q-SECTEURS < DANS 'SP11'... XWOR%3: VAL DKMINX>XWOR%1 IF XWOR%2-XWOR%3,XEIF%,, IF ATTENTION : 'DKMINX' EST EN FAIT UN SECTEUR EXISTANT !!! XEIF%: VAL ENDIF IF DKMINX)MMOT-MOCD,,XEIF%, IF ATTENTION : 'DKMINX' DOIT CORRESPONDRE A UN MASQUE IF D'OCTET ET POUR LES INSTRUCTIONS QUI LE MANIPULE IF ET POUR L'ALGORITHME DE COMPACTAGE !!! XEIF%: VAL ENDIF STA O,W < MISE EN PLACE EN PARTICULIER DANS L'OCTET < DE DROITE DE L'OCTET REPETE. LAI XWOR%3 STBY O,W < REMPLACEMENT DU SECTEUR RELEASE < PAR UN SECTEUR INEXISTANT, DONT < L'ADRESSE DONNE L'OCTET REPETE... < < PASSAGE AU Q-SECTEUR SUIVANT : < Z36XX5: EQU $ IC VAR+BUFSAV < TOUJOURS A CAUSE DE 'SP7' !!! LR Y,A SLLS NOCMO=K < (A)=NOMBRE D'OCTETS QUI RESTAIENT < A TRAITER DANS LE Q-SECTEUR COURANT, SBR A,X < ACTUALISATION DU DECOMPTE DES OCTETS < TRAITES... PLR Y,W < RESTAURE : < (Y)=LONGUEUR EN MOT D'UN Q-SECTEUR, < (W)=ADRESSE DE LA VALEUR A UNE FRONTIERE < DE Q-SECTEUR. ADR Y,W < PASSAGE AU QSECTEUR SUIVANT, CPZR X < MAIS EST-CE NECESSAIRE ??? JG Z36XX2 < OUI... PLR A,W < NON, ON RESTAURE STA VAR+BUFSAV < CE QUE L'ON A DETRUIT... Z36XX1: EQU $ < < < R A N G E M E N T D E L A V A L E U R : < < LAI XXSP10 < AFIN QUE LE RECEPTEUR SOIT PRIS < DANS LE BUFFER STATIQUE : < (A)=RECEPTEUR=@BUFFER STATIQUE, LB VAR+ANOM < (B)=EMETTEUR=@VALEUR. BSR VAR+ASP9 < MOVE 1ERE PARTIE DE LA VALEUR. < < ENVOI DE LA VALEUR SUR DISQUE : < LA 1ERE PARTIE+MAP EST ENVOYEE A PARTIR < DU BUFFER, ALORS QUE LA SUITE EVENTUELLE < EST ENVOYEE DIRECTEMENT A PARTIR < DE LA VALEUR ARGUMENT : < LYI FGW < FONCTION ECRITURE. BSR VAR+ASP11 BSR VAR+ASP8 < RESTAURE (W)=@BUFFER. < < INSERTION DE DANS L'ARBRE < DU SYSTEME : < LAI SPLUS < CODE D'INSERTION. LB SMAP,W < (B)=RELAI VALEUR (@SECTEUR-MAP). PLR Y < RESTAURE (Y)=LONGUEUR BSR VAR+ASP12 < INSERTION DU NOM. LA VAR+DEMSAV+T+ETADEM JAE SYSR8L < CONDITION DE RETOUR OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < SORTIR EN ERREUR, MAIS ATTENTION, < IL FAUT FAIRE UN 'PLR W' AVANT... < SYSR8L: EQU $ Z36: EQU $ LA SIND+SINDLO,W < (A)=NOMBRE D'OCTETS REELLEMENT < OCCUPES PAR LA VALEUR (CE NBRE < PEUT EVIDEMMENT ETRE DIFFERENT < DE CELUI QUI A ETE TRAITE (CF. < LES CAS DE LOAD...) < (ON A ENCORE : (W)=@BUFFER). IF MONT0-K,,XEIF%, IF ATTENTION : LE 'CPZ' QUI SUIT EST MAUVAIS !!! XEIF%: VAL ENDIF JAGE Z36XYF < OK, LA LONGUEUR EST BONNE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT LA LONGUEUR < PEUT ETRE SI GRANDE QU'ELLE SOIT < REPRESENTEE PAR UN NOMBRE NEGATIF !!! < Z36XYF: EQU $ CPZ SIND+SVALNU,W < EST-ELLE EN FAIT UNE EXTENSION ? JE Z36XYE < NON, 'SVALNU' NE CONTIENT PAS DE NUMERO < DE VOLUME... PSR A < OUI, IL Y A EU EXTENSION, BSR ACANSP < (A)='NSP' DU HANDLER 'SGN' COURANT : CPI NSPSTN < EST-CE LE 'STORE' ??? PLR A JNE Z36XYM < NON, IL S'AGIT DONC DE 'LON' OU 'DLN', < ON VA DONC RENVOYER DANS 'BOX' LA LON- < GUEUR DISCRIMINEE PAR 'IVALEX', CE QUI < PERMETTRA AU DEMANDEUR DE SAVOIR QU'IL < S'AGIT D'UNE VALEUR EXTENSION... PLR W < DANS LE CAS DE 'STN', 'BOX' A DEJA ETE < POSITIONNE AVEC LE NOMBRE DE BLOCS < ENCORE LIBRE, SAUF S'IL N'Y AVAIT PAS < DE VOLUME MONTE, AUQUEL CAS 'BOX' DEMEURE < APPAREMMENT INCHANGEE... JMP Z36XY1 < VERS LA SORTIE... BZ26XX: JMP Z26XX < RELAI... < < TRANSMISSION DE 'BOX' : < Z36XYM: EQU $ IF IVALEX-BITSIG,,XEIF%, IF ATTENTION : L'INDICATEUR 'IVALEX' EST MAL PLACE !!! XEIF%: VAL ENDIF SBT IVALEX < OUI, ON LE DIT AU DEMANDEUR, AFIN QU'IL < PUISSE EVENTUELLEMENT MEMORISER CE FAIT.. Z36XYE: EQU $ LR A,X < (X)=NOMBRE D'OCTETS REELLEMENT ECHANGES, < AVEC L'INDICATEUR "VALEUR EXTENSION". PLR W < RESTAURE (W)=@DEMANDE ARG. BSR ASTBOX < NON, ALORS SI LA DEMANDE COURANTE (W) Z36XY1: EQU $ < A UNE BOX, (CF. DEMESC), < CELLE-CI RECOIT LE NBRE D'OCTETS < REELLEMENT OCCUPES PAR < LA VALEUR COURANTE. Z51: EQU $ STZ ETAT0 < RETOUR OK. < < SORTIE DU HANDLER SPECIFIQUE : < Z32: EQU $ RSR A36XY3: JMP Z36XY3 < RELAI... < < TRAITEMENT DES ERREURS DE PARCOURS : < Z26XX: EQU $ < CAS OU IL N'Y A PLUS DE PLACE SOIT < DANS L'ARBRE, SOIT SUR 'DKM' ; CE < N'EST PAS TRES ELEGANT,MAIS AU < MOINS, CELA EVITE DES INTER-BLOCAGES... LAI ENPDP < CODE D'ERREUR... JMP Z33 < VERS LA SORTIE EN ERREUR... Z26: EQU $ LAI ENNES < ERREUR : NOM EXISTE DEJA DANS < UN INSERT. Z33: EQU $ STA ETAT0 < RENVOI DES CONDITIONS DANS ETAT0. JMP Z32 CALL #SISP CMS5 CHECK# PAGE < < < ' S T N ' S U R V O L U M E D ' E X T E N S I O N : < < < NOTA : < CE MODULE EST MIS ICI A CAUSE DES < FABULEUX SAUTS SUPERIEURS A 128 MOTS < QUE J'ETAIS SUR DE RENCONTRER... < < < < ERREUR : VOLUME NON "FORMATTE" : < Z36XY7: EQU $ LAI ENDKUV < CODE D'ERREUR, ABZ33: JMP Z33 < VERS SON RENVOI... < (ET ENCORE UN RELAI...) < < POINT D'ENTREE ET DE SORTIE : < Z36XY9: JMP A36XY3 < RELAI... Z36XY2: EQU $ < < TEST D'UN ACCES AU VOLUME COURANT : < Z36XYK: EQU $ < POINT DE REBOUCLAGE SUR ERREUR PHYSIQUE < DISQUE LORS DE LA RELECTURE DE LA < VALEUR ECRITE... LA VAR+ISGNUV < ALORS L'ACCES AU VOLUME COURANT EST-IL < DEMANDE ??? JALE Z36XY4 < NON... < < CAS D'UN ACCES AU VOLUME COURANT, < LECTURE DU DESCRIPTEUR ET VALIDATION : < BSR VAR+ASP20 < LECTURE DU DESCRIPTEUR DU VOLUME COURANT < SUPPORTE PAR LE DISQUE DE 'NSP' (A). JNE Z36XY7 < ERREUR, LE VOLUME EST MAUVAIS (MAUVAISE < CLEF DE VALIDATION : CE CAS PEUT SE < RENCONTRER SI LE VOLUME A ETE CHANGE < "MANUELLEMENT" ENTRE LE MONTAGE ET < MAINTENANT...). PSR B,X,Y,W < SAUVEGARDES DIVERSES... LR A,W < (W)=ADRESSE DU BUFFER DU DESCRIPTEUR DU < VOLUME COURANT. IF ISGNPV-K,,XEIF%, IF ATTENTION : LE 'CPZR' EST MAUVAIS !!! XEIF%: VAL ENDIF CPZR W < Y-A-T'IL UN VOLUME MONTE ??? JE Z36XYG < NON, ON NE VALIDE DONC PAS LE VOLUME... LA VOLACN,W CP VAR+NOMSX1 < LE NUMERO DE COMPTE DU VOLUME EST-IL < CELUI DU DEMANDEUR ??? JNE Z36XY6 < NON, ERREUR... LA VOLACN+U,W CP VAR+NOMSX1+U < ??? JNE Z36XY6 < NON, TOUJOURS PAS... CPZ VOLNIM,W < RESTE-T'IL DE LA PLACE ??? JE Z36XY5 < NON, ERREUR... JG Z36XYA < OUI, ON Y VA... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE, MAIS CELA POURRAIT < SE RENCONTRER SI LA VALIDATION DES < 2 CLEFS ETAIT INSUFFISANTE !!! < JMP Z36XY5 < ET ON SORT EN ERREUR... Z36XYA: EQU $ < < RECUPERATION DE LA ARGUMENT : < Z36XYG: EQU $ < CAS OU IL N'Y A PAS DE VOLUME MONTE, < ON RECUPERE QUAND MEME AFIN < DE GENERER CORRECTEMENT 'SVALNU' < ET 'SVALAD'... < < ON A ICI : < (X)=INDEX INITIAL DE . < XWOR%1: VAL CODBT=FMASK(K?MOCG=FCINST)MOCG/NBITOC < RANG DE L'OCTET GAUCHE, XWOR%2: VAL CODBT=FMASK(K?MOCD=FCINST)MOCD/NBITOC < RANG DE L'OCTET DROIT. ADRI VALUNU*NOCMO+XWOR%2,X LBY &VAR+ANOM < (A)=2EME OCTET DU NUMERO DE VOLUME, SLRD NBITOC < QUE L'ON MET DANS 'B', ADRI XWOR%1-XWOR%2,X LBY &VAR+ANOM < (A)=1ER OCTET DU NUMERO DE VOLUME, SLLD NBITOC < (A)=NUMERO DE VOLUME DEMANDE (OU 'MONT0' < SI ON NE VEUT PAS LE PRECISER EN < UTILISANT CELUI DU MONTAGE). PSR A < ET ON LE SAUVEGARDE... ADRI -VALUNU+VALUAD*NOCMO-XWOR%1+XWOR%2,X LBY &VAR+ANOM < (A)=2EME OCTET DE L'ADRESSE DISQUE, SLRD NBITOC < QUE L'ON MET DANS 'B', ADRI XWOR%1-XWOR%2,X LBY &VAR+ANOM < (A)=1ER OCTET DE L'ADRESSE DISQUE, SLRD NBITOC < (B)=ADRESSE DISQUE DEMANDEE A PARTIR DE < LAQUELLE ON RECHERCHERA UN BLOC < LIBRE... PLR A < (A)=NUMERO DU VOLUME, JAE Z36XY6 < LE NUMERO DE VOLUME EST NUL, CE QUI < EST UNE ERREUR... IF MONT0-K,,XEIF%, IF ATTENTION : LE 'JAE' EST MAUVAIS !!! XEIF%: VAL ENDIF CPZR W < Y-A-T'IL UN VOLUME DE MONTE ??? JNE Z36XYH < OUI... < < CAS OU IL N'Y A PAS DE VOLUME DE MONTE : < STB VAR+DEMSAV+T+ASDEM < ON TRANSMET L'ADRESSE DISQUE DU BLOC < CONTENUE DANS 'B' PAR 'ASDEM' DE LA < DEMANDE 'DEMSAV', STA VAR+DEMSAV+T+AMDEM < ET LE NUMERO DE VOLUME CONTENU DANS 'A' < PAR 'AMDEM' DE 'DEMSAV'... PLR B,X,Y,W < RESTAURATIONS, JMP Z36XY4 < ET ON NE TOUCHE ABSOLUMENT PAS AU DES- < CRIPTEUR DE VOLUME PUISQU'IL N'Y EN < A PAS... < < CAS OU IL Y A UN VOLUME MONTE : < Z36XYH: EQU $ CP VOLNUM,W < OUI, ALORS EST-CE LE VOLUME < DEMANDE QUI EST MONTE ??? JNE Z36XY6 < NON, ERREUR... < < RECHERCHE D'UN BLOC LIBRE : < LRM A,Y WORD VOLSE0 < (A)=ADRESSE ABSOLUE DU PREMIER BLOC < LIBRE SUR UN VOLUME, WORD NVOLIM < (Y)=NUMERO DU PREMIER BLOC INEXISTANT < SUR UN VOLUME. CPZR B < A-T'ON SPECIFIE UN NUMERO DE BLOC INI- < TIAL POUR LA RECHERCHE D'UN BLOC LIBRE ?? JNE Z36XYN < OUI... LR A,B < NON, DONC ON VA PARTIR SUR LE PREMIER, < DONT ON MET L'ADRESSE DANS 'B'... Z36XYN: EQU $ SBR A,B < (B)=ADRESSE DISQUE RELATIVE A 'VOLSE0' < A PARTIR DE LAQUELLE FAIRE UNE < RECHERCHE DE BLOC LIBRE... LAI K < CLEAR 'K', DV VOL23,W < ON CONVERTIT L'ADRESSE DISQUE EN UN < NUMERO DE BLOC, LR A,X < (X)=NUMERO DU PREMIER BLOC A TESTER < DANS LA TABLE D'ALLOCATION. LR A,B < (B)=SAUVEGARDE DU NUMERO DE PREMIER < BLOC A TESTER. LAD VOLTAB,W < (A)=ADRESSE DE LA TABLE D'ALLOCATION < DANS LE DESCRIPTEUR COURANT, DRBM < RECHERCHE DANS 'X' DU NUMERO DU PREMIER < BLOC LIBRE ; A NOTER QU'ON NE VALIDE PAS < (X) PAR RAPPORT A 'Y' CAR L'INS- < TRUCTION "DRBM" LE FAIT... JNC Z36XYC < OK, (X)=NUMERO DU BLOC ALLOUE... CPZR B < ON N'A RIEN TROUVE ; ALORS LA RECHERCHE < A-T'ELLE EU LIEU A PARTIR DU DEBUT ??? JNE Z36XY5 < NON, ET BIEN IL N'Y A PAS DE BLOCS LIBRES < LIBRE, CE QUI N'EST PAS EN CONTRA- < DICTION AVEC LE FAIT QUE 'VOLNIM' < N'EST PAS NUL, CAR LA RECHERCHE < N' A PAS ETE FAITE A PARTIR DU DEBUT < DE LA TABLE D'ALLOCATION... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE, CAR 'VOLNIM' N'EST < PAS NUL, ET LA TABLE D'ALLOCATION < EST VIDE !!! < JMP Z36XY5 < VERS LA SORTIE EN ERREUR... Z36XYC: EQU $ DC VOLNIM,W < ET UN BLOC DE MOINS... < < MISE A JOUR DU DESCRIPTEUR : < (MAINTENANT QU'ON Y TOUCHERA PLUS) < BSR VAR+ASP21 < REECITURE DU DESCRIPTEUR (NE PAS OUBLIER < QUE LA DEMANDE A ETE INITIALISE PAR LE < SOUS-PROGRAMME 'SP20'...). LR X,A < (A)=NUMERO DU BLOC ALLOUE, MP VOL23,W < QUE L'ON CONVERTIT EN UN NUMERO DE < Q-SECTEUR, LRM A WORD VOLSE0 < (A)=ADRESSE DU PREMIER Q-SECTEUR DISPO- < NIBLE POUR L'ALLOCATION, ADR B,A < (A)=ADRESSE DISQUE DU BLOC ALLOUE, STA VAR+DEMSAV+T+ASDEM < QUE L'ON MET DANS LA DEMANDE D'ACCES AU < DISQUE... LA VOLNIM,W < (A)=NOMBRE DE BLOCS ENCORE DISPONIBLES < SUR LE VOLUME COURANT... PLR B,X,Y,W < < ENVOI DE LA DEMANDE 'MEMTV' --> 'DKU' : < PSR B,X,W XR A,X < (X)=NOMBRE DE BLOCS ENCORE LIBRES APRES < ALLOCATION, ET < (A)=SAUVEGARDE DE L'INDEX INITIAL DE < LA . BSR ASTBOX < QUE L'ON RENVOIE DANS LA 'BOX'... LR A,X < (X)=INDEX INITIAL DE LA . LAD VAR+DEMSAV LR A,W < (W)=ADRESSE DE LA DEMANDE... LA NSPTYP < RECUPERATION DU 'NSPTYP' D'ACCES A < 'NSPDKG', QUI A DEJA ETE GENERE LORS < DE L'APPEL A 'SP20'... IF NSPDKG-NSPDKU,,XEIF%, IF ATTENTION : L'ACCES A LA TELEVISION NUMERIQUE IF 'MEMTV' <--> 'DKU' PASSE PAR 'DKU' !!! XEIF%: VAL ENDIF RBT TYPAD < LA DEMANDE EST REMISE EN OCTETS... STA NSPTYP < GENERATION DU 'NSPTYP' D'ACCES A LA < TELEVISION NUMERIQUE... WORD LAFTVW < (A)='FONTVW' (INSTRUCTION EN AVANT...), STA ARGDEM+OPDEM < FONCTION : 'MEMTV' --> 'DKU'. IF TVAR0-O,,XEIF%, IF ATTENTION : LE 'STZ' QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF STZ ARGDEM+AMDEM < POUR ATTEINDRE 'MEMTV' DEPUIS L'ORIGINE, LRM A WORD TVLIMA*LK*XNCOOL*NOCMO STA ARGDEM+CODEM < ET EN ENTIER... BSR VAR+ASP40 < ENVOI DE LA DEMANDE DE TRANSFERT < DIRECT 'MEMTV' --> 'DKU', BSR ACHANW < ET ATTENTE DE FIN... < < RENVOI DE L'ADRESSE D'IMPLANTATION < REELLE EXPRIMEE EN Q-SECTEURS DU < BLOC, ADRESSE QUI EST EXPLOITABLE < POUR UN ACCES DIRECT, SANS PASSER < PAR LE 'SGN' : < LA ARGDEM+ASDEM < (A)=ADRESSE DU BLOC, SLRD NBITOC < DECONCATENATION DES 2 OCTETS, XWOR%1: VAL CODBT=FMASK(K?MOCG=FCINST)MOCG/NBITOC < INDEX DE L'OCTET GAUCHE, XWOR%2: VAL CODBT=FMASK(K?MOCD=FCINST)MOCD/NBITOC < INDEX DE L'OCTET DROIT. ADRI VALUAD*NOCMO+XWOR%1,X STBY &VAR+ANOM < RENVOI DU PREMIER OCTET, LAI K < CLEAR DE 'A', SLLD NBITOC ADRI XWOR%2-XWOR%1,X STBY &VAR+ANOM < ET RENVOI DU DEUXIEME OCTET DE L'ADRESSE < DISQUE DU BLOC ALLOUE. < < RELECTURE DU BLOC ECRIT < POUR VERIFICATION : < LRM A,B WORD STNRET < (A)=ADRESSE DE RETOUR DU MODULE DE < VALIDATION, WORD STNVAL < (B)=ADRESSE DU MODULE DE VALIDATION. PSR A,B < AINSI, ON EMPILE L'ADRESSE DE RETOUR < ICI, PUIS L'ADRESSE DU MODULE DE VALIDA- < TION... RSR < CE 'RSR' EST DONC EQUIVALENT A UN < 'JMP STNVAL' MAIS QUE L'ON NE PEUT < REALISER AINSI FAUTE DE PLACE (SANS < COMPTER LES PROBLEMES DES SAUTS SUPERIEUR < A 128 MOTS...). STNRET: EQU $ < ET VOICI LE POINT DE RETOUR DE 'STNVAL'. PLR B,X,W JNE Z36XYK < ERREUR LORS DE LA RELECTURE DE LA VALEUR < SUR LE VOLUME AMOVIBLE ; ON REBOUCLE < SUR L'ALLOCATION D'UN BLOC, EN LAISSANT < ALLOUE LE BLOC EN DEFAUT ; IL EST DONC < PERDU A JAMAIS... < < RETOUR DU MODULE D'EXTENSION SUR VOLUME, < ET PARTIE COMMUNE AU 'STN' NORMAL : < Z36XY4: EQU $ < < PREPARATION DU BUFFER STATIQUE < POUR LE : < BSR VAR+ASP6 < CLEAR DU BUFFER STATIQUE. PSR W < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE < A 'HDLSTN', PSR Y < SAVE LONGUEUR DU . BSR VAR+ASP8 < (W)=ADRESSE DU BUFFER DU . < < DANS LE CAS DE L'EXTENSION DE < VOLUME, MISE DES INFORMATIONS < DE CHAINAGE DANS LE : < LA VAR+ISGNUV < Y-A-T'IL EU EXTENSION ??? JALE Z36XYD < NON... PSR B,X,L < OUI : LB VAR+DEMSAV+T+AMDEM < AU CAS OU IL N'Y AURAIT PAS DE VOLUME < MONTE, ON RECUPERE 'AMDEM' DE 'DEMSAV', LX VAR+DEMSAV+T+ASDEM < (X)=ADRESSE EN Q-SECTEURS, LA VAR+ASGNU LR A,L < (L)=ADRESSE DU BUFFER DU DESCRIPTEUR DU < VOLUME COURANT, ET < (W)=ADRESSE DU , CPZR L < ALORS, Y-A-T'IL UN VOLUME DE MONTE ??? JE Z36XYI < NON, 'A' DONNE DIRECTEMENT LE NUMERO < DE VOLUME... LB VOLNUM,L < OUI, C'EST DONC LE DESCRIPTEUR DE VOLUME < QUI LE DONNE... Z36XYI: EQU $ STB SIND+SVALNU,W < TRANSMISSION DU NUMERO DE VOLUME, STX SIND+SVALAD,W < ET DE L'ADRESSE DU BLOC EN Q-SECTEURS. PLR B,X,L < < FIN DU MODULE : < Z36XYD: EQU $ JMP Z36XY9 < VERS LE DEROULEMENT NORMAL DE 'STN'... < < ERREUR : VOLUME DIFFERENT DE CELUI DEMANDE : < Z36XY6: EQU $ PLR B,X,Y,W LAI ENDKUW < CODE D'ERREUR, AAZ33: JMP ABZ33 < VERS SON RENVOI... < < ERREUR : PLUS DE PLACE : < Z36XY5: EQU $ LA VOLNIM,W < (A)=NOMBRE DE BLOCS ENCORE DISPONIBLES < QUI PEUT ETRE NON NUL, PUISQUE LA < RECHERCHE D'UN BLOC LIBRE NE COMMENCE < PAS FORCEMENT SUR LE PREMIER... PLR B,X,Y,W LR A,X < (X)=NOMBRE DE BLOCS ENCORE LIBRES, BSR ASTBOX < VERS LE RENVOI DE CE NOMBRE DANS LA < 'BOX' DE LA DEMANDE AFIN QUE L'ON PUISSE < DISCRIMINER LES VRAIES (PLUS DE PLACE < DEPUIS LE DEBUT : 'VOLNIM'=K) DES < AUTRES (PAS DE PLACE A PARTIR DU BLOC < DEMANDE). BR VAR+RAZ26X < VERS L'ENVOI D'UN CODE D'ERREUR... PAGE < < < L O A D V A L E U R : < < < FONCTION : < RECUPERE ET RENVOIE LA VALEUR < ASSOCIEE A UN NOM. LORSQUE LA < LONGUEUR DEMANDEE EST INFERIEURE < A LA VALEUR REELLEMENT ASSOCIEE < AU NOM, ON NE RENVOIE QUE CE < QUI EST DEMANDE. < < < ARGUMENTS : < (A)=CODE DE RETOUR DE L'ARBORICULTEUR, < (B)=RANG DERNIER CARACTERE DE LA VALEUR, < (X)=RANG 1ER CARACTERE DE LA VALEUR. < < < RESULTAT : < SI LA BOX DE LA DEMANDE COURANTE < EST VALIDE, CELLE-CI RECOIT LE NBRE < D'OCTETS REELLEMENT OCCUPES PAR LA < VALEUR QUE L'ON VIENT DE CHARGER ET CECI < PEUT ETRE PARTIELLEMENT ; ON PEUT DONC < AINSI CONNAITRE LA LONGUEUR REELLE < D'UNE VALEUR PAR UN LOAD NE PORTANT PAS < OBLIGATOIREMENT SUR LE COMPTE D'OCTETS MAX !!! < < HDLLON: EQU $ JANE Z34 < ERREUR : LE NOM N'EXISTE PAS. LA VAR+DEMSAV+T+OPDEM IF XBNV-BITSIG,,XEIF%, IF ATTENTION : LE TEST QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF JAGE Z34 < ERREUR, LE SUIVANT SERIE DU < NOM N'EXISTE PAS. < < OK, LE NOM EXISTE DEJA : < STZ ARGDEM+OPDEM < MISE EN LECTURE DE LA DEMANDE A < HDLSAV. TBT XBNVL < TEST INDICATEUR LONGUEUR-VALEUR LA VAR+DEMSAV+T+ASDEM JC Z34 < BIT1(OPDEM)=1: CE N'EST DONC < PAS UN RELAI-VALEUR, ET ON < CONSIDERE QUE LE NOM N'EXISTE < PAS. LR A,Y < OK, C'EST UN RELAI VALEUR... < < ON A ICI : < (Y)=RELAI VALEUR (@SECTEUR-MAP). < BSR VAR+ASP6 < CLEAR LE BUFFER STATIQUE. PSR W < SAVE @DEMANDE ARG. BSR VAR+ASP8 < (W)=@BUFFER ALLOUE. < < SAUVEGARDE DE LA LONGUEUR DEMANDEE POUR LA VALEUR : < SBR X,B STB VAR+NOMS < SAUVEGARDE TEMPORAIRE DE LA < LONGUEUR DEMANDEE DANS 'NOMS'. < < ACCES A LA VALEUR : < STY SMAP,W < RANGEMENT DU RELAI-VALEUR. < (@SECTEUR-MAP). LA INFINI STA SIND+SINDL,W < MEMORISONS AINSI QUE LA LONGUEUR < REELLE DE LA VALEUR N'EST PAS < ENCORE CONNUE, ET QU'ELLE NE < LE SERA QUE APRES LA LECTURE < DU SECTEUR-MAP. LA VAR+ANOM < (A)=RELAI D'ACCES A . SLLS NOCMO=K < (A)=@OCTET DE A UNE < FRONTIERE DE MOT. AD VAR+IVAL < (A)=@OCTET DE LA VALEUR DEMANDEE. STA VAR+ANOM < (ANOM)=ADRESSE-OCTET DU PREMIER OCTET < DE LA VALEUR. PSR A < SAVE @OCTET 1ER OCTET VALEUR. LYI FGR < FONCTION DE LECTURE. BSR VAR+ASP11 < RECUPERATION DE LA VALEUR SUR DK. BSR VAR+ASP8 < RESTAURE (W)=@MOT DU BUFFER < ALLOUE (CA MARCHERA MIEUX !!!) < < RENVOI DE LA 1ERE PARTIE DE LA VALEUR < (CONTENUE DANS LE SECTEUR-MAP) AU < DEMANDEUR : < PLR A < RESTAURE (A)=@OCTET 1ER OCTET < DE LA VALEUR. LBI XXSP10 < AFIN QUE L'EMETTEUR SOIT PRIS < DANS LE BUFFER STATIQUE. BSR VAR+ASP9 < MOVE 1ERE PARTIE DE LA VALEUR. < < DISCRIMATION DES ITEMS "NORMAUX" ET "SGF" : < LA ETASYS TBT OTODLN < EST-CE A FAIRE ??? JC Z36X3 < NON... IF SXSGFN-K,XEIF%,, IF ATTENTION : 'SXSGFN' EST MAUVAIS !!! XEIF%: VAL ENDIF IF SXSGFF-K,,,XEIF% IF ATTENTION : 'SXSGFF' EST MAUVAIS !!! XEIF%: VAL ENDIF CPZ VAR+SGNSGF < OUI, QUELLE EST LA NATURE DE L'ITEM < ATTENDU ??? JL Z36X3 < "NORMAL" ; ON NE VERIFIE PAS SI L'ITEM < RECUPERE EST "NORMAL" OU "SGF" AFIN < QUE LES PROGRAMMES UTILISATEURS DE < LISTAGE EN PARTICULIER CONTINUENT A < FONCTIONNER... JG Z36X4 < "SGF", ALLONS VALIDER... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT PEUT-ON AVOIR (SGNSGF)=0 !!! < JMP Z36X3 < VERS LE RETOUR... Z36X4: EQU $ CPZ SIND+SXSGF,W < ON ATTENDAIT UN "SGF" ; ALORS A-T'ON < BIEN RECUPERE UN ITEM "SGF" ??? JL Z34X < NON, ON ABORTE ; IL PEUT S'AGIR D'UN < FAUX FICHIER CREER PAR UN UTILISATEUR < VICIEUX COMME IL PEUT EN EXISTER... < < TEST DES EXTENSIONS SUR VOLUME : < Z36X3: EQU $ LA VAR+ISGNUV < Y-A-T'IL EU EXTENSION ??? JALE Z36X3A < NON... IF ISGNPV-K,,XEIF%, IF ATTENTION : LE TEST SUIVANT EST IDIOT !!! XEIF%: VAL ENDIF CPZ VAR+ASGNU < Y-A-T'IL UN VOLUME MONTE ??? JE Z36X3B < NON... < < CAS OU UN ACCES LICITE A < UN VOLUME MONTE A EU LIEU : < PSR X,W < OUI : LR A,X < (X)='NSP' DU DISQUE D'EXTENSION. IF MONT0-K,,XEIF%, IF ATTENTION : LE 'JAE' EST IDIOT !!! XEIF%: VAL ENDIF LA SIND+SVALNU,W < MAIS AU FAIT, EST-CE BIEN UN ITEM < D'EXTENSION SUR VOLUME ??? JAE Z36X3P < NON, DONC PAS D'ACCES AU VOLUME, SACHANT < QUE LA VALEUR DE 'BOX' PERMETTRA DE FAIRE < LA DIFFERENCE PAR LE BIT 'IVALEX'... CP VAR+NVSGNU < OUI, MAIS LE NUMERO DE VOLUME CONTENANT < LE BLOC RELAYE PAR L'ITEM COURANT (A) < EST-IL LE VOLUME COURANT ??? JNE Z36X3P < NON, DONC ON FAIT COMME S'IL N'Y AVAIT < PAS EU D'EXTENSION... LA SIND+SVALAD,W < (A)=ADRESSE DU BLOC SUR LE DISQUE, STA VAR+DEMSAV+T+ASDEM < QUE L'ON MET DANS LA DEMANDE, LAD VAR+DEMSAV LR A,W < (W)=ADRESSE DE LA DEMANDE. IF NSPDKU-NSPDKG,,XEIF%, IF ATTENTION : IL FAUT POUVOIR ATTEINDRE LA IF TELEVISION NUMERIQUE, DONC IL FAUT 'DKU' !!! XEIF%: VAL ENDIF SWBR X,A < MISE EN PLACE DU 'NSP', STA NSPTYP < ET GENERATION DU 'NSPTYP'. WORD L2FTVR < (A)='FONTVR' (INSTRUCTION EN AVANT...), STA ARGDEM+OPDEM < MISE EN MODE FONCTION TRANSFERT < RAPIDE : 'DKU' --> 'MEMTV'. IF TVAR0-O,,XEIF%, IF ATTENTION : LE 'STZ' EST IDIOT !!! XEIF%: VAL ENDIF STZ ARGDEM+AMDEM < AFIN D'ATTEINDRE 'MEMTV' DEPUIS SON < ORIGINE, LRM A WORD TVLIMA*LK*XNCOOL*NOCMO STA ARGDEM+CODEM < ET EN ENTIER... BSR VAR+ASP40 < ENVOI DE LA DEMANDE DE TRANSFERT < RAPIDE : 'DKU' --> 'MEMTV', BSR ACHANW < ET ATTENTE... Z36X3P: EQU $ < CAS OU IL N'Y A PAS COINCIDENCE ENTRE < LE NUMERO DE VOLUME COURANT ET LE NUMERO < DE VOLUME DE L'ITEM... PLR X,W Z36X3B: EQU $ < < VERS LE RETOUR : < Z36X3A: EQU $ BR VAR+RAZ36 < VERS LE RETOUR... < < TRAITEMENT DES ERREURS DE PARCOURS : < Z34X: EQU $ PLR W < RESTAURE L'ADRESSE DE LA DEMANDE... Z34: EQU $ LAI ENNX < ERREUR : NOM INEXISTANT LORS D'UN < LOAD/DELETE. AZ33: JMP AAZ33 < VERS LE RENVOI DU CODE AU < DEMANDEUR. < (ET RELAI...) PAGE < < < D E L E T E V A L U E : < < < FONCTION : < DELETE LE NOM, ET REND L'ESPACE < DISQUE OCCUPE PAR LA VALEUR. < MAIS ATTENTION, S'IL S'AGIT D'UN < ITEM DE CONNEXION AU SGF, ON REGARDE < SI LE FICHIER CORRESPONADNT EXISTE < TOUJOURS, ET SI OUI, ON REFUSE < LE DELETE... < < < ARGUMENTS : < (A)=CONDITION DE RETOUR DE L'ARBORICULTEUR. < (Y)=LONGUEUR . < < < RESULTAT : < SI LA BOX DE LA DEMANDE COURANTE EST < VALIDE, CELLE-CI RECOIT LE NBRE < D'OCTETS DELETES. < < HDLDLN: EQU $ JANE Z34 < ERREUR : LE NOM A DELETER < N'EXISTE PAS. LR Y,A < (A)=LONGUEUR . CPI XXSGN4-Z < CE NOM QUI EXISTE PUISQU'ON < EST ICI, EST-IL VIDE ???? < (EST-CE L'EOT' DE TETE DU SOUS < ABRE UTILISATEUR ???? ). JE Z34 < OUI, FAISONS DONC COMME SI < CELUI-CI N'EXISTAIT PAS, IL < N'EST PAS QUESTION DE LE DELETER. LB VAR+DEMSAV+T+OPDEM TBT NBITMO+XBNVL < VALIDATION DU RELAI-VALEUR < PRESUME JC Z34 < BIT1(OPDEM)=1: CE N'EST DONC < PAS UN RELAI-VALEUR, ET ON < CONSIDERE QUE LE NOM N'EXISTE < PAS !!! LB VAR+DEMSAV+T+ASDEM < CHARGEMENT RELAI-VALEUR PSR B < SAVE (B)=RELAI-VALEUR=@SECTEUR-MAP. PSR B,X,Y,W PSR Y < SAVE LA LONGUEUR NOM-SYSTEME. BSR VAR+ASP6 < CLEAR LE BUFFER STATIQUE. BSR VAR+ASP8 < (W)=ADRESSE MOT DU BUFFER. LYI FGR < (Y)=K=FONCTION DE LECTURE LAI XXSP10 < (A)=K, AFIN D'ATTEINDRE LE BUFFER < STATIQUE. LRM X WORD YY8Q < (X)=LONGUEUR D'UN ENREGISTREMENT. BSR VAR+ASP10 < LECTURE DU SECTEUR-MPA (B). PLR Y < RESTAURE (Y)=LONGUEUR NOM-SYSTEME. LA ETASYS TBT OTODLN < DOIT-ON TESTER S'IL S'AGIT D'UN < NOM DE FICHIER EXISTANT ??? JC ZZ34 < NON... CPZ SIND+SXSGF,W < OUI, ALORS L'ITEM RECUPERE EST-IL DE < TYPE "SGF" ??? JL ZZ34 < "NORMAL", ON VA LE DELETER... < < CAS D'UN ITEM DE TYPE "SGF" < OU BIEN DE TYPE "ANCIEN", < ALLONS FAIRE LES VERIFICATIONS < D'USAGE : < IF SXSGFN-K,XEIF%,, IF ATTENTION : 'SXSGFN' EST MAUVAIS !!! XEIF%: VAL ENDIF IF SXSGFA-K,,XEIF%, IF ATTENTION : 'SXSGFA' EST MAUVAIS !!! XEIF%: VAL ENDIF IF SXSGFF-K,,,XEIF% IF ATTENTION : 'SXSGFF' EST MAUVAIS !!! XEIF%: VAL ENDIF NTRN IF XLPASS/NOCMO(K=FCREST,,XEIF%, IF ATTENTION : CE QUI SUIT RISQUE DE NE PAS MARCHER !!! XEIF%: VAL ENDIF TRN XWOR%7: VAL BUFESC-DCTESC < DEPLACEMENT D'ACCES A 'BUFESC'. NTRN XWOR%7: VAL XLPASS+NOCMO-E/NOCMO+XWOR%7 TRN < AFIN DE PRENDRE EN COMPTE LE NOMBRE < DE MOTS OCCUPES PAR "!ASSIGN N=X," XWOR%3: VAL NOCMO+NOCMO-E < NOMBRE D'OCTETS DE VALIDATION... NTRN XWOR%5: VAL XWOR%3+NOCMO-E/NOCMO < SOIT EN MOTS... TRN XWOR%7: VAL YY7-XWOR%5-XWOR%7 XWOR%7: VAL XWOR%7*NOCMO < AFIN D'AVOIR UN NOMBRE D'OCTETS. XWOR%7: VAL XWOR%7+NOCMO-Z < POUR COMMENCER SUR L'OCTET < DROIT D'UN MOT (CF. NSPSTN+X123X). XWOR%7: VAL XXSGN2*NOCMO+NOCMO-E+XWOR%7 < POUR AJOUTER LA LONGUEUR DE ... XWOR%7: VAL XWOR%7+XWOR%3 < CAR IL Y A 3 OCTETS DE VALIDATIONS < 'SGF' : < 1 : NSPSTN+X123X, < 2 : NOM INTERNE DU FICHIER. LXI XWOR%7 SBR Y,X < (X)=LONGUEUR DE L'ITEN S'IL S'AGIT < D'UN ITEM DE CONNEXION 'SGF'. LA SIND+SINDLO,W < LONGUEUR REELLE DE L'ITEM, CPR X,A < EST-CE LA LONGUEUR PREVUE POUR 'SGF' ??? JL ZZ35XS < ET BIEN NON, CE N'EST PAS CELA... ADRI NOCMO*SVAL-XWOR%3,X < PEUT-ETRE, ALORS ALLONS TESTER < LES 3 OCTETS FATIDIQUES DANS LA < 1ERE PARTIE DE LA VALEUR... BSR AGETOC CPI NSPSTN+X123X < EST-CE LA VALIDATION ??? JNE ZZ35XS < NON, CE N'EST PAS UN FICHIER... ADRI I,X < A L'OCTET SUIVANT... BSR AGETOC XWOR%1: VAL MOCG=K XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE DE 8. CPI NMFILE>XWOR%1 < EST-CE UN DEBUT DE NOM INTERNE ??? JGE ZZ35XS < NON, CE N'EST PAS UN FICHIER... LBI K < CLEAR B, SLRD -XWOR%1 < SAUVEGARDE DU DEBUT DU NOM INTERNE. ADRI I,X < A L'OCTET SUIVANT. BSR AGETOC ORR B,A < (A)=NOM INTERNE PRESUME... LR A,X < (X)=NOM INTERNE, LAD ATADF < (A)=ADRESSE DU RELAI VERS 'TADF'. LYI FONTB < (Y)=FONCTION DE TEST DU BIT DONT LE < RANG EST DANS X (=NOM INTERNE). BSR ATMOBT < COMMENT EST LE FICHIER ??? JC ZZ34 < OK, IL EST EN COURS DE DELETE, OU < BIEN EN ATTENTE DE DELETE ; ON PEUT < DONC DELETER SON NOM EXTERNE... LAI MTSGF < MASQUE='0, ETAT='0. BSR AMTEDF < RECHERCHE DE L'ETAT DU FICHIER DE < NOM INTERNE (X). JAE ZZ34 < LE FICHIER CORRESPONDANT EST INEXISTANT, < JAMAIS OUVERT... OK ON PEUT DELETER... IF XEFX-K,,XEIF%, IF ATTENTION : LE 'JAE' QUI PRECEDE EST IDIOT !!! XEIF%: VAL ENDIF CPI XEFF < LE FICHIER EST-IL EXISTANT ET FERME ??? JE ZZ35 < OUI, ON REFUSE LE DELETE... CPI XEFO < LE FICHIER EST-IL EXISTANT ET OUVERT ??? JE ZZ35 < OUI, ON REFUSE LE DELETE... CPI XEF1 < EST-CE UN FICHIER INEXISTANT OUVERT < AU MOJSN UNE FOIS ??? JE ZZ34 < OUI, ALLONS DELETER... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < EN FAIT IL NE S'AGIT PAS VRAIMENT < D'UNE ERREUR SYSTEME ; CE CAS PEUT < SE RENCONTRER JE CROIS LORSQU'UN < FICHIER - EST < EN COURS DE DELETE PAR UN "!ASSIGN..." ; < APRES LE CLOSE RELEASE DU LORSQUE LE DELETE DE < L'ESPACE DISQUE (PAR LA TACHE IDLE < DE DELETE) EST TERMINE LE < REDEVIENT DISPONIBLE POUR L'OPEN < NEW D'UN NOUVEAU FICHIER ; SI PAR < MALHEUR UN AUTRE UTILISATEUR DE- < MANDE DONC UN OPEN NEW, ALORS < QUE CELUI QUI A CAUSE LA 'SYSER' < EST ENTRE LA LIBERATION DE SON < ET LA DESTRUCTION < DU DU FICHIER (POUR DES < RAISONS DE PRIORITE ET SI DE < PLUS LE FICHIER DELETE ETAIT < PETIT OU VIDE...), DONC LORS < DU 'DLN' DE ON TROUVE QUE < LE FICHIER EXISTE < ENCORE, ALORS QUE CE N'EST PLUS < LE MEME... < DONC ON ACCEPTE LE DELETE DU < ... < ZZ34: EQU $ PLR B,X,Y,W < < DELETE DANS L'ARBRE DU SYSTEME : < LAI SMOINS < CARACTERE DE FONCTION-DELETE. < < ON A ICI : < (B)=RELAI-VALEUR=ADRESSE DU SECTEUR-MAP, < (Y)=LONGUEUR . < BSR VAR+ASP12 < DELETE . LA VAR+DEMSAV+T+ETADEM JAE SYSR8M < DELETE OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < SORTIR EN ERREUR, MAIS ATTENTION, < IL FAUT FAIRE UN 'PLR B', PUIS < FAIRE UN 'JMP Z26' PAR EXEMPLE... < SYSR8M: EQU $ PLR B < RESTAURE (B)=@SECTEUR-MAP. PSR W < SAVE @DEMANDE ARG. BSR VAR+ASP8 < (W)=@MOT DU BUFFER ALLOUE. < < RELEASE DE L'ESPACE DISQUE DE LA VALEUR : < LB SIND+SINDLS,W < RECUPERATION (B)=NBRE DE SECTEURS < OCCUPES PAR LA VALEUR. CPZR B JG ZZ35X < OK,... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER VOIR LE BUFFER POINTE PAR (W), ET < VERIFIER QU'IL CONTIENT L'INFINI, SIGNE < D'UNE ERREUR 'DKM' !!! < BR VAR+RAZ36 < ET ON ABANDONNE... ZZ35X: EQU $ LAI NSPREL BSR VAR+ASP7 < RELEASE SECTEURS. < < TEST DES EXTENSIONS SUR VOLUME : < LA VAR+ISGNUV < Y-A-T'IL EU UNE EXTENSION DEMANDEE ??? JALE ZZ35X1 < NON... IF MONT0-K,,XEIF%, IF ATTENTION : LE 'JAE' EST IDIOT !!! XEIF%: VAL ENDIF LA SIND+SVALNU,W < MAIS AU FAIT, EST-CE UN ITEM SUR VOLUME ? JAE ZZ35X1 < NON, DONC RIEN A FAIRE, 'BOX' FERA LA < DIFFERENCE PAR 'IVALEX'... CP VAR+NVSGNU < OUI, MAIS ALORS EST-IL SUR LE VOLUME < COURANT ??? JNE ZZ35X1 < NON, DANS CES CONDITIONS, ON NE FAIT RIEN < SUR LE VOLUME COURANT, MAIS BIEN ENTENDU < LE A ETE DELETE... LA VAR+ISGNUV < RESTAURE : < (A)='NSP' DU DISQUE SUPPORT, BSR VAR+ASP20 < OUI, ON LIT LE DESCRIPTEUR DU VOLUME, < (A)=ADRESSE DU BUFFER DU DESCRIPTEUR < DU VOLUME COURANT. JAE ZZ35X1 < (A)=0 : L'ADRESSE RENVOYEE ETANT NULLE, < CELA SIGNIFIE QU'IL N'Y A PAS < DE VOLUME MONTE... JNE ZZ35X7 < BERKKK, LE VOLUME N'EST PAS FORMATTE... PSR B,X,Y,W LB SIND+SVALAD,W < (B)=ADRESSE DU BLOC SUR LE VOLUME, LR A,W < (W)=ADRESSE DU BUFFER CONTENANT LE < DESCRIPTEUR DU VOLUME. LRM A,Y WORD VOLSE0 < (A)=ADRESSE DU PREMIER BLOC DISPONIBLE, WORD NVOLIM < (Y)=NUMERO DU PREMIER BLOC INEXISTANT. SBR A,B < (B)=CONVERSION DE L'ADRESSE ABSOLUE EN < UNE ADRESSE RELATIVE AU PREMIER BLOC < DISPONIBLE... LAI K < CLEAR 'A', DV VOL23,W < ET CONVERSION DE L'ADRESSE EN UN < NUMERO DE BLOC. LR A,B < (B)=NUMERO DU BLOC QUE L'ON LIBERE, IF NVOLIM-K,,,XEIF% IF ATTENTION : LE TEST SUR LE NUMERO DE BLOC IF ARGUMENT EST MAUVAIS !!! XEIF%: VAL ENDIF JAL ZZ35X5 < L'ADRESSE DISQUE EST MAUVAISE !!! CPR Y,B < VALIDATION DU NUMERO DE BLOC CALCULE : JL ZZ35X9 < OK : (B)<(Y), LE NUMERO DU BLOC EXISTE... ZZ35X5: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT 'SVALAD' PEUT ETRE < MAUVAIS, ALORS QU'IL VIENT DU !!! < JMP ZZ35X8 < ET ON SORT.... ZZ35X9: EQU $ < < RESTITUTION DU BLOC : < LAD VOLTAB,W < (A)=ADRESSE DE LA TABLE D'ALLOCATION, LR B,X < (X)=NUMERO DU BLOC RELEASE, DRBM < RECHERCHE DU PREMIER BLOC A PARTIR < DU BLOC RELEASE, QUI DOIT ETRE DIFFE- < RENT DE CELUI QU'ON REND, SINON, CELA < SIGNIFIE QUE LE BLOC RELEASE ETAIT DEJA < LIBRE... JC ZZ35X2 < OK, ON N'A RIEN TROUVE... SBTM L,X < ON A TROUVE UN BLOC LIBRE, ON L'A OCCUPE < IL FAUT LE RENDRE (C'EST QUAND MEME < MALHEUREUX QU'IL N'EXISTE PAS UNE < INSTRUCTION 'TBTM', ENCORE MERCI LA < SEMS...). CPR B,X < LE PREMIER BLOC TROUVE LIBRE, NE SERAI-IL < PAS CELUI QUE L'ON REND ??? JNE ZZ35XA < NON, C'EST HEUREUX... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT LE < PEUT CONTENIR DES COCHONNERIES !!! < A NOTER QUE CELA PEUT SE PRODUIRE < AVEC LE MODE 'STN' SUR VOLUME D'EXTENSION < LORSQU'IL N'Y A PAS DE VOLUME MONTE, < CE QUI PERMET DE CREER DES VALEURS < BIDONS CORRESPONDANT A DES BLOCS NON ALLOUES... < JMP ZZ35X8 < ET ON SORT... ZZ35XA: EQU $ ZZ35X2: EQU $ LR B,X < (X)=NUMERO DU BLOC A LIBERER... SBTM L,X < ET ON LE LIBERE... IC VOLNIM,W < ET UN BLOC LIBRE DE PLUS... BSR VAR+ASP21 < REECRITURE DU DESCRIPTEUR DU VOLUME... ZZ35X8: EQU $ PLR B,X,Y,W < < RETOUR : < ZZ35X1: EQU $ BR VAR+RAZ36 < VERS LE RETOUR... < < ERREURS SUR UN ITEM < DE TYPE "SGF" : < ZZ35XS: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < VOIR QUELLE EST LA CAUSE < QUI AMENE ICI, PUIS COMPRENDRE < COMMENT UN ITEM DE TYPE "SGF" < PEUT NE PAS AVOIR LES BONNES < DIMENSIONS ET UN FORMAT COR- < RECT !!! < < < ERREUR : DELETE REFUSE POUR < UN ITEM DE TYPE "SGF" ASSO- < CIE A UN FICHIER EXISTANT < OUVERT OU FERME : < ZZ35: EQU $ PLR B,X,Y,W PLR B JMP Z34 < DELETE REFUSE SI FICHIER PRESUME < EXISTANT... < < ERREUR : VOLUME NON FORMATTE : < ZZ35X7: EQU $ LAI ENDKUV < CODE D'ERREUR, PLR W AAAZ33: JMP AZ33 < VERS SON RENVOI... < (ET RELAI...) PAGE < < < P A R C O U R S I N C R E M E N T A L < D ' U N A R B R E : < < < FONCTION : < CES HANDLERS SPECIFIQUES PERMETTENT < DE RECUPERER LES SUIVANTS < SEERIE OU PARALLELE D'UN NOM < DONNE EN ARGUMENT. CE CARACTERE SUIVANT < EST RENVOYE DERRIERE LE NOM, < OU UN CODE ERREUR (5) S'IL < N'EXISTE PAS. < ON PEUT DONC AINSI PARCOURIR UN < ARBRE QUE L'ON NE CONNAIT PAS (MIS < A PART SA RACINE!!!!). < < < ARGUMENTS : < (A)=CODE DE RETOUR DE L'ARBORICULTEUR. < (X)=RANG 1ER CARACTERE DERRIERE LE NOM. < < HDLNXT: EQU $ JANE Z34 < ERREEUR LE NOM DEMANDE N'EXISTE < PAS. LA VAR+DEMSAV+T+OPDEM IF XBNV-BITSIG,,XEIF%, IF ATTENTION : DES TESTS MERDERONT !!! XEIF%: VAL ENDIF JAGE Z50 < ERREUR, LE NOEUD SUIVANT < DEMANDE N'EXISTE PAS. LR X,A < (A)=RANG DU 1ER CARACTERE < DERRIERE LE NOM. CP ARGDEM+CODEM < CE TEST EST DESTINE A DEPISTER < LES NOMS ARGUMENTS QUI CON- < TIENDRAIENT UN OU PLUSIEURS < 'EOT' DANS LA CHAINE DE CARAC- < TERES QUI LES COMPOSENT. JL Z50 < ERREUR : LA LONGUEUR ARGUMENT < EST SUPERIEURE AU RANG TROUVE ; < IL Y A PROBABLEMENT UN 'EOT' < QUI TRAINE QUELQUE PART... < < CAS OU LE NOM EXISTE ET QU'IL POSSEDE < LE SUIVANT SERIE OU PARALLELE DEMANDE : < LA VAR+DEMSAV+T+OPDEM TBT XBNVL < TEST INDICATEUR LONGUEUR-VALEUR JNC Z50 < ERREUR! C'EST UN RELAI-VALEUR LA VAR+DEMSAV+T+ASDEM < RECUPERATION CARACTERE SUIVANT <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : STBY &VAR+ANOM < ON LE RAJOUTE DERRIERE LE NOM. <******************************************************************************* < (L'OCTET1 CONTIENT LE CARACTERE < QUE VALIDE LE BIT0=1) IC ARGDEM+CODEM < LE NOM FAIT MAINATENANT UN < CARACTERE DE PLUS. STZ ARGDEM+OPDEM < MISE EN LECTURE DE LA DEMANDE < A HDLSAV. BR VAR+RAZ51 < RETOUR OK. < < CAS OU LE NOM EXISTE, MAIS OU LE SUIVANT < DEMANDE N'EXISTE PAS : < Z50: EQU $ LAI ENSX < CODE-ERREUR. JMP AAAZ33 < VERS LE RENVOI DU CODE AU < DEMANDEUR. PAGE < < < A U T O R I S A T I O N / I N H I B I T I O N < D E L A C O M P R E S S I O N ' S T N ' : < < < FONCTION : < CES 2 MODULES SONT REFERENCES < PAR LA GRAMMAIRE DU 'CCI' SUITE < A LA RECONNAISSANCE DES COMMANDES < "!SGN C ON" ET "!SGN C OFF" ; < ILS ONT POUR EFFET DE MODIFIER < L'INSTRUCTION DYNAMIQUE SITUEE < EN 'DCOMPR'. < < PSGNON: EQU $ < COMMANDE "!SGN C ON" : PSR W LRM A,W LAI XXCPR < (A)=INSTRUCTION D'AUTORISATION, WORD DCOMPR < (W)=ADRESSE DE CETTE INSTRUCTION. JMP PSGN1 < VERS LA MISE EN PLACE... PSGNOF: EQU $ < COMMANDE "!SGN C OFF" : LA MEMV < (A)=LISTE DES INDICATEURS 'MEMV' : TBT MEMXXX < LA FONCTION EST-ELLE AUTORISEE ??? JNC PSGN2 < NON, ERREUR... PSR W < OUI : LRM A,W LAI XXNCPR < (A)=INSTRUCTION D'INHIBITION, WORD DCOMPR < (W)=ADRESSE DE CETTE INSTRUCTION. < < MISE EN PLACE DE L'INSTRUCTION < D'INHIBITION/AUTORISATION DE < LA COMPRESSION 'STN' : < PSGN1: EQU $ STA O,W < ET VOILA... PLR W < < RETOUR : < PSGN3: EQU $ RSR < < SORTIE EN ERREUR : < PSGN2: EQU $ ADRI XCCIER,X < RETOUR EN ERREUR AU 'CCI'... JMP PSGN3 < ET ON SORT... PAGE < < < V A L I D A T I O N D ' U N B L O C E C R I T < S U R V O L U M E A M O V I B L E : < < < FONCTION : < CE MODULE MIS ICI POUR DES < RAISONS LIEES AU MANQUE DE < PLACE (SAUTS SUPERIEURS A < 128 MOTS) ET DONC L'ACCES EST < VACHEMENT TARABISCOTTE... EST < CHARGE DE RELIRE LE BLOC QUE < L'ON VIENT D'ECRIRE ; POUR < PREVENIR UNE DETERIOTATION DE < 'MEMTV' SUR ERREUR DISQUE, CETTE < RELECTURE SE FAIT EN MODE "!DK S", < SACHANT QUE LA COMMANDE 'CCI' < EQUIVALENTE "!DK S" NE PEUT ETRE < EMISE SIMULTAEMENT PAR UN AUTRE < UTILISATEUR PUISQUU'ELLE EST < DORENAVANT RESERVEE A CELUI QUI < AURA FAIT UN "!ASSIGN N=DKU" AU < PREALABLE... < < < NOTA IMPORTANT : < CETTE VERIFICATION PAR RELECTURE < N'EST PAS FAITE SI LA 'CDA' UTILISEE < POUR L'EXTENSION SUR VOLUME EST LA < 'CDAJ+PAGEIJ', CAR EN EFFET, LA MEMOIRE < HAUTE (CF. 'AMEMTW') RELATIVE A L'ORI- < GINE DE LA 'CDA' EST EN RECOUVREMENT AVEC < LES REGISTRES 68000... < < < RESULTAT : < LES CODES DE CONDITIONS SONT POSITIONNES < PAR TEST DE 'ETADEM' APRES LA RELECTURE... < < STNVAL: EQU $ < < DISCRIMINATION DES 'CDA' : < STZ ARGDEM+ETADEM < AFIN DE FAIRE A PRIORI UN RETOUR OK... XWOR%1: VAL LK>DADR*TMCDAJ=K XWOR%2: VAL BIT>XWOR%1*PAGEIJ XWOR%3: VAL -XSLO32 XWOR%4: VAL MCDAJO+XWOR%2>XWOR%3 LA VAR+SGNCDA < (A)=NUMERO DE LA PREMIERE PAGE DE LA < 'CDA' COURANTE : CPI XWOR%4 < EST-CE 'CDAJ+4' ??? JE STNVAN < OUI, ON NE PEUT VALIDER L'ECRITURE... < < SIMULATION DE "!DK S" : < PSR W < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE < COURANTE... CALL #SISP CMS5 W ZERO# LRM A WORD AMEMTW < (A)=DECALAGE DE L'ADRESSE MEMOIRE, XM TVENTR-ZERO,W < ET ON SIMULE UNE COMMANDE "!DK S", TOUT < EN SAUVEGARDANT L'ETAT ANTERIEUR DANS < LE REGISTRE 'A'... PLR W < (W)=ADRESSE DE LA DEMANDE COURANTE. PSR A < SAUVEGARDE DU MOT 'TVENTR' DE LA MEMOIRE < DEBANALISEE AVANT 'STNVAL'. < < RELECTURE DU BLOC : < WORD L1FTVR < (A)='FONTVR' (INSTRUCTION EN AVANT...), STA ARGDEM+OPDEM < LA DEMANDE EST MISE EN MODE DE RELECTURE < DE LA VALEUR INSCRITE PRECEDEMMENT SUR < LE VOLUME AMOVIBLE, BSR VAR+ASP40 < ET RELECTURE DE LA VALEUR, WAIT WEIO < ET ATTENTE DE FIN DE RELECTURE... < < RETOUR A "!DK S"/"!DK F" ANTERIEUR : < PLR A < (A)=VALEUR ANTERIEURE DE 'TVENTR', PSR W < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE < COURANTE... CALL #SISP CMS5 W ZERO# STA TVENTR-ZERO,W < ET RESTAURATION DE L'ETAT ANTERIEUR < "!DK S" OU "!DK S"... < RAPPELONS QU'IL N'Y A PAS DE < PHASE CRITIQUE D'ACCES A 'TVENTR' < PUISQU'ON NE PEUT Y ACCEDER < QU'APRES AVOIR FAIT UN "!ASSIGN" < SUR LE DISQUE (OBLIGATOIRE < AUSSI POUR L'ACCES AUX VOLUMES < D'EXTENSION...). PLR W < (W)=ADRESSE DE LA DEMANDE COURANTE, < < RETOUR DU MODULE : < STNVAN: EQU $ < CAS DE 'CDAJ+4'... CPZ ARGDEM+ETADEM < ALORS COMMENT S'EST PASSE LE RELECTURE < DU BLOC PRECEDEMMENT ECRIT SUR LE < VOLUME AMOVIBLE ??? RSR < ET 'JMP STNRET'... PAGE < < < P O S I T I O N N E M E N T S U R ' M E M T V ' < E T E N V O I D E L A D E M A N D E C O U R A N T E : < < < FONCTION : < CE SOUS-PROGRAMME RENDU < NECESSAIRE PAR LES MULTI-ACCES < DE 'HDLDKU' AUX DIVERSES 'CDA', < POSITIONNE SUR LA 'CDAI', ET < ENVOI LA DEMANDE COURANTE A < 'CHAND'... < < < ARGUMENT : < (W)=ADRESSE DE LA DEMANDE COURANTE. < < SP40: EQU $ PSR A,B < SAUVEGARDES... CALL #SISP CMS5 PSRSLO# < < PASSAGE SUR LA 'CDA' COURANTE DE < L'UTILISATEUR OU SUR 'CDAI' DANS < LES AUTRES CAS : < LA VAR+SGNCDA < (A)=NUMERO DE LA PREMIERE PAGE DE 32K, JAG SP401 < OK, BON NUMERO DE PAGE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE D'OU VIENT CE NUMERO < DE PAGE DE 32K COMPLETEMENT IDIOT !!! < XWOR%1: VAL -XSLO32 IF MEMTV0>XWOR%1>XSLO32-MEMTV0,,XEIF%, IF ATTENTION : LA 'CDAI' N'EST PAS A UNE FRONTIERE DE 32K !!! XEIF%: VAL ENDIF LAI MEMTV0>XWOR%1 < ET ON SE MET SUR LA 'CDAI'... SP401: EQU $ LR A,B ADRI ASLO32,B < (B)=NUMERO DE LA PREMIERE PAGE SUIVANT < CET ESPACE DE 64K, SLLD XSLO32 < ET CONVERSION EN DES FADR-ADRESSES... ADRI -Z,B < AINSI, (A,B) ENCADRE UN ESPACE MAXIMAL < DE 64K... WOE < (SLO,SLE) ENCADRE LA 'CDAI'... < < ENVOI DE LA DEMANDE COURANTE : < BSR ACHAND < ENVOI DE LA DEMANDE D'ADRESSE (W)... < < RESTAURATIONS ET SORTIE : < CALL #SISP CMS5 PLRSLO# PLR A,B RSR