< S I S C M S 5 13
PAGE
PAGE
<
<
< N O Y A U D E L A G E S T I O N
< D E S F I C H I E R S :
<
<
< PHILOSOPHIE :
< LE SGF POSSEDE UN NOYAU, DONT LA DESCRIPTION SUIT
< AU NIVEAU DU NOYAU DU SGF ('NSGF'), LE SYSTEME
< DISTINGUE LES FICHIERS A L'AIDE DE LEUR
< 'NOM-DIRECT'. LE 'NOM-DIRECT' EST UN NUMERO
< ASSOCIEE AU FICHIER, ET ALLOUE BIUNIVOQUEMENT
< AU MOMENT DE SA CREATION.
< UNE TABLE 'TEDF' OU TABLE DES ETATS FICHIERS
< EST LE COEUR DE CE SYSTEME. ELLE CONTIENT SUR 4 BITS
< ET DE MANIERE RESIDENTE, L'ETAT DE CHACUN DES FI-
< CHIERS. LA CAPACITE DE 'TEDF' DONNE LE NBRE MAXIMUM DE
< DE FICHIERS DU SYSTEME. IL EST A NOTER QUE
< TOUS LE FICHIERS DU SYSTEME, ETANT DONNE
< LEUR 'NOM-DIRECT' SONT ACCESSIBLES,MEME
< S'ILS SONT INEXISTANTS...
< LES ENTREES DANS 'TEDF' SONT DE 2 TYPES :
<
< - ENTREE PAR 'NOM-DIRECT' : ON
< DONNE LE 'NOM-DIRECT' DU FICHIER,
< OBTIENT EN RETOUR SON ETAT,
< - ENTREE PAR ETAT : ON DONNE
< UN ETAT RECHERCHE, ET UN MASQUE
< INDIQUANT QUELS SONT LES BITS
< D'ETAT SIGNIFICATIFS, ET ON
< OBTIENT EN RETOUR LE 'NOM-DIRECT'
< DU 1ER FICHIER COINCIDANT. IL
< EST A NOTER QU'AINSI ON PEUT OBTE-
< NIR LES ENTREES LIBRES DE TEDF, EN
< RECHERCHANT LES FICHIERS D'ETAT
< INEXISTANTS...
<
< UN FICHIER NON UTILISE EST DIT A L'ETAT 'CLOSE',
< UN FICHIER UTILISE EST DIT A L'ETAT 'OPEN'. UN FICHIER
< FICHIER INEXISTANT EST DONC 'CLOSE '. LORSQU'UN
< FICHIER EST 'OPEN' ON LUI ALLOUE (DANS LA MESURE
< DU POSSIBLE UNE DCT DE GESTION DE FICHIER, ET
< DONC UN NSPXXX. TOUS LES ACCES SE FERONT PAR
< L'INTERMEDIAIRE DE CE NSPXXX, ET DONC D'UN
< HANDLER DE GESTION DE FICHIER.
<
<
< NOTA :
< LES 'NOMS-DIRECTS' COMMEN-
< CENT A 0, MAIS CE PREMIER
< FICHIER N'EST PAS UTILISABLE...
<
<
PAGE
<
<
< C O M P T A G E O U
< R E C H E R C H E D ' U N F I C H I E R
< D ' E T A T D O N N E :
<
<
< FONCTION :
< SUIVANT LA VALEUR DU BIT ARGUMENT
< 'XXBKFE' DANS 'A', 'LOOKF', SOIT
< RECHERCHE UN FICHIER POSSEDANT L'ETAT
< DEMANDE, SUIVANT LE MASQUE DONNE,
< SOIT COMPTE TOUS LES FICHIERS Y
< REPONDANT.
<
<
< ARGUMENTS :
< (A)=MASQUE ET ETAT RECHERCHE :
< BIT0(XXBKFE)=RECHERCHE (0), OU
< COMPTAGE (1),
< BIT12-15=ETAT RECHERCHE,
< BIT8-11=MASQUE DES BITS SIGNIFICATIFS
< (LA RECHERCHE NE PORTENT QUE SUR
< LES BITS QUI SONT A 1 DANS LE
< MASQUE).
<
<
< RESULTAT :
< (A)=NOM DIRECT DU FICHIER COINCIDANT SI XXBKFE=0,
< =NOMBRE DE FICHIERS COINCIDANT SI XXBKFE=1.
<
<
< NOTA :
< DANS LE CAS OU AUCUNE
< COINCIDENCE N'EST TROUVEE
< LE DEMANDEUR EST BLOQUE
< JUSQU'A SATISFACTION...
<
<
USE L,DCT0
USE W,DEM0
<
<
< A T T E N T I O N :
< EN ENTRANT ICI, ON EST A
< L'ETAT 'RQST &ASXSGF', CE QUI
< SIGNIFIE QUE L'ON EST EN PHASE
< CRITIQUE 'SGF'...
<
<
LOOKF: EQU $
PSR B,X,Y
IF NBITMO=K-NBITEF,,XEIF%,
IF ATTENTION : 'SEPAR' NE VA PAS FONCTIONNER CORRECTEMENT !!!
XEIF%: VAL ENDIF
BSR ASEPAR
<
< ON A DONC AU RETOUR :
< (A)=MASQUE DE RECHERCHE,
< (B)=ETAT RECHERCHE.
<
ANDR A,B < ON TROUVE DANS B :
< (B)=(ETAT CHERCHE)&(MASQUE).
TBT XXBKFE+NBITEF < RECHERCHE OU COMPTAGE ???
RBT XXBKFE+NBITEF
LR A,Y < (Y)=MASQUE.
JC E178X < COMPTAGE...
<
<
< R E C H E R C H E D E L A P R E M I E R E
< C O I N C I D E N C E :
<
<
E178: EQU $
LXI LTEDF < POUR PARCOURS PAR MOT DE TEDF.
E175: EQU $
LA &ATEDF < ACCES A 1 MOT DE TEDF, C'EST-
< A-DIRE AUX ETAS DE 4 FICHIERS.
PSR X < SAVE INDEX-MOT DE TEDF.
LXI NBITMO/NBITEF < INDEX DES ETATS DU MOT COURANT
< DE TEDF.
E176: EQU $
PSR A < SAVE LE MOT COURANT DE TEDF.
ANDR Y,A < ON NE CONSERVE QUE L'ETAT COURANT,
< ET DANS L'ETAT COURANT, ON
< NE CONSERVE QUE LES BITS SIGNIFICATIFS
< -CATIFS.
CPR A,B < COMPARAISON DE L'ETAT RECHERCHE
< ET ETAT COURANT...
PLR A < RESTAURATION DU MOT COURANT
< DE TEDF.
JE E177 < OK, IL Y A COINCIDENCE.
<
< CAS OU IL N'Y A PAS COINCIDENCE :
<
SLRS NBITEF < ACCES A L'ETAT DE 4 BITS
< PRECEDENT DANS LE MOT COURANT.
JDX E176 < ETAT PRECEDENT DE 4 BITS.
PLR X < RESTAURATION DE L'INDEX MOT
< DE TEDF.
JDX E175 < ACCES A L'ENTREE MOT PRECEDENTE
< DE TEDF.
<
< CAS OU L'ON N'A TROUVE AUCUNE COINCIDENCE :
<
E178XX: EQU $
LAD &ASXSGF
BSR ARLSE
RQST &ASAST < LE CHERCHEUR SE MET EN ATTENTE
< D'UN EVENEMENT QUI MODIFIE L'ETAT
< D'UN FICHIER, ET POUVANT PEUT-ETRE
< ETRE AINSI LE SATISFAIRE...
RQST &ASXSGF <<<<PHASE CRITIQUE DU SGF.
JMP E178 < ET LA RECHERCHE EST REPARTIE...
<
< CAS OU ON A TROUVE AU MOINS UNE COINCIDENCE :
<
E177: EQU $
PLR A < L'INDEX DU MOT COURANT DE TEDF
< (ANCIEN X) EST RESTAURE DANS A.
SLLS NBITEF=K < ET MULTIPLICATION PAR 4...
ADR X,A < NUMERO DE L'ENTREE COINCIDENTE
< PAR RAPPORT A 1.
ADRI -NBITMO/NBITEF-IJIJDX,A < (A)='NOM-DIRECT' DU FICHIER.
< COINCIDANT.
<
< VALIDATION DU NOM DIRECT OBTENU :
<
JAE E178XX < ON VA REFUSER LE FICHIER '00...
< (IL ME SEMBLE QUE CELA VAUT MIEUX AINSI,
< A CAUSE DE TESTS ULTERIEURS...)
JAL E177XY < ERREUR...
CP NMFIL < VALIDATION SUPERIEURE,
JL E177XZ < OK, NOM DIRECT VALIDE...
E177XY: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< JE NE SAIS PAS, MAIS VACHEMENT ATTENTION,
< EN PARTICULIER RETOURNER SUR LA RECHERCHE
< PARAIT LA MEILLEURE SOLUTION...
<
JMP E178XX
E177XZ: EQU $
E177X: EQU $ < SORTIE...
PLR B,X,Y
<
<
< A T T E N T I O N :
< ETANT DONNE QU'ON EST DANS UNE PHASE CRITIQUE
< DU SGF (SEXSGF), PERSONNE NE PEUT MODIFIER L'ETAT
< DU FICHIER COINCIDANT ENTRE L'INSTANT OU LA
< COINCIDENCE EST DECOUVERTE, ET L'INSTANT
< DU 'RLSE &ASXSGF'...
<
<
RSR
<
<
< C O M P T A G E D E S C O I N C I D E N C E S :
<
<
E178X: EQU $
PSR W
EORR W,W < (W)=COMPTEUR DES COINCIDENCES...
XWOR%1: VAL '1234 < VALEUR ARBITRAIRE...
IF XWOR%1)XWOR%1-K,,XEIF%,
IF ATTENTION : LE 'EORR' MERDE !!!
XEIF%: VAL ENDIF
LXI LTEDF < (X)=LONGUEUR EN MOTS DE 'TEDF'.
E175X: EQU $
LA &ATEDF < (A)=MOT COURANT DE 'TEDF',
PSR X
LXI NBITMO/NBITEF < QUE L'ON VA DECOUPER EN TRANCHES...
E176X: EQU $
PSR A < SAUVEGARDE DU MOT COURANT...
ANDR Y,A < APPLICATION DU MASQUE SELECTIF,
CPR A,B < EST-CE L'ETAT RECHERCHE 'B' SUIVANT
< LE MASQUE 'Y' ???
JNE E176Y < NON...
ADRI I,W < COMPTAGE DES COINCIDENCES...
E176Y: EQU $
PLR A < RESTAURATION DU MOT COURANT DE 'TEDF',
SLRS NBITEF < QUE L'ON CONTINUE A TRONCONNER...
JDX E176X < AU TRONCON SUIVANT...
PLR X
JDX E175X < AU MOT SUIVANT DE 'TEDF'...
LR W,A < (A)=NOMBRE DE COINCIDENCES...
IF XEFX-K,,XEIF%,
IF ATTENTION : L'ETAT INITIAL EST INCOMPATIBLE
IF AVEC L'INITIALISATION DE 'TEDF' PAR UN 'DZS' !!!
XEIF%: VAL ENDIF
XR A,B < (A)=ETAT RECHERCHE,
CPI XEFX < EST-CE L'ETAT LIBRE ???
XR A,B
JNE E175XY < NON...
ADRI -Z,A < OUI, ON DECOMPTE LE FICHIER DE NOM
< INTERNE '00, CAR IL N'EST PLUS ACCES-
< SIBLE !!!
E175XY: EQU $
PLR W < RESTAURE W...
JMP E177X < VERS LA SORTIE...
PAGE
<
<
< M I S E A J O U R D E T E D F :
< E T D ' A C C E S A U N E T A T :
<
<
< ARGUMENTS :
< (X)='NOM-DIRECT' DU FICHIER DONT ON VEUT
< MODIFIER L'ETAT,
< (A)=MISE A JOUR DE L'ETAT, ET MASQUE INDIQUANT
< LES BITS DE L'ETAT SUR LESQUELS PORTENT LA MISE
< A JOUR :
< - BIT8-11=MASQUE DES BITS SIGNIFICATIFS,
< - BIT12-15=MISE A JOUR DE L'ETAT.
<
<
< RESULTAT :
< - SI MASQUE=K : (A)=ETAT DU FICHIER DE NOM-DIRECT X.
< (ET ON NE MODIFIE PAS TEDF)
<
<
< UTILISATION DU MASQUE :
< LA MISE A JOUR NE PORTE QUE
< SUR LES BITS QUI SONT A 1 DANS
< LE MASQUE...
<
<
< ETAT D'UN FICHIER :
< IL EST REPRESENTE SUR 4 BITS
< CONSECUTIFS :
< - BIT0=0 : FICHIER CLOSE,
< =1 : FICHIER OPEN,
< - BIT1=0 : FICHIER PARTAGEABLE,
< =1 : FICHIER NON PARTAGEABLE,
< - BIT2-3=00 : FICHIER INEXISTANT,
< =01 : FICHIER IN,
< =10 : FICHIER OUT,
< =11 : FICHIER DE TRAVAIL.
<
<
< A T T E N T I O N :
< ROLE DU PARTAGEABLE LORSQUE LA
< CONFIGURATION 0X00 EST RENCONTREE :
< 0000 : FICHIER N'AYANT ENCORE
< JAMAIS ETE OUVERT (INI-
< LISATION),
< 0100 : FICHIER OUVERT AU MOINS
< UNE FOIS.
< (VOIR LE DEBUT DU SYSTEME, OU
< FIGURE LA DEFINITION DES DIFFE-
< RENTS ETATS DES FICHIERS)
<
<
USE L,DCT0
USE W,DEM0
MTEDF: EQU $
PSR B,X,Y
PSR A
XR A,X
LBI K < NETTOYAGE DE B.
SCRS NBITEF=K
SCLD NBITEF=K
SLRS NBITEF=K
ADRI IJIJDX,A
<
< ON A DONC ICI :
< (A)=NUMERO DU MOT DANS TEDF / A 1,
< (B)=NUMERO DU GROUPE DE 4 BITS / A 0.
<
XR A,X < (A)=ETAT/MASQUE ; (X)=NUMERO-MOT/1.
LYI NBITMO/NBITEF-Z < POUR CALCUL DE L'AMPLITUDE
< DU DECALAGE DE L'ETAT ET DU MASQUE.
SBR B,Y < (Y)=3-(NUMERO DU GROUPE DE 4 BITS).
ADR Y,Y < (Y)=2*Y.
ADR Y,Y < (Y)=4*(3-(NUMERO DES 4 BITS)).
IF NBITEF-4,,XEIF%,
IF ATTENTION : LES 'ADR Y,Y' PRECEDENTS SONT MAUVAIS !!!
XEIF%: VAL ENDIF
BSR ASEPAR < DECONCATENATION DE L'ETAT DE
< MISE A JOUR ET DU MASQUE.
<
< ON A DONC AU RETOUR :
< - (A)=MASQUE INDIQUANT LES BITS A METTRE A JOUR,
< - (B)=ETAT A FORCER LA OU LE MASQUE VAUT 1.
<
<
< TEST DU MASQUE :
< - SI MASQUE#0 : IL S'AGIT DU MISE A JOUR DE TEDF,
< - SI MASQUE=K, ON RENVOIE AU DEMANDEUR L'ETAT X.
<
JAE E179 < IL S'AGIT DE LA 'LECTURE' D'UN ETAT :
<
< CAS D'UNE MISE A JOUR DE TEDF :
<
XR X,Y < (Y)=NUMERO DU MOT PAR RAPPORT A 1,
< (X)=AMPLITUDE DU DECALAGE DE POSI-
< TIONNEMENT DE LA MISE A JOUR ET
< DU MASQUE.
SLLD L,X < CADRAGE EN FACE DU GROUPE DE 4
< BITS A METTRE A JOUR.
EORI MMOT < (A)=MASQUE INDIQUANT LES BITS A
< CONSERVER DANS L'ENTREE MOT
< COURANTE DE TDEF.
XR X,Y < (X)=NUMERO DU MOT/1 DE TEDF.
AND &ATEDF < RECUPERATION DES BITS A
< CONSERVER.
ORR B,A < MISE A JOUR DU MOT.
STA &ATEDF < MISE A JOUR DE TEDF.
<
<
< L I B E R A T I O N D E S T A C H E S
< B L O Q U E E S D A N S L O O K F :
<
<
< A T T E N T I O N :
< CETTE BOUCLE DE DEBLOCAGE DOIT EVIDEMMENT
< SE TROUVER ENTRE 'RQST SEXSGF' ET 'RLSE SEXSGF',
< SINON LE SYSTEME RISQUE D'OSCILLER...
<
<
RTRY: EQU $
BSR ACANSP < (A)='NSP' DU DEMANDEUR :
CPI NSPRCF < QUI EST LA ???
JG RTRY3 < LES TACHES MOINS PRIORITAIRES QUE 'RCF'
< NE DEBLOQUENT PAS 'SAST' ; AINSI ON
< EVITE DES BOUCLAGES LORS DU 'SYSINI'
< ENTRE 'NSPINI' ET 'NSPRCF' QUE 'NSPINI'
< REVEILLE...
LA &ASAST < ACCES AU 'BETA' DE SAST.
JAE RTRY2 < SI 'BETA'=K, ON DEBLOQUE, CAR
< PAR UN MALHEUREUX HASARD
< ON PEUT SE TROUVER AVOIR
< INTERROMPU UNE TACHE DANS
< LOOKF ENTRE LE 'RLSE SEXSGF',
< ET LE 'RQST SAST'...
TBT XMBETA < TEST DU BIT DE SIGNE DE 'BETA'.
JC RTRY1 < DEBLOCAGE CAR 'BETA'<0.
RTRY3: EQU $
PLR A
E180: EQU $
PLR B,X,Y
RSR
<
< 'LECTURE' D'UN ETAT DANS TEDF :
<
E179: EQU $
PLR A < EN EFFET LE RESULTAT SERA DANS A.
LA &ATEDF < ACCES AU MOT COURANT DE TEDF (X).
XR X,Y < (X)=AMPLITUDE DU DECALAGE.
SLRS L,X < RECUPERATION DU GROUPE DE 4 BITS.
ANDI BIT>NBITEF-N < ON NE CONSERVE QUE LES 4 BITS.
JMP E180
<
< DEBLOCAGE DES TACHES EN ATTENTE DANS LOOKF, A CHAQUE FOIS
< QU'UN ETAT FICHIER EST MODIFIE :
< MASQUE#0...
<
RTRY1: EQU $
LAD &ASAST
BSR ARLSE
JMP RTRY
RTRY2: EQU $
LAD &ASAST
BSR ARLSE
JMP RTRY3 < INUTILE DE RETESTER SAST...
PAGE
<
<
< A C C E S A L A T A B L E D E S
< P A R T I T I O N S D ' U N F I C H I E R :
<
<
< ARGUMENTS :
< (X)=NOM-DIRECT DU FICHIER DONT ON DESIRE LA TP,
< (A)=ETAT DU FICHIER CORRESPONDANT A LA TP.
<
< RESULTAT :
< (W)=ADRESSE DE LA TP DU FICHIER EN MEMOIRE.
<
<
< A T T E N T I O N :
< ON EST EVIDEMMENT A L'INTERIEUR
< D'UNE PHASE CRITIQUE...
<
<
< FORMAT D'UNE TP :
< MOT0-111 : ADRESSE SECTEUR DES LISTES SEQUENTIELLES
< DES PARTITIONS DE CLEFS,
< MOT112-YM7 : LIBRES POUR LA DESCRIPTION DU FICHIER,
< EN PARTICULIER, LE DERNIER MOT CONTIENT LE NBRE D'UTIL-
< SATEURS SIMULTANES SUR CE FICHIER.
<
<
XXTP1:: MOT O < PREMIER MOT DE LA LISTE DES PARTITIONS.
XXTP2:: MOT 112 < PREMIER MOT LIBRE (PATCH,...).
XXTP1L:: VAL XXTP2-D < NUMERO DE LA PLUS GRANDE CLASSE...
XXTP3:: MOT YM7 < NOMBRE D'UTILISATEURS SIMULTANES.
<
<
USE W,DEM0
ACTP: EQU $
PSR B,X,Y
PSR A < SAVE A PART L'ETAT DU FICHIER.
LA AALBTP < (A)=@DEMANDE ALLOCATION 1 BUFFER.
LR A,W < (W)=@DEMANDE ALLOCATION POUR CHAND.
< ('W' EST INITIALISE AVEC LA
< DEMANDE D'ALLOCATION BUFFER, MEME
< S'IL N'Y A RIEN A ATTENDRE...)
IC WEIO < DE PLUS ON MET LE 'BETA' A 1,
< AFIN D'EVITER DES BLOCAGES
< DANS LE CAS OU IL N'Y AURAIT RIEN A
< RIEN A ATTENDRE.
STZ ARGDEM+ETADEM < A CAUSE DE 'CHANW', SI 'CHAND'
< N'A PAS LIEU...
LR X,B < (B)=NOM DIRECT.
LXI K < INITIALISATION DE L'INDEX
< DOUBLE-MOT DE TATP.
LY LTATP < ACCES A LA LONGUEUR CORANTE
< DE TATP.
CPZR Y < TEST DE TATP VIDE :
JE E249 < LA TABLE ASSOCIATIVE ETANT
< VIDE INUTILE DE CHERCHER.
<
< CAS OU IL Y A AU MOINS UNE ENTREE OCCUPEE DANS TATP :
<
ADR Y,Y < TATP ETANT UNE TABLE DE DOUBLE-MOTS
< LE DOUBLE DE SA LONGUEUR DONNE
< UNE BORNE SUPERIEURE DE SON
< INDEX X.
IF UTATP-2,,XEIF%,
IF ATTENTION : LE 'ADR Y,Y' EST MAUVAIS !!!
XEIF%: VAL ENDIF
E222: EQU $
<
< PARCOURS DE LA TABLE ASSOCIATIVE :
<
LA &ATATP0 < ACCES A UN NOM-DIRECT DANS A.
<
< NOTA :
< LE PARCOURS DE TATP SE FAIT DE SA TETE (X=K)
< VERS SA QUEUE (X=2*LTATP-2), C'EST-A-DIRE
< DANS L'ORDRE DES USAGES MOINDRES DES TP (CF. LRU).
<
CPR A,B < LE NOM-DIRECT TROUVE EST-IL
< CELUI CHERCHE...
JE E221 < OUI, TOUT EST BON...
<
< CE N'EST PAS LE NOM DIRECT, REGARDONS SI CETTE ENTREE
< DE LA TABLE ASSOCIATIVE CONTIENT EN FAIT UN BUFFER
< STOCKE A L'AVANCE :
<
JAL E229 < CE N'EST PAS LA PEINE D'ALLER PLUS
< LOIN (A=-1), LE NOM DIRECT CHERCHE
< N'EST APS DANS LA TABLE ASSOCIATIVE
< ON VA LE METTRE EN CORRESPONDANCE
< AVEC LE BUFFER D'AVANCE.
<
< NON RIEN DE TOUT CELA, PASSONS
< A L'ENTREE SUIVANTE DE 'TATP' :
<
ADRI UTATP,X < TATP EST UNE TABLE DE DOUBLE-MOTS.
CPR X,Y < EST-ON AU BOUT DE TATP...
JNE E222 < NON
<
< CAS OU LE NOM DIRECT CHERCHE N'EST PAS DANS TATP,
< ET OU IL N'Y A PAS DE BUFFER EN STOCK :
<
LA LTATP
CPI LMTATP < A-T'ON DEJA ALLOUE UN MAX DE BUFFER
JE E223 < OUI, IL FAUT UTILISER CE QU'ON
< A DEJA.
<
< CAS OU A ENCORE LE DROIT DE DEMANDER UN BUFFER :
<
E249: EQU $
<
< RAPPEL :
< 'X' POINTE LA PREMIERE
< ENTREE SUIVANT LA QUEUE DE
< 'TATP'.
<
<
< CALCUL DE L'ADRESSE OU METTRE
< L'EVENTUELLE ADRESSE DU BUFFER ALLOUE :
<
LA ATATPI < ACCES A L'ADRESSE DE TATP+1.
ADR X,A < ON AJOUTE L'INDEX DE LA 1ERE
< ENTREE LIBRE.
STA ARGDEM+AMDEM < MAJ DE LA DEMANDE.
<
< CHOIX ENTRE FAIRE ATTENDRE LE HANDLER OU NE PAS LE
< FAIRE ATTENDRE S'IL N'Y A RIEN DE LIBRE DANS LE
< POOL DES BUFFERS :
<
LA ARGDEM+OPDEM
CPZR Y < A-T'ON AU MOINS UNE ENTREE
< DANS TATP, SI OUI ON POURRA LA
< RECUPEREER SI RIEN N'EST LIBRE,
< SI NON, IL FAUT ATTENDRE UN BUFFER
< QU'IL Y EN AIT OU QU'IL N'Y EN AIT
< AIT PAS...
JNE E225 < OUI AU MOINS UN BUFFER, ON EST
< PAS OBLIGE DE FAIRE ATTENDRE
< LE HANDLER.
RBT WAITB < DANS LE CAS CONTRAIRE, ON LUI DEMN
< ON LUI DEMANDE D'ATTENDRE.
STA ARGDEM+OPDEM
E225: EQU $
BSR ACHAND < ENVOI DE LA DEMANDE DE BUFFER.
WAIT WEIO < ATTENTE DE LA REPONSE DE MALOC.
SBT WAITB < RETOUR A PRIORI A L'ETAT
< NE PAS FAIRE ATTENDRE LE HANDLER.
STA ARGDEM+OPDEM
<
< ANALYSE DES CONDITIONS DE RETOUR DE MALOC :
<
LA ARGDEM+ETADEM < (A)=NBRE DE BUFFERS ENCORE
< A ALLOUER : 0 OU 1.
STZ ARGDEM+ETADEM < A CAUSE DE 'CHANW' SI PAS 'CHAND'...
IC WEIO < REMISE A 1 DU 'BETA'.
JANE E223 < ET NON RIEN N'EST DISPONIBLE...
<
< CAS OU UN BUFFER AU MOINS ETAIT
< DISPONIBLE DANS LE POOL :
<
IC LTATP < ET UN BUFFER DE PLUS.
LA &ATATP1
SLRS NOCMO=K < L'ADRESSE OCTET DU BUFFER EST
< CONVERTIE EN UNE ADRESSE DE MOT.
STA &ATATP1
E224: EQU $
<
< ON A ICI :
< (X)=INDEX DE L'ENTREE ALLOUEE AU NOM DIRECT DANS TATP.
<
PLR A < RESTAURE ETAT-FICHIER.
PSR A < AND SAVE IT...
JAE E226 < DANS LE CAS OU LE FICHIER N'A
< JAMAIS ETE OUVERT (ETAT 0000),
< ON INITIALISE SA TP EN MEMOIRE.
< NOTA : LE BIT13 INDICATEUR DE
< LA PARTAGEABILITE, DISCRIMINE
< UN FICHIER QUI A DEJA ETE OUVERT
< AU MOINS UNE FOIS, D'UN QUI NE
< L'A JAMAIS ETE...
<
< CAS D'UN FICHIER DEJA EXISTANT: IL FAUT LIRE SA TP SUR DKF
<
LAD RTP
LR A,W < (W)=@DEMANDE DE LECTURE DE LA TP.
LR B,A < (A)=NOM DIRECT DU FICHIER.
DO XXXMOY
ADRI XXTP/XXXMOY,A < CALCUL DE L'ADRESSE ABSOLUE
< DE SA TP SUR DKF
STA ARGDEM+ASDEM < MISE EN ASDEM.
LA &ATATP1 < LA TABLE ASSOCIATIVE DONNE
< L'ADRESSE DU BUFFER.
SLLS NOCMO=K < ADRESSE OCTET
STA ARGDEM+AMDEM < MISE EN AMDEM.
BSR ACHAND < ENVOI DE LA DEMANDE DE LECTURE.
SLRS NOCMO=K
E227: EQU $
STB &ATATP0 < LE NOM DIRECT DU FICHIER ARGUMENT
< EST ENTRE DANS LA TABLE ASSOCIATIVE.
CPZR X < EST-CE LA 1ERE ENTREE DE TATP...
JE E244 < OUI, INUTILE DE FAIRE CIRCULER
< LA TABLE ASSOCIATIVE TATP.
<
< CIRCULATION LRU DE TATP :
<
E228: EQU $
<
< ON A ICI :
< (A)=ADRESSE DU BUFFER ALLOUE AU NOM DIRECT,
< (B)=NOM DIRECT,
< (X)=INDEX DE L'ENTREE ALLOUEE AU NOM DIRECT.
<
PSR A,B
LA ATATP < ACCES A L'ADRESSE DE TATP.
LR A,B
ADRI UTATP,B
<
< ON A ICI :
< (A)=ADRESSE ZONE EMETTRICE,
< (B)=ADRESSE ZONE RECEPTRICE,
< (X)=NBRE DE MOTS A TRANSFERER.
<
MOVE
<
< RAPPEL :
< ON A DONC ICI, APRES LE
< 'MOVE' : (X)=0...
<
PLR A,B < RESTAURE :
< (A)=ADRESSE DU BUFFER,
< (B)=NOM-DIRECT.
STB &ATATP0 < LE NOM DIRECT DU FICHIER
< ARGUMENT ENTRE EN TETE DE TATP.
STA &ATATP1 < DE MEME LE BUFFER QUI LUI EST
< ALLOUE.
E244: EQU $
<
< ATTENTE D'EVENTUELLES E/S :
<
BSR ACHANW < ATTENTE DE FIN...
LR A,W < RENVOI DU RESULTAT AU DEMANDEUR
< DANS W : (W)=@BUFFER ALLOUE A LA TP.
PLR A
PLR B,X,Y
RSR
<
< CAS OU LA TATP EST PLEINE, OU BIEN OU L'ALLOCATION
< D'UN BUFFER EST IMPOSSIBLE :
<
E223: EQU $
<
< RETOUR SUR LA QUEUE DE TATP, C'EST EN EFFET THEORIQUEMENT
< LE NOM DIRECT LE MOINS UTILISE PARMI CEUX QUI
< SONT EN MEMOIRE :
<
ADRI -UTATP,X < RETOUR SUR LA QUEU DE TATP.
LA &ATATP0 < ACCES AU NOM DIRECT DE LA QUEUE.
BSR ARWTP < ENVOI D'1NE DEMANDE D'ECRITURE
< SUR DKF
JMP E224 < ALLONS TESTER L'ETAT DU FICHIER..
<
< CAS OU L'ON A TROUVE UN BUFFER EN STOCK DANS TATP :
< (CE QUI SIGNIFIE QUE LE NOM-DIRECT CHERCHE N'Y EST PAS)
<
E229: EQU $ < CAS BUFFER EN STOCK :
DC NBATP < ET UN BUFFER EN STOCK DE MOINS.
JGE SYSRC1 < OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< FAIRE ATTENTION A L'ADRESSE DU BUFFER
< EN STOCK RECUPERE DANS 'B', ELLE DOIT
< ETRE MAUVAISE...
<
SYSRC1: EQU $
STB &ATATP0 < LE NOM DIRECT EST MIS EN CORRES-
< PONDANCE AVEC LE BUFFER EN STOCK.
JMP E224 < ALLONS ACCEDER A LA TP
< DU FICHIER, SI CELLE-CI EXISTE.
<
< CAS OU ON A TROUVE LE NOM-DIRECT DANS TATP :
<
E221: EQU $ < CAS OU ON ATROUVE LE NOMDIRECT.
LA &ATATP1 < ACCES A L'ADRESSE DU BUFFER ALLOUE.
CPZR X < EST-ON TOMBE SUR LA 1ERE ENTREE...
JE E244 < SI ON EST DEJA EN TETE INUTILE
< DE FAIRE UNE CIRCULATION DE TATP.
JMP E228 < ALLONS FAIRE CIRCULER TATP.
<
< CAS D'UN FICHIER ENCORE JAMAIS OUVERT :
<
E226: EQU $
<
< INITIALISATION DE LA TP DU FICHIER, EN MEMOIRE :
<
LA &ATATP1 < ACCES A L'ADRESSE DU BUFFER.
ADRI -IJIJDX,A < POUR INDEXATION / A 1.
SBT BITX < POSITIONNEMENT DE L'INDEX.
STA AINITP < GENERATION D'UN RELAI D'INITIALISATION
< NON REENTRANT.
LAI K < INIT. DE TP.
PSR X
LXI YY7 < UNE TP FAIT YY7 MOTS.
BSR ACHANW < ATTENTE EVENTUELLE D'UNE FIN
< ECRITURE DISQUE.
E230: EQU $
XR A,X
CPI XXTP1L+IJIJDX < EN EST-ON A LA LISTE DES CLEFS ???
XR A,X
JNE E230X < NON, (A)=K...
LA INFINI < OUI, ON FAIT A <-- (INFINI)...
IF XXTP1-K,,XEIF%,
IF ATTENTION : CETTE INITIALISATION EST IDIOTE !!!
XEIF%: VAL ENDIF
E230X: EQU $
STA &AINITP < INITIALISATION DE LA 'TP'...
JDX E230
IF XXTP3-XXTP2,,,XEIF%
IF ATTENTION : CE QUI PRECEDE EST IDIOT !!!
XEIF%: VAL ENDIF
PLR X
IC WEIO < EN EFFET UN WAIT DE LECTURE SUR
< DKF VA SUIVRE...
STZ ARGDEM+ETADEM < A CAUSE DE 'CHANW' SI PAS 'CHAND'...
LA &ATATP1 < RESTAURE : (A)=@BUFFER ALLOUE.
JMP E227
PAGE
<
<
< D E L E T E D ' U N N O M D I R E CT
< D A N S L A T A B L E A S S O C I A T I V E T A T P :
<
<
< ARGUMENT :
< (X)=NOM DIRECT DU FICHIER.
<
<
DETP: EQU $
PSR A,B,X,Y
LR X,A < (A)=NOM DIRECT.
LY LTATP < ACCES A LA LONGUEUR COURANTE DE
< LA TABLE ASSOCIATIVE.
CPZR Y < TATP EST-ELLE VIDE...
JE E240 < OUI, RIEN A FAIRE...
LXI K < INITIALISATION DE L'INDEX DE
< PARCOURS DE TATP.
ADR Y,Y < DOUBLEMENT DE LA LONGUEUR PUISQUE
< TATP EST EN DOUBLE-MOTS.
E242: EQU $
<
< RECHERCHE DU NOM DIRECT DANS TATP :
<
CP &ATATP0 < COMPARAISON AVEC LE NOM
< DIRECT COURANT DE TATP.
JE E241 < OK TROUVE.
ADRI UTATP,X < PASSONS A L'ENTREE SUIVANTE
< DANS TATP.
CPR X,Y
JNE E242
<
< CAS OU LE NOM DIRECT N'ETAIT PAS DANS TATP, RIEN A FAIRE :
<
E240: EQU $
PLR A,B,X,Y
RSR
<
< CAS OU ON TROUVE LE NOM DIRECT DANS LA TABLE ASSOCIATIVE :
<
E241: EQU $
<
< ON A ICI :
< (A)=NOM DIRECT DU FICHIER,
< (X)=INDEX DE L'ENTREE CONTENANT LE FICHIER DANS TATP.
<
BSR ARWTP < ECRITURE DE SA TP SUR DKF
PSR A < RAPPEL : RWTP RENVOIE DANS A
< L'ADRESSE DU BUFFER DONT ON
< DELETE L'ENTREE DANS TATP.
LA ATATP < ACCES A L'ADRESSE DE TATP.
ADR X,A < CALCUL DE L'ADRESSE DE L'ENTREE
< DU NOM DIRECT RELEASE.
SBR Y,X
NGR X,X < CALCULE DU NBRE DE MOTS DE L'ENTREE
< DU NOM DIRECT JUSQU'A LA QUEUE DE TATP.
ADRI -UTATP,X < CACUL DU NBRE DE MOTS A DEPLACER.
CPZR X
JE E248 < ON EST DEJA EN QUEUE DE TATP,
< INUTILE DE FAIRE LE MOVE.
LR A,B < (B)=@ZONE RECEPTRICE,
ADRI UTATP,A < (A)=@ZONE EMETTRICE.
XR A,X
SLRS UTATP=K < LE NBRE DE MOTS A DEPLACER
IF UTATP-2,,XEIF%,
IF ATTENTION : LE 'SLRS' PRECEDENT EST MAUVAIS !!!
XEIF%: VAL ENDIF
< EST DIVISE PAR 2.
XR A,X
<
< ON A ICI :
< (X)=NBRE DE DOUBLE-MOTS A DEPLACER,
< (A)=ADRESSE ZONE EMETTRICE,
< (B)=ADRESSE ZONE RECEPTRICE.
<
<
< A T T E N T I O N :
< UN 'MOVE' SE FAISANT PAR ADRESSE DECROISSANTE,
< ON NE PEUT FAIRE REMONTER TATP EN UN SEUL MOVE,
< IL FAUT EN FAIRE AUTANT QU'IL Y A DE DOUBLE-MOTS...
<
E247: EQU $
PSR X < SAVE NBRE DE DOUBLE-MOTS ENCORE
< A DEPLACER.
LXI UTATP < 1 DOUBLE-MOT=2 MOTS.
MOVE < DEPLACEMENT D'UN DOUBLE-MOT.
ADRI UTATP,A < DEPLACEMENT DE L'EMETTEUR DE
< 2 MOTS.
ADRI UTATP,B < DEPLACEMENT DU RECEPTEUR
< DE 2 MOTS.
PLR X < RESTAURE NBRE DE DOUBLE-MOTS
< ENCORE A DEPLACER.
JDX E247 < DOUBLE-MOT SUIVANT (EVENTUELLEMENT...)
E248: EQU $
PLR B < RESTAURE @BUFFER DONT L'ENTREE
< DANS TATP VIENT D'ETRE RELEASEE.
< (ANCIEN A).
LR Y,X
ADRI -UTATP,X < (X)=INDEX DE LA QUEUE DE TATP.
STB &ATATP1 < LE BUFFER DONT L'ENTRRE EST
< RELEASEE EST MIS EN QUEUE DE TATP
< EN VUE D'UN EVENTUEL STOCKAGE...
<
< TEST SUR LE STOCK DES BUFFERS :
<
LA NBATP
CPI NMBA < A-T'ON UNE RESERVE SUFFISANTE..
< DE BUFFERS...
JG E243 < OUI.
<
< LE BUFFER DONT L'ENTREE A ETE
< RELEASEE EST MIS EN RESERVE :
<
IC NBATP < ET UN BUFFER DE PLUS DANS LE STOCK.
LAI MFFFF
STA &ATATP0 < LE NOM DIRECT D'UN BUFFER EN
< STOCK EST 'FFFF.
BSR ACHANW < ATTENTE DE LA FIN D'ECRITURE DE TP.
JMP E240 < ET C'EST FINI.
<
< CAS OU LA RESERVE DE BUFFERS EST SUFFISANTE :
<
E243: EQU $
DC LTATP < ON DIMINUE LA LONGUEUR DE TATP.
LA &ATATP1
SLLS NOCMO=K < L'ADRESSE MOT DU BUFFER EST
< CONVERTIE EN UNE ADRESSE OCTET.
STA &ATATP1
<
< PREPARATION DU RELEASE DU BUFFER :
<
LA ATATPI < ACCES A L'ADRESSE DE TATP+1.
ADR X,A < ADRESSE DE LA ZONE OU SE TROUVE
< L'ADREESE DU BUFFER.
LB ARLBTP < (B)=@DEMANDE RELEASE 1 BUFFER.
BSR ACHANW < ATTENTE DE FIN D'ECRITURE DE TP
< SUR DKF AVANT DE RENDRE LE
< BUFFER
LR B,W < (W)=@DEMANDE RELEASE 1 BUFFER.
STA ARGDEM+AMDEM < MAJ DE LA DEAMNDE.
BSR ACHAND
BSR ACHANW < ATTENTE DE FIN DE RELEASE.
JMP E240 < ET C'EST FINI...
PAGE
<
<
< E C R I T U R E U N E T P S U R D K :
<
<
< ARGUMENT :
< (A)=NOM DIRECT DE LA TP A ECRIRE,
< (X)=INDEX DE L'ENTREE.
<
< RESULTAT :
< (A)=ADRESSE DU BUFFER QU'ON
< ENVOIE SUR DKF
<
<
RWTP: EQU $
DO XXXMOY
ADRI XXTP/XXXMOY,A < CALCUL DE L'ADRESSE ABSOLUE
< DU NOM DIRECT SUR DKF
STA WTPAS < MAJ DE LA DEMANDE.
LAD WTP
LR A,W < (W)=ARG DE CHAND.
LA &ATATP1 < ACCCES A L'ADRESSE DU BUFFER.
SLLS NOCMO=K
STA ARGDEM+AMDEM < MISE EN AMDEM.
BSR ACHAND
SLRS NOCMO=K
RSR
PAGE
<
<
< P H I L O S O P H I E D E S F I C H I E R S
< E T D E L E U R S C L E F S :
<
<
< DEFINITIONS :
< 1 - UN FICHIER EST CONSIDERE
< COMME UN ENSEMBLE ORDONNE DE
< CLEFS, LE CRITERE DE CE TRI
< ETANT L'ORDRE NUMERIQUE.
<
< 2 - LA CLEF, EST LE NOM DONNE
< A UN ENREGISTREMENT LOGIQUE.
<
< 3 - UN ENREGISTREMENT LOGIQUE,
< EST UNE SUITE SEQUENTIELLE DE
< Q-SECTEURS OU ENREGISTREMENTS
< PHYSIQUES.
<
<
< ACCES A L'INFORMATION :
< 1- ON DONNE UN NOM DIRECT DE FICHIER,
< 2- ON ACCEDE A LA TABLE DES PARTITIONS DES CLEFS
< DE CE FICHIER,
< 3- ON CHERCHE LA CLEF,
< 4- ON ACCEDE A L'INFORMATION.
<
<
< G E S T I O N D E S C L E F S :
< ON VA DISPOSER POUR CHAQUE FICHIER D'UN CATALOGUE DES
< DES CLEFS. L'IDEAL SERAIT QUE CE CATALOGUE
< SOIT ENTIEREMENT A ACCES DIRECT, MAIS LE NBRE ELEVE
< DES CLEFS POSSIBLES REND IMPOSSIBLE LA CONSTITUTION
< D'UNE FONCTION BIJECTIVE DE RECHERCHE. LA SOLUTION
< ADOPTEE EST DONC LA SUIVANTE : UNE CLEF ETANT DONNEE
< ON DETERMINERA UNE CLASSE D'EQUIVALENCE A LAQUELLE
< ELLE APPARTIENDRA ; DANS CETTE CLASSE LA RECHERCHE
< SERA SEQUENTIELLE.
< DE PLUS UNE ETUDE EXPERIMENTALE MONTRE
< QUE LES 1ERES COMBINAISONS NUMERIQUES SONT TOUJOUTS
< LES PLUS UTILISEES (1,2,3,...20...). PAR CONSEQUENT
< LES CLASSES D'EQUIVALENCE DOIVENT ETRE DETERMINEES
< EN TENANT COMPTE DE CETTE REMARQUE : LES CLASSES
< DE RANG FAIBLE CORRESPONDRONT A DES INTERVALLES
< NUMERIQUES FAIBLES.
< A CHAQUE FICHIER ON VA DONC ASSOCIER UNE TABLE
< DE YY7 MOTS (1 SECTEUR), DITES TABLE DES
< PARTITIONS TP. L'ENSEMBLE DE TOUTES LES TP
< S'APPELERA AUSSI TP. LA TABLE TP NE PEUT
< EVIDEMMENT ETRE RESIDENTE, PAR CONSEQUENT ELLE
< ELLE EST GEREE EN OVERLAY, LES TP LES PLUS
< UTILISEES AYANT LE PLUS DE CHANCE DE SE TROUVER
< RESIDENTE. LA GESTION DE CE RECOUVREMENT EST FAIT
< EN LRU, A L'AIDE D'UNE TABLE ASSOCIATIVE TATP,
< METTANT EN CORRESPONDANCE UN NOM DIRECT ET L'ADRESSE
< D'UN BUFFER ALLOUE A LA TP DE CE FICHIER.
< LA POLITIQUE DES BUFFERS EST LA SUIVANTE D
< DES BUFFERS SONT ALLOUES JUSQU'A CONCURENCE D'UN
< MAXIMUM (LMTATP), TANT QU'IL N'EST PAS ATTEINT
< ON DEMANDE L'ALLOCATION DE BUFFERS MAIS SANS ATTENTE
< S'ILS NE SONT PAS DISPONIBLES. LORS DU RELEASE D'UNE
< D'UNE ENTREE DE TATP ON STOCKE UN NBRE DE BUFFERS
< EN VUE D'UNE ALLOCATION ULTERIEURE.
<
<
< F O R M A T D ' U N E C L E F :
< UNE CLEF EST CONSTITUEE DE 2 MOTS :
< 1- SA PARTIE ENTIERE PEK,
< 2- SA PARTIE DECIMALE PDK.
<
PAGE
<
<
< F O R M A T D ' U N S E C T E U R D E L I S T E
< S E Q U E N T I E L L E D E C L E F S :
<
<
XXSFS:: MOT O < MOT CONTENANT L'ADRESSE DU SECTEUR
< SUIVANT DANS LA LISTE.
XXSFB:: MOT XXSFS+D < MOT CONTENANT L'ADRESSE DU SECTEUR
< PRECEDENT DANS LA LISTE.
XXSFD:: MOT XXSFB+D < MOT CONTENANT '0000 S'IL NE S'AGIT
< PAS D'UN SECTEUR DE DEBORDEMENT, ET
< UN DEPLACEMENT VERS LE MOT LE CHAINANT
< PAR DEBORDEMENT DANS UN SECTEUR QUI
< DEBORDE DANS LE CAS CONTRAIRE.
XXSFK:: MOT XXSFD+D < MOT CONTENANT LE NOMBRE DE DESCRIP-
< TEURS DE CLEFS OCCUPES.
XXSFL:: MOT XXSFK+D < LONGUEUR DE L'EN-TETE, ET ACCES AU
< PREMIER MOT LIBRE POUR LES DESCRIP-
< TEURS DES CLEFS.
PAGE
<
<
< F O R M A T D ' U N D E S C R I P T E U R
< D E C L E F :
<
<
XXKE1:: MOT O < MOT CONTENANT LES INDICATEURS
< SUIVANTS :
BXKE0:: VAL L < - BIT LIBRE(1) / OCCUPE(K),
BXKE1:: VAL BXKE0+I < - BIT DE DEBORDEMENT(1),
BXKE2:: VAL BXKE1+I < - DERNIER DESCRIPTEUR DE LA LISTE (1),
BXKE3:: VAL BXKE2+I < - EN FAIT BIT DU REGISTRE 'B' INDI-
< QUANT QU'UNE MISE A JOUR (1) DE
< 'AAD' EST NECESSAIRE,
MXKE1:: VAL M1FFF < - ZONE CONTENANT 'PEK'.
XWOR%1: VAL K
XWOR%1: VAL COSBT?BXKE0=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?BXKE1=FMASK(K?XWOR%1=FCINST
XWOR%1: VAL COSBT?BXKE2=FMASK(K?XWOR%1=FCINST
IF XWOR%1(MXKE1-K,,XEIF%,
IF ATTENTION : IL Y A UN RECOUVREMENT ENTRE LE
IF MASQUE 'MXKE1' ET LES BITS 'BXKE' !!!
XEIF%: VAL ENDIF
EMXKE1: EQU ZERO+MXKE1 < POUR REFERENCE EN AVANT...
XXKE2:: MOT XXKE1+D < MOT CONTENANT LES INDICATEURS
< SUIVANTS :
BXKE4:: VAL L < - BIT IN USE(1) / IDLE(K),
MXKE2:: VAL M7FFF < - ZONE CONTENANT 'PDK',
XWOR%1: VAL COSBT?BXKE4=FMASK(K=FCINST
IF XWOR%1(MXKE2-K,,XEIF%,
IF ATTENTION : 'BXKE4' RECOUVRE 'MXKE2' !!!
XEIF%: VAL ENDIF
BXKE5:: VAL NBITMO-B < - BIT DU MODE NEXT(1).
XXKE3:: MOT XXKE2+D < MOT CONTENANT L'ADRESSE DU PREMIER
< SECTEUR DE L'ENREGISTREMENT.
XXKE4:: MOT XXKE3+D < MOT CONTENANT L'ADRESSE DU DERNIER
< SECTEUR DE L'ENREGISTREMENT.
LXKE:: VAL XXKE4-XXKE1+Z < LONGUEUR D'UN DESCRIPTEUR.
PAGE
<
<
< C A L C U L D E L A C L A S S E
< D ' E Q U I V A L E N C E D ' U N E C L E F :
<
<
< RAPPEL PHILOSOPHIQUE :
ZY7:: VAL YY7 < NOMBRE DE CLASSE D'EQUIVALENCES.
ZM7:: VAL YM7
< IL EXISTE ZY7 CLASSES D'EQUIVALENCE POUR LES
< CLEFS : NUMEROTEES DE 0 A ZM7. L'APPARTENANCE D'UNE
< CLEF A UNE CLASSE EST FONCTION DE SA PARTIE
< ENTIERE PEK :. ON A :
< 1- CLASSES 0 A 63 :
< K EST DANS LA CLASSE N, SI :
< PEK=2*N OU PEK=2*N+1,
UKEY:: VAL 2 < POUR LE CALCUL DES CLASSES...
< 2- CLASSES 64 A ZM7 :
< K EST DANS LA CLASSE M, SI :
< SOIT J=M/8-1 (QUOTIENT ENTIER),
< ALORS :
< 2**J<=PEK<=2**(J+1)-1.
<
<
< REMARQUE :
< LES CLASSES D'EQUIVALENCE DE 0 A 63
< SONT D'AMPLITUDE FIXE (2), ALORS QUE CELLES DE
< 64 A ZM7 SONT D'AMPLITUDE VARIABLE ET CROISSANTES
< (=A LA PUISSANCE DE 2 CONTENUE DANS L'INTERVALLE,
< PAR EXEMPLE SI UNE CLASSE VA DE 1024 A 2047, ON
< VOIT QUE L'AMPLITUDE EST 1024).
<
<
< ARGUMENT :
< (X)=ADRESSE DU 1ER SECTEUR DE LA LISTE SEQUENTIELLE
< DE CETTE PARTITION, SI BIT1(A)=1,
< (W)=DE LA TP DU FICHIER CONSIDERE EN MEMOIRE,
< (A)=PEK DE LA CLEF DONT ON CHERCHE LA CLASSE.
< (VOIR LES BITS BXKE6, BXKE7 ET BXKE8)
< (B)='PDK',
< BIT15(B)=0 : MODE STANDARD,
< =1 : MODE NEXT.
<
<
< RESULTAT :
< (X)=
< SI BIT0(A)=1 : (X)=NUMERO DE LA PARTITION DE LA
< CLEF,
< SI BIT0(A)=K :
< SI BIT1(A)=K :
< SI BIT2(A)=K : (X)=ADRESSE 1ER SECTEUR DE LA
< LISTE SEQUENTIELLE DE LA
< CLEF, OU @ DU 1ER SECTEUR
< DE LA 1ERE LISTE
< SEQUENTIELLE NON VIDE
< SUIVANT CELLE DE
< LA CLEF SI CELLE-CI
< EST VIDE
< EN MODE NEXT.
< SI BIT2(A)=1 : (X)=ADRESSE 1ER SECTEUR DE LA
< LISTE SEQUENTIELLE DE
< LA 1ERE PARTITION NON
< VIDE SUIVANT LA
< PARTITION NON VIDE
< TROUVEE PRECEDEMMENT.
< (ON PEUT DONC AINSI LORS D'UN
< MEME APPEL DE PLSC, PARCOURIR LA
< EN PLUSIEURS COUPS...)
<
<
< NOTA :
< SI BIT1(A)=1, ALORS, 'X' N'EST PAS MODIFIE...
<
<
BXKE6:: VAL BXKE0 < DEMANDE DU NUMERO DE LA PARTITION
< DE LA CLEF (1).
BXKE7:: VAL BXKE1 < MISE A JOUR DE LA 'TP'.
BXKE8:: VAL BXKE2 < POUR SAVOIR OU COMMENCER...
<
<
CLAS: EQU $
PSR Y
PSR A
LR X,Y < SAVE X DANS Y, DANS LE CAS
< OU IL SERAIT ARGUMENT ET NON PAS
< RESULTAT.
AND C1FFF < RECUPERATION DE LA PEK.
CPI ZY7 < CHOIX ENTRE LES 2 GRANDS GROUPES
< DE CLASSES D'EQUIVALENCE.
JGE E250 < CAS PEK>ZM7.
<
< CAS OU PEK<ZY7 : LA CLEF APPARTIENT AU 1ER GROUPE D'AMPLITUDE
< FIXE (=2) :
<
SLRS UKEY=K < LE NUMERO DE CLASSE EST PEK
< DECALE D'1 A DROITE.
LR A,X < RENVOI DU RESULTAT.
E251: EQU $
<
< ON A ICI :
< (X)=NUMERO DE LA PARTITION.
<
PLR A < RESTAURE A ARGUMENT.
TBT BXKE6
JC E252 < OK, C'EST LE NUMERO DE LA
< PARTITION QUI ETAIT DEMANDE, ALORS
< ALORS X EST BON.
<
< CAS OU UN TRAVAIL EST DEMANDE SUR L'ADRESSE DU 1ER SECTEUR DE LA
< LISTE SEQUENTIELLE DE LA PARTITION :
<
PSR W
ADR X,W < (W)=ADRESSE EN MEMOIRE DE L'ENTREE
< DE TP CONTENANT OUY DEVANT
< CONTENIR L'ADRESSE DU 1ER SECTEUR
< DE LA LISTE SEQUENTIELLE DE LA
< PARTITION.
TBT BXKE7 < EST-CE UNE DEMANDE DE MAJ DE TP.
JNC E469 < NON..
<
< CAS D'UNE MISE A JOUR DE TP :
<
LR Y,X < RESTAURE X.
STX O,W < MAJ. TP.
JMP E254 < ET C'EST TOUT.
<
< CAS D'UNE DEMANDE D'ACCES A TP :
<
E469: EQU $
TBT BXKE8 < TEST POUR SAVOIR SI L'ON DOIT
< COMMENCER SUR L'ENTREE (W),
< OU SUR L'ENTREE SUIVANT CELLE
< SUR LAQUELLE ON S'ETAIT ARRETE
< AU PASSAGE PRECEDENT.
JNC E468 < ON COMMENCERA SUR L'ENTREE (W).
<
< CAS D'UN POINT DE REPRISE : ON REPREND
< LA OU ON VAIT ARRETE L'EXPLORATION DE TP
< LORS DU PASSAGE PRECEDENT DANS CLAS,
< POUR UN MEME APPEL DE PLSC :
<
LR A,W < SAVE A DANS W.
LA LIST0 < RECUPERATION DU W PRECEDENT.
JAG SYSRC2 < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< ETRE PRUDENT CAR L'ADRESSE (A) EST
< MAUVAISE...
<
SYSRC2: EQU $
ADRI P,A < PASSAGE A L'ENTREE SUIVANTE.
XR A,W < RESTAURE A, ET INITIALISATION
< DE W AVEC LE POINT DE REPRISE.
E468: EQU $
LXI XXTP2 < EN EFFET SEULES LES 112 PREMIERES
< ENTREES DE TP SONT UTILISEES
< PAR LES PARTITIONS.
CLSR W,X < W POINTE-T'IL AU DELA DE CES
< 112 ENTREES...
<
< RAPPEL :
< TOUT BUFFER EST A UNE
< FRONTIERE DE 'YY7' MOTS
< (UN SECTEUR) !!!
<
CPZR X
JE E470 < ET OUI, ON EST DONC AU BOUT
< DES 112 PARTITIONS.
LX O,W < ACCES A UNE ENTREE DE TP.
XR X,A
CP INFINI < LA LISTE SEQUENTIELLE ASSOCIEE
< A CETTE PARTITION EXISTE?
XR X,A
JNE E467 < OUI,C'EST BON, ON LA PREND
<
< CAS D'UNE LISTE SEQUENTIELLE INEXISTANTE :
<
TBT NBITMO+BXKE5 < EST-CE UNE DEMANDE D'ACCES EN
< MODE NEXT...
JNC E467 < NON C'EST LE MODE STANDARD,
< CETTE VALEUR DE X EST DONC OK.
<
< CAS DU MODE NEXT ALORS QU'ON A TROUVE UNE LISTE VIDE :
<
ADRI P,W < ACCES A LA PARTITION SUIVANTE.
JMP E468
<
< CAS OU ON A EPUISE TOUTES LES PARTITIONS :
<
E470: EQU $
LX INFINI < ON RENVOIE (X)=Q8000.
E467: EQU $
<
< SAUVEGARDE DE W EN VUE D'UNE
< EVENTUELLE REPRISE (CF. MODE NEXT) :
<
XR A,W
STA LIST0 < SAVE W COURANT DANS LIST0.
LR W,A < RESTAURE A.
E254: EQU $
PLR W
E252: EQU $
PLR Y
RSR
<
< CAS OU PEK>=ZY7 : LE CALCUL EST PLUS DELICAT...
<
E250: EQU $
PSR B
<
< REGARDONS D'ABORD ENTRE QUELLE ET
< QUELLE PUISSANCE DE 2 SE TROUVE 'PEK' :
<
DBT < RECHERCHE 1ER BIT A 1,
< SOIT N SON RANG.
LBI K
SBT NBITMO+L,X < CALCUL DANS B DE LA PUISSANCE
< DE 2 IMMEDIATEMENT INFERIEURE OU
< EGALE A PEK.
SBR B,A < (A)=DISTANCE DE CETTE PUISSANCE
< DE 2 A PEK.
XWOR%1: VAL CORBT?BXKE3=FMASK(K?MXKE1=FCINST
XWOR%1: VAL XWOR%1)MMOT=K
XWOR%1: VAL NBITMO-XWOR%1
ADRI XWOR%1-NBITMO,X < (X)=N-12.
NGR X,X < (X)=12-N.
SLRS L,X < CETTE DISTANCE EST DECALEE DE 12-N A DROI
< A DROITE.
XR A,X
ADRI XWOR%1,A < (A)=16-N.
SLLS ZY7/NBITMO=K < (A)=(16-N)*8.
ADR X,A < (A)=CLASSE CALCULEE,
JAGE E250XX < OK, ELLE EST POSITIVE...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< LE MIEUX EST DE FORCER LE MAX !!!
<
JMP E250XY
E250XX: EQU $
CPI XXTP1L < LA CLASSE CALCULEE EST-ELLE TROP GRANDE ?
JLE E250X < NON, ON LA CONSERVE...
E250XY: EQU $
LAI XXTP1L < OUI, ON LA MINORE...
E250X: EQU $
LR A,X < (X)=NUMERO DE LA PARTITION...
PLR B
JMP E251
PAGE
<
<
< P A R C O U R S D ' U N E L I S T E
< S E Q U E N T I E L L E D E C L E F S :
<
<
< ARGUMENTS :
< (A,B)=LA CLEF QUE L'ON RECHERCHE.
< BIT15(B)=0 : MODE NORMAL,
< =1 : MODE NEXT.
< (W)=ADRESSE DU BUFFER ALLOUE A LA TP DU FICHIER
< EN CAUSE,
< (Y)=
< BIT0-2=FONCTION DEMANDEE,
< 000=TEST D'EXISTENCE & OPEN
< SI BIT4=1,
< 011=DELETER,
< 100=INSERT.
< BIT3=K ; UTILISE PAR LA SUITE AVEC LA CONVENTION
< SUIVANTE :
< 0=BUFFER DE TP UTILISE,
< 1=BUFFER ALLOUE.
< BIT4 :
< 1- POUR TEST :
< 1.1- BIT4=K : SI LA CLEF EXISTE, RENVOIE
< DANS TEST1 & TEST2 LES MOTS2 & 3 DU DESCRIP
< TEUR DE CELLE-CI,
< 1.2- BIT4=1 : SI LA CLEF EXISTE :
< 1.2.1- SI ELLE EST A L'ETAT 'IDLE',
< ELLE PASSE A L'ETAT 'IN USE', ET
< IL Y A ECHANGE DE (TEST1,TEST2)
< AVEC (MOT2,MOT3) DU DESCRIPTEUR,
< 1.2.2- SI ELLE EST A L'ETAT 'IN USE',
< ON FAIT COMME SI BIT4 ETAIT A 0.
< 2- POUR DELETE :
< 2.1- BIT4=K : DELETE LE DESCRIPTEUR,
< 2.2- BIT4=1 : LE DESCRIPTEUR PASSE A L'ETAT
< 'IDLE', ET LES MOT2 & 3 DU DESCRIPTEUR
< SONT MIS A JOUR AVEC TEST1 & TEST2.
< BIT4-15=NOM DIRECT DU FICHIER,
<
<
MXPL1:: VAL ME000 < DEFINITION DE LA FONCTION ::
IF VALBAC-MXPL1,,XEIF%,
IF ATTENTION : 'CE000' NE PEUT ETRE
IF UTILISE POUR MODIFIER 'SRCOTO' !!!
XEIF%: VAL ENDIF
AMXPL1: EQU ZERO+MXPL1 < POUR UNE REFERENCE EN AVANT...
IF MXPL1-Q8000,XEIF%,,XEIF%
IF ATTENTION : 'CE000' EST UTILISE AUSSI PAR LE 'CCI',
IF ET IL DOIT ETRE DIFFERENT DE 'Q8000' !!!
XEIF%: VAL ENDIF
XXPL1:: VAL 0 < FONCTION DE TEST EXISTENCE ET OPEN,
XXPL2:: VAL 3 < FONCTION DE DELETE,
XWOR%1: VAL MXPL1=K < POUR CADRER LA FONCTION...
XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE...
XWOR%2: VAL MXPL1>XWOR%1 < CADRAGE DU MASQUE DE LA ZONE...
XWOR%3: VAL XXPL1?XXPL2)XWOR%2
XXPL3:: VAL XWOR%3 < FONCTION D'INSERT.
XWOR%1: VAL -XWOR%1 < POUR DECALAGE A GAUCHE...
XWOR%2: VAL XXPL3>XWOR%1=K < RECHERCHE DU BIT SIGNIFICATIF.
BXKE9:: VAL NBITMO-B-XWOR%2 < BIT DISCRIMINANT L'INSERT...
BXPL1:: VAL BXKE3 < BIT INDIQUANT SI UN BUFFER A ETE
< ALLOUE (A).
BXPL2:: VAL 4 < (VOIR LES COMMENTAIRES CI-DESSUS)
XXPL4:: VAL M0FFF < ZONE CONTENANT LE NOM DIRECT.
XWOR%5: VAL CORBT?BXPL2=FMASK(K?XXPL4=FCINST
BXXPL4: EQU ZERO+XWOR%5 < POUR UNE REFERENCE EN AVANT...
<
<
< RESULTATS :
<
< 1- CAS INSERT/DELETE :
< (Y)='0000 : OK,
< (Y)=Q8000 : CLEF EXISTE DEJA & INSERT DEMANDE,
< (Y)='6000 : LISTE VIDE & DELETE DEMANDE,
< (Y)='2000 : CLEF NON RENCONTREE APRES LE PARCOURS DE
< LA LISTE ENTIERE & DELETE DEMANDE,
< (Y)='4000 : CLEF INEXISTANTE, MAIS CERNEE & DELETE
< DEMANDE.
<
< 2- CAS TEST :
< (Y)=Q8000 : CLEF EXISTANTE A L'ETAT IDLE,
< (Y)='8001 : CLEF EXISTANTE A L'ETAT 'IN USE',
< (Y)='0000 : CLEF EXISTANTE ET PASSEE DE L'ETAT 'IDLE'
< A L'ETAT 'IN USE' LORS D'UN 'TEST-OPEN'.
< (C'EST-A-DIRE : BIT4(Y ARG)=1).
< (Y)='6000 : CLEF INEXISTANTE ET LISTE VIDE,
< OU FIN DE CATALOGUE DES CLEFS EN
< MODE NEXT,
< (Y)='2000 : CLEF INEXISTANTE ET LISTE ENTIERE EXPLOREE.
< (Y)='4000 : CLEF INEXISTANTE ET CLEF CERNEE,
XXPL5:: VAL K < OK,
XXPL6:: VAL ECCED
XXPL7:: VAL '8001
XXPL8:: VAL ECLV
EXXPL8: EQU ZERO+XXPL8 < POUR REFERENCE EN AVANT...
XXPL9:: VAL ECCI2
XXPL10:: VAL ECCI1
< 2.1- SI LA CLEF N'EXISTE PAS :
< TEST1=RESULTAT DE PARCOURS (CF. A),
< TEST2=ADRESSE SECTEUR (CF. X).
<
< 2.2- SI LA CLEF EXISTE & SI BIT4(Y)=K :
< TEST1=MOT2 DU DESCRIPTEUR DE CLEF,
< TEST2=MOT3 DU DESCRIPTEUR DE CLEF.
<
<
< P H I L O S O P H I E D E IN USE/IDLE :
<
<
< 1- A L'INSERTION D'UNE CLEF, ON CREE SON DESCRIPTEUR,
< ELLE PASSE AUTOMATIQUEMENT A L'ETAT 'IN USE' ; DE PLUS :
< (MOT2,MOT3)<--(TEST1,TEST2),
< (TEST1,TEST2)<--(Q8000,Q8000).
< 2- AU DELETE-CLOSE (BIT4(Y)=1) : LE DESCRIPTEUR PASSE A
< L'ETAT 'IDLE', ET :
< (MOT2,MOT3)<--(TEST1,TEST2).
< 3- AU TEST-OPEN (BIT4(Y)=1) : LE DESCRIPTEUR PASSE A L'ETAT
< 'IN USE', ET
< (MOT2,MOT3)<-->(TEST1,TEST2).
< 4- AU DELETE-DELETE (BIT4(Y)=K) : LE DESCRIPTEUR EST LIBERE
< LE BIT IN USE N'A ALORS PLUS AUCUN SENS.
<
<
< NOTA SUR LES ADRESSES-SECTEURS :
< LES ADRESSES SECTEURS UTILISEES SONT CELLES
< FOURNIES PAR L'ALLOCATEUR DISQUE.
<
<
USE W,DEM0
PLSC: EQU $ < PARCOURS LISTE SEQUENTIEL CLEF.
PSR X
STZ LIST0 < INITIALISATION DE LIST0, EN
< INDIQUANT QU'IL N'Y A PAS
< ENCORE DE POINT DE REPRISE.
BSR ACLAS < BIT0(A)=BIT1(A)=K : ACLAS RENVOIE
< DANS X L'ADRESSE DU 1ER SECTEUR
< DE LA LISTE SEQUENTIELLE A LA
< QUELLE APPARTIENT LA CLEF ARGUMENT.
< OU DE LA 1ERE LISTE NON VIDE
< EN MODE NEXT.
< A NOTER QUE TP EST EN MEMOIRE.
<
< TEST DE LISTE VIDE :
<
XR A,X
CP INFINI
XR A,X
JNE E260 < LA LISTE CONTIENT AU MOINS
< UN SECTEUR
<
< CAS OU LA LISTE SEQUENTIELLE EST VIDE :
<
CPZR Y < TEST DU BIT0 DE Y, POUR SAVOIR SI
< C'EST LA FONCTION INSERT QUI A ETE
< DEMANDEE.
JL E260 < C'EST LA FONCTION INSERT ; LA LISTE
< ETANT VIDE, LA CLEF N'EXISTE
< PAS, IL FAUT L'INSERER...
LY C6000 < RETOUR DU RESULTAT.
PLR X
JMP E301XR < ET C'EST TOUT, VERS LA SORTIE...
<
< CAS OU LA LISTE SEQUENTIELLE N'EST PAS VIDE :
< OU CAS OU LA LISTE SEQUENTIELLE EST VIDE MAIS INSERT DEMANDE.
<
E260: EQU $
STA PEK < SAVE PEK DE LA CLEF A CHERCHER.
STB PDK < SAVE PDK DE LA CLEF A CHERCHER.
PSR A,B,L
LR W,L < SAVE @TP DANS L.
PSR W < SAVE @TP DANS LA PILE.
LA INFINI
STA NEXPE < INITIALISATION : PAS DE BORNE
< SUPERIEURE COURANTE.
E475: EQU $
<
< DEMANDE D'ALLOCATION D'UN BUFFER : LA DEMANDE EST FAITE
< SANS ATTENTE ; S'IL N'Y A PAS DE BUFFERS DISPONIBLES DANS
< LE POOL ON UTILISERA LE BUFFER ALLOUE A TP (MALHEUREUSEMENT...) :
<
LA AALBTP
LR A,W < (W)=ARG DE CHAND.
LAD PLSCAM < ADRESSE DU MOT OU METTRE L'
< ADRESSE DU BUFFER ALLOUE.
STA ARGDEM+AMDEM < MAJ. DEMANDE ALLOC. BUFFER.
BSR ACHAND < ENVOI DE LA DEMANDE.
WAIT WEIO < ATTENTE DE LA REPONSE DE MALOC.
<
< ATTENTION, ON A ICI :
< (L)=ADRESSE DU BUFFER ALLOUE A LA 'TP'.
<
LA ARGDEM+ETADEM < TEST DU NBRE DE BUFFER ENCORE
< A ALLOER (K OU 1).
JAE Z1700 < OK, 1 BUFFER LIBRE A ETE ALLOUE.
<
< CAS OU IL N'Y A PAS DE BUFFER LIBRE, ON VA
< VOLER CELUI DE TP, ET POUR CELA, IL
< FAUT LA SAUVEGARDER AU PREALABLE...
<
PSR X < SAVE LE RESULTAT DE 'ACLAS'.
LR L,X < (X)=@MOT DU BUFFER DE LA TP.
ADR X,X
STX PLSCAM < (X)=@OCTET DU BUFFER DE LA TP.
LX C7FF
ANDR Y,X < (X)=NOM DIRECT DU FICHIER.
DO XXXMOY
ADRI XXTP/XXXMOY,X < (X)=@SECTEUR DE LA TP SUR DK1.
BSR AWSDK < ECRITURE DU SECTEUR (X),
< C'EST-A-DIRE LA TP, ET
< ATTENTE DE FIN D'E/S.
PLR X < RESTAURE LE RESULTAT DE 'ACLAS'.
JMP E261 < VERS L'UTILISATION DU BUFFER TP.
<
< CAS OU UN BUFFER LIBRE A ETE ALLOUE :
<
Z1700: EQU $
SBT BXPL1 < NOTA : (A)=K.
ORR A,Y < LE BIT3 DE Y EST MIS A 1 POUR
< MEMORISER QU'UN BUFFER A ETE
< ALLOUE.
LA PLSCAM < RECUPERATION DE L'ADRESSE OCTET
< DU BUFFER ALLOUE.
SLRS NOCMO=K < CONVERSION EN UNE ADRESSE-MOT.
LR A,L < QUE L'ON S'EMPRESSE DE METTRE DANS
< DANS L.
<
< ARRIVE ICI, ON A UN BUFFER DE TRAVAIL, ET :
< (L)=ADRESSE DU BUFFER DE TRAVAIL,
< BIT3(Y)=K : LE BUFFER DE TP VA ETRE UTILISE,
< BIT3(Y)=1 : UN BUFFER A ETE ALLOUE.
< (CF. LE BIT 'BXPL1')
<
E261: EQU $
LA C6000 < AU CAS OU LA LISTE SERAIT VIDE.
PSR Y < SAVE NATURE DU BUFFER DE
< TRAVAIL, FONCTION, ET,
< NOM DIRECT DU FICHIER.
LY INFINI
CPR X,Y < LA LISTE ETAIT-ELLE VIDE?
JE E280 < OUI, DONC PAS DE RECHERCHE
EORR W,W < INITIALISATION DE W A 0.
<
< LECTURE DU 1ER SECTEUR DE LA LISTE :
<
<
< ON A ICI :
< (X)=ADRESSE DU 1ER SECTEUR DE LA LISTE.
<
BSR ARSDK < LECTURE DU 1ER SECTEUR.
< (ET ATTENTE DE FIN DE LECTURE...)
LY PLSCAS < DANS Y ON TROUVERA L'ADRESSE DU
< SECTEUR COURANT, IL SERA REMIS
< A JOUR EN MEME TEMPS QUE AADD.
LBI K < INITIALISATION DE B DE TELLE
< SORTE QUE L'ON NE SAUTE PAS
< L'INITIALISATION DE AADD APRES
< E290.
E263: EQU $
LX INFINI < INDIQUONS AINSI QUE LE
< DESCRIPTEUR PRECEDENT N'ETAIT PAS
< UN DEXCRIPTEUR DE DEBORDEMENT
< PUIQU'IL N'EXISTE PAS.
E273: EQU $
LR W,A < SAUVEGARDE DE W AVANT REINITIALI
< SATION...
LR L,W < REINITIALISATION DE W AVEC L'ADR
< L'ADRESSE DU BUFFER (L).
E264: EQU $
<
< UTILISATION DU BIT 3 DU REGISTRE B PRECEDENT :
< ON TROUVE DANS B UN INDICATEUR PERMETTANT DE
< SAVOIR S'IL FAUT METTRE A JOUR AADD.
< L'INTERET DE CECI EST DANS LA RECUPERATION DE
< SUITE DE DESCRIPTEURS LIBRES PAR
< ADRESSE CROISSANTE, ET AINSI DIMINUER
< LE TAUX DE DEBORDEMENT. AINSI LORSQU'ON RENCONTRE
< UNE SUITE DE DESCRIPTEURS LIBRES AADD N'EST MIS A JOUR QU'A
< A JOUR QU'AVEC LE 1ER DE CEUX-CI, MEME S'IL
< Y A CHANGEMENT DE SECTEUR...
<
TBT NBITMO+BXKE3 < DOIT-ON METTRE A JOUR AADD...
JC E299 < NON, CELA SIGNIFIE QUE L'ON
< VIENT DE RENCONTERE AU MOINS
< 2 DESCRIPTEURS LIBRES CONSECUTIFS.
<
< CAS OU LA MISE A JOUR DE 'AADD' ET 'AADS' EST DEMANDEE :
<
STA AADD
STY AADS
E299: EQU $
ADRI LXKE,W < PASSONS AU DESCRIPTEUR SUIVANT,
< OU DANS LE CAS D'UN NOUVEAU SECTEUR
< DEPASSONS SON EN-TETE.
TBT NBITMO+BXKE0 < TEST POUR SAVOIR SI LE DESCRIPTEUR
< PRECEDENT ETAIT LIBRE...
LB XXKE1,W < (B)=MOT0 DU DESCRIPTEUR COURANT.
RBT NBITMO+BXKE3 < A PRIORI...
JNC E300 < NON, LE PRECEDENT ETAIT OCCUPE,
< PAR UNE CLEF OU UN DEBORDEMENT.
SBT NBITMO+BXKE3 < CAS OU LE PRECEDENT ETAIT LIBRE.
E300: EQU $
TBT NBITMO+BXKE0 < TEST POUR SAVOIR SI LE DESCRIPTEUR
< COURANT (W) EST LIBRE...
JC E272 < OUI, IL FAUT LE SAUTER...
<
< CAS D'UN DESCRIPTEUR OCCUPE :
<
RBT NBITMO+BXKE3 < LE DESCRIPTEUR COURANT EST OCCUPE.
LA XXKE1,W < (A)=MOT0 D'UN DESCRIPTEUR.
AND C1FFF < (A)='PEK' DU DESCRIPTEUR COURANT (W),
CP PEK < EST-CE LA 'PEK' DE LA CLEF CHERCHEE ???
JL E265 < NON
JNE E266 < TOUJOURS PAS, MAIS, ON LUI A TROUVE
< TROUVE UNE BORNE SUPERIEURE.
<
< LES PEK ETANT EGALES, TESTONS LES PDK :
<
LA XXKE2,W < ACCES A LA PDK DU DESCRIPTEUR COURANT
< COURANT.
RBT BXKE4 < RAZ BIT 'IN USE' A PRIORI.
CP PDK < ALORS...
JL E265 < ET BIEN NON...
JE E267 < OUI, ON A TROUVE LA CLEF CHERCHEE...
<
< CAS OU LA CLEF COURANTE LE LA CLEF CHERCHEE SONT DIFFERENTES :
<
E266: EQU $
<
< IL FAUT REVENIR SUR LE DESCRIPTEUR PRECEDENT :
<
LR X,A
CP INFINI < ETAIT-CE UN DESCRIPTEUR DE
< DEBORDEMENT?
JE AE268 < NON (X=Q8000), DONC LA CLE
< CHERCHEE N'EXISTE PAS
<
< CAS OU LE DESCRIPTEUR PRECEDENT ETAIT
< UN DESCRIPTEUR DE DEBORDEMENT :
<
<
< ON A ICI :
< (X)=ADRESSE DU SECTEUR DE DEBORDEMENT.
<
LA PDK
TBT BXKE5 < TEST DU MODE NEXT.
JNC E490 < NON, C'EST LE MODE STANDARD.
<
< CAS DU MODE NEXT :
<
LA XXKE1,W
AND C1FFF
STA NEXPE < MEMORISATION DE LA PEK DE LA
< BORNE SUPERIEURE COURANTE DE
< LA CLEF CHERCHEE.
LA XXKE2,W
STA NEXPD < MEMORISATION DE LA PDK DE LA
< BORNE SUPERIEURE COURANTE DE LA
< CLEF CHERCHEE.
LA PLSCAS
STA NEXAS < MEMORISATION DU SECTEUR DE LA
< BORNE SUPERIEURE COURANTE.
LR W,A
STA NEXW < MEMORISATION DE L'ADRESSE DU
< DESCRIPTEUR DE LA BORNE
< SUPERIURE COURANTE.
E490: EQU $
BSR ARSDK < LECTURE DU SECTEUR DE DEBORDE-
< MENT ET ATTENTE.
LX INFINI < RAZ SECTEUR DE DEBORDEMENT.
LR L,W < REINITIALISATION DE W AVEC
< L'ADRESSE DU BUFFER.
JMP E299 < ET C'EST REPARTI, EN SAUTANT LA
< MISE A JOUR DE AADD ET AADS.
E301XR: JMP E301XX < RELAI VERS LA SORTIE...
<
< CAS OU ON A TROUVE LA CLEF : MAIS CE N'EST PEUT-ETRE
< QU'UN DESCRIPTEUR DE DEBORDEMENT :
<
E267: EQU $
TBT NBITMO+BXKE1 < TEST DE L'INDICATEUR DE
< DEBORDEMENT.
JNC E270 < NON C'EST BON, ON A TROUVE
< LA CLEF, UN VRAI MIRACLE.
E495: EQU $
<
< CAS OU L'ON CROYAIT AVOIR TROUVE LA CLEF, MAIS
< EN FAIT CE N'EST QU'UN DESCRIPTEUR DE DEBORDEMENT
< QUI CONTIENT LA CLEF ; LA CLEF CHERCHEE N'EST PEUT-ETRE
< PLUS DANS LE CATALOGUE, ELLE A PEUT ETRE
< ETE DELETEEE, BIEN QU'ON LA RENCONTER ENCORE :
<
LY PLSCAS < MEMORISATION DE L'ADRESSE DU SECTEUR
< LU EN DERNIER.
LX XXKE3,W < ACCES A L'ADRESSE DU SECTEUR DE D
< DEBORDEMENT.
BSR ARSDK < LECTURE DU SECTEUR DE
< DEBORDEMENT ET ATTENTE.
JMP E263 < ET C'EST REPARTI AVEC CE NOUVEAU SECTEUR
< SECTEUR.
<
< CAS OU L'ON N'A PAS ENCORE REUSSI A CERNER LA CLEF :
<
E265: EQU $
LY PLSCAS < MEMORISATION DE L'ADRESSE DU
< DERNIER SECTEUR LU.
LX INFINI < A PRIORI : PAS DEBORDEMENT...
TBT NBITMO+BXKE1 < EST-CE UN DESCRIPTEUR DE
< DEBORDEMENT...
JNC E272 < NON X EST BON.
<
< CAS OU LE DESCRIPTEUR COURANT (W) EST UN UN DESCRIPTEUR DE DEBORDEMENT :
<
LX XXKE3,W < RECUPERATION DE L'ADRESSE DE SON
< SECTEUR DE DEBORDEMENT POUR
< UN EVENTUEL USAGE ULTERIEUR.
E272: EQU $
TBT NBITMO+BXKE2 < EST-CE LE DERNIER DESCRIPTEUR
< DE LA LISTE SEQUENTILLE (PRINCIPA
< PALE OU DE DEBORDEMENT)..
JNC E298 < NON, IL Y A ENCORE DES CLEFS DANS
< LA LISTE COURANTE.
<
< CAS OU L'ON A RENCONTRE LE DERNIER DESCRIPTEUR D'UNE
< LISTE (PRINCIPALE OU DE DEBORDEMENT ) :
<
XR X,A
CP INFINI < LE DERNIER DESCRIPTEUR (W)
< N'ETAIT-IL PAS UN DESCRIPTEUR
< DE DEBORDEMENT?
XR X,A
JE E271 < NON, CELA SIGNIFIE QUE LA CLEF
< CHERCHEE N'EXISTE PAS
<
< CAS OU LE DERNIER DESCRIPTEUR D'UNE LISTE EST EN DEBORDEMENT :
<
BSR ARSDK < LECTURE DU SECTEUR D'ADRESSE (X).
JMP E263 < ET C'EST REPARTI AVEC LE
< SECTEUR DE DEBORDEMENT.
<
< CAS OU IL Y A ENCORE DES CLEFS DANS LA LISTE :
<
E298: EQU $
<
< EST-ON AU BOUT DU SECTEUR :
<
LR W,A
SBR L,A < CALCUL DE L'ADRESSE RELATIVE
< DANS LE SECTEUR.
CPI YY7-XXSFL
LR W,A < SAVE ADRESSE DU DESCRIPTEUR
< COURANT DANS A.
JL E264 < NON, ON N'EST PAS AU BOUT DU SECTEUR.
< SECTEUR.
<
< CAS OU A ON A EXPLORE TOUT UN SECTEUR, PASSONS AU SUIVANT
< PAR CHAINAGE :
<
PSR X < SAVE X..
LX XXSFS,L < LE CHAINAGE AU SECTEUR SUIVANT EST LE
< EST LE 1ER MOT DU SECTEUR.
BSR ARSDK < LECTURE DU SECTEUR SUIVANT
< ET ATTENTE.
PLR X
JMP E273 < ET C'EST REPARTI SUR LE SECTEUR SUIVANT
< SUIVANT.
<
< CAS OU ON A TROUVE LA CLEF DANS LA LISTE :
< OU SA SUIVANTE EN MODE NEXT :
<
E270: EQU $
LR W,A < RECUPERATION DE L'ADRESSE DE
< SON DESCRIPTEUR.
SLRS LXKE=K < ET CONVERSION EN UNE ADRESSE DE
< QUADRUPLES MOTS.
IF LXKE-4,,XEIF%,
IF ATTENTION : IL NE S'AGIT PAS DE QUADRUPLE-MOTS !!!
XEIF%: VAL ENDIF
XWOR%1: VAL XXPL6=K < RECUPERATION BIT SIGINFICATIF...
SBT NBITMO-B-XWOR%1 < POSITIONNEMENT BIT 0.
E282: EQU $
LX PLSCAS < RECUPERATION DE L'ADRESSE DE
< SON SECTEUR DANS LE BLOC DE DEMAN
< DEMANDE SUR DK.
E280: EQU $
<
<
< R E S U L T A T D E P A R C O U R S D E L A
< L I S T E S E Q U E N T I E L L E :
<
<
< ON A ICI :
< (W)=ADRESSE D'UN DESCRIPTEUR DE CLEF.
<
< 1- LA CLEF EXISTE :
< (X)=ADRESSE DU SECTEUR DE LA LISTE QUI
< QUI LA CONTIENT,
< (A)=ADRESSE DE QUADRUPLE-MOT DE
< SON DESCRIPTEUR,
< BIT0 DE A=1.
< 2- LA CLEF N'EXISTE PAS ET LA LISTE EST VIDE :
< (X)=Q8000,
< (A)='6000 (BIT1=BIT2=1).
< 3- LA CLEF N'EXISTE PAS ET ON A PARCOURU TOUTE
< LA LISTE :
< (X)=ADRESSE DU DERNIER SECTEUR EXPLORE,
< (A)=ADRESSE DE QUADRUPLE-MOT DU
< DERNIER DESCRIPTEUR DE LA LISTE.
< BIT2 DE A=1,
< 4- LA CLEF N'EXISTE PAS ET ON A REUSSI A LA
< CERNER :
< (X)=ADRESSE DU SECTEUR DU DESCRIPTEUR
< PRECEDENT,
< (A)=ADRESSE DE QUADRUPLE-MOT DU
< DESCRIPTEUR PRECEDENT,
< BIT1 DE A=1.
<
<
< RAPPEL :
< LES DESCRIPTEURS SONT A
< DES FRONTIERES DE QUADRU-
< PLES-MOTS.
<
<
PLR B < RESTAURE 'Y' ARGUMENT DANS 'B'...
<
<
< E X E C U T I O N D E L A F O N C T I O N :
<
<
LY CE000
ANDR B,Y < TEST SUR LA FONCTION DEMANDEE.
CPZR Y < EST-CE UN 'TEST'.
JE E303 < C'EST UN TEST, PRESQUE RIEN
< A FAIRE.
<
< CAS OU LA FONCTION DEMANDEE EST INSERT OU DELETE :
<
ANDR A,Y < TEST SUR LE RESULTAT D'EXISTENCE.
CPZR Y
JNE E305 < LE RESULTAT DE PARCOURS ET LA
< LA FONCTION DEMANDEE SONT
< INCOMPATIBLES.
<
< CAS OU L'EXECUTION EST POSSIBLE :
<
PSR A,B
<
< ON A ICI :
< (A)=RESULTAT DE PARCOURS DE LISTE SEQUENTIELLE,
< (X)=ADRESSE SECTEUR.
< (X=Q8000 SI LA LISTE EST VIDE).
< (B)=ARGUMENT DE L'APPEL DE PLSC.
<
TBT NBITMO+BXKE9 < DISCRIMINATION INSERT/DELETE.
JC E304 < INSERT DEMANDE.
BR ADELET < DELETE DEMANDEE.
E304: EQU $
BR AINSER < INSERT DEMANDE.
<
< RETOUR COMMUN D'INSERT & DELETE :
<
<
< ON A ICI :
< (X)=ADRESSE DU SECTEUR D'INSERTION DE
< LA CLEF DANS LE CAS D'UN 'INSERT'.
<
E302: EQU $
LYI XXPL5 < CODE EXECUTION OK.
PLR A,B
E305: EQU $
<
< ARRIVE ICI, 'Y' EST PRET POUR LE RETOUR...
<
TBT NBITMO+BXPL1 < TEST DU BIT3 DE B (Y ARGUMENT).
JC E281 < CAS OU UN BUFFER AVAIT ETE ALLOUE,
< ALLONS LE LIBERER.
<
< CAS OU ON A UTILISE LE BUFFER DE TP, IL FAUT RESTAURER TP :
<
PSR X < SAVE @SECTEUR SI INSERT.
LX C7FF
ANDR B,X < RECUPERATION DU NOM DIRECT
< PAR RAZ DES BITS 0,1,2,3 DANS B (
< (Y ARGUMENT).
DO XXXMOY
ADRI XXTP/XXXMOY,X < CONVERSION EN UNE ADRESSE
< SECTEUR SUR LE DISQUE 0 SOIT DK1.
BSR ARSDK < LECTURE DE LA TP.
PLR X
E294: EQU $
PLR W < RESTAURE (W)=@TP.
<
< MISE A JOUR EVENTUELLE DE TP :
<
TBT NBITMO+BXKE9 < EST-CE UNE FONCTION INSERT...
< CE TEST EST RENDU OBLIGATOIRE PAR
< L'INTRODUCTION DU MODE NEXT.
JNC E301 < NON, DELETE OU TEST.
CP C6000 < C'EST UN INSERT : LA LISTE
< ETAIT-ELLE VIDE...
JNE E301 < NON...
<
< CAS OU LA TP DOIT ETRE MISE A JOUR :
<
LA PEK < RESTAURATION DANS A DE LA PARTIE
< ENTIERE DE LA CLEF ARGUMENT.
SBT BXKE7 < BIT0(A)=K ; BIT1(A)=1.
BSR ACLAS < ON MET A JOUR AVEC LE CONTENU
< DE X QUI DONNE LE 1ER SECTEUR DE
< LA LISTE QUI ETAIT VIDE A
< L'ENTREE.
E301: EQU $
PLR A,B,L
PLR X
E301XX: EQU $ < SORTIE...
RSR
<
< CAS OU ON A EU UN BUFFER ALLOUE : ON LE REND :
<
E281: EQU $
PSR A < SAVE RESULTATS DE PARCOURS.
LA ARLBTP
LR A,W < ARGUMENT DE CHAND.
LAD PLSCAM < ADRESSE DU MOT OU SE TROUVE
< L'ADRESSE DU BUFFER A RELESAER.
STA ARGDEM+AMDEM < MAJ. DEMANDE RELEASE BUFFER.
BSR ACHAND
PLR A
BSR ACHANW < ATTENTE DE FIN DE RELEASE.
JMP E294 < ET C'EST FINI...
<
< CAS OU AU BOUT D'UNE EXPLORATION SEQUENTIELLE ON N'A PAS TROUVE
< LA CLEF :
<
E271: EQU $
LB PDK
TBT NBITMO+BXKE5 < TEST DU MODE NEXT/STANDARD.
JNC E471 < C'EST LE MODE STANDARD : LA
< CLEF N'EXISTE PAS, OK GO BACK.
<
< CAS DU MODE NEXT :
<
LA NEXPE < TEST DE L'EVENTUELLE BORNE
< SUPERIEURE DE LA CLEF ARG.
JAL E472 < C'EST COMPLET, CETTE BORNE
< SUPERIEURE N'EXISTE PAS...
<
< CAS OU ON A TROUVE UNE BORNE SUPERIEURE : C'EST LA CLEF SUIVANTE
< CHERCHEE :
< (A MOINS QUE CETTE BORNE NE SOIT EN DEBORDEMENT...)
<
LX NEXW
LR X,W < (W)=@DESCRIPTEUR DE LA CLEF
< SUIVANTE.
LX NEXAS < (X)=@SECTEUR DU DESCRIPTEUR DE
< LA CLEF SUIVANTE.
BSR ARSDK < RELECTURE DU SECTEUR (X) ; A
< NOTER QUE CE NE PEUT ETRE
< LE SECTEUR COURANT.
LB XXKE1,W < RECUPERATION DU MOT0 DE LA
< BORNE SUPERIEURE.
JMP E473
<
< CAS OU L'ON N'A PAS TROUVE DE BORNE SUPERIEURE : CELA
< SIGNIFIE SOIT QUE CETTE BORNE N'EXISTE REELLEMENT
< PAS (ON EST AU BOUT DU CATALOGUE DE CLEFS), OU QUE
< CELLE-CI APPARTIENT A UNE AUTRE PARTITION :
<
E472: EQU $
PLR A < RESTAURE LA FONCTION ARGUMENT
< (Y) DANS A.
LR A,Y < RESTAURE (Y)=FONCTION ARGUMENT.
TBT BXPL1 < TEST SUR LA NATURE DU BUFFER
< DE TRAVAIL.
JC E474 < OK, ON AVAIT UN BUFFER ALLOUE,
< ON LE GARDE.
<
< CAS OU ON AVAIT UTILISE LE BUFFER DE TP, IL
< FAUT RESTAURER TP AVANT DE RENTRER DANS ACLAS :
<
LX C7FF
ANDR Y,X < (X)=NOM-DIRECT DU FICHIER.
DO XXXMOY
ADRI XXTP/XXXMOY,X < CONVERSION EN UNE ADRESSE
< SECTEUR SUR LE DISQUE 0.
BSR ARSDK < RE-LECTURE DE TP.
E474: EQU $
< ARRIVE ICI, TP EST EN MEMOIRE :
LA PEK
SBT BXKE8 < DEMANDE D'ACCES A LA CLASSE
< SUIVANTE (OU PLUTOT A LA 1ERE
< NON VIDE SI ELLE EXISTE...)
<
< ON A ICI :
< (A)=PEK AVEC DEMANDE D'ACCES A LA CLASSE SUIVANTE,
< (B)=PDK (BIT15(B)=1 : MODE NEXT).
<
PLR W < RESTAURE : (W)=@TP.
BSR ACLAS < ACCES A LA CLASSE SUIVANTE.
PSR W < SAVE @TP.
LR Y,A
TBT BXPL1 < TEST DANS LA FONCTION DE LA
< NATURE DU BUFFER DE TRAVAIL :
JNC E491 < ON AVAIT UTILISE LE BUFFER DE TP.
BR AE261 < UN BUFFER AVAIT ETE ALLOUE,
< GARDONS-LE
AE268: JMP E268 < RELAI...
E491: EQU $
< ON A TOUJOURS : (L)=@BUFFER.
BR AE475 < DANS LE CAS OU IL N'Y AVAIT PAS DE
< DE BUFFER ALLOUE, ON PEUT
< ESSAYER D'EN OBTENIR UN
< DE NOUVEAU...
<
< CAS DU MODE STANDARD :
<
E471: EQU $
LR W,A < RECUPERATION DE L'ADRESSE DU
< DERNIER DESCRIPTEUR,
SLRS LXKE=K < QUE L'ON CONVERTIT EN UNE ADRESSE
< DE QUADRUPLE-MOT.
XWOR%1: VAL XXPL10=K < POUR AVOIR LE BIT SIGNIFICATIF...
SBT NBITMO-B-XWOR%1
JMP E282
<
< CAS OU LA CLEF N'EXISTE PAS, MAIS OU ON A REUSSI A LA CERNER :
<
E268: EQU $
LA PDK
TBT BXKE5 < TEST DU MODE NEXT.
JNC E481 < NON, C'EST LE MODE STANDARD.
E473: EQU $
<
< CAS OU LE MODE DEMANDE EST NEXT :
<
TBT NBITMO+BXKE1 < LE DESCRIPTEUR (W) EST-IL
< EN DEBORDEMENT...
JC E495 < OUI, IL FAUT DONC PARCOURIR
< LA LISTE DE DEBORDEMENT.
<
< CAS OU LE DESCRIPTEUR (W) N'EST PAS EN DEBORDEMENT :
< ON VA METTRE DANS (PEK,PDK), LA CLEF
< SUIVANTE DE LA CLEF ARGUMENT, EN VUE
< DE SON UTILISATION PAR LES 'OPEN EN-
< REGISTREMENT' :
<
<
< RAPPEL :
< (W)=POINTE LA CLEF SUIVANTE.
<
LA C1FFF
AND XXKE1,W
STA PEK < PEK DE LA CLEF SUIVANTE
LA XXKE2,W
STA PDK < PDK DE LA CLEF SUIVANTE.
JMP E270 < ET ON FAIT COMME SI ON AVAIT
< TROUVE LA CLEF...
<
< CAS DU MODE STANDARD :
<
E481: EQU $
LA AADD < RECUPERATION DE L'ADRESSE
< DE L'AVANT DERNIER DESCRIPTEUR.
SLRS LXKE=K < CONVERSION EN UNE ADRESSE QUADRUPLE
< MOT.
XWOR%1: VAL XXPL9=K < RECHERCHE DU BIT SIGNIFICATIF...
SBT NBITMO-B-XWOR%1
LX AADS < RECUPERATION DE L'ADRESSE DU
< SECTEUR CONTENANT LE DESCRIPTEUR
< D'ADRESSE AADD.
JMP E280
<
<
< E X E C U T I O N D ' U N E F O N C T I O N D E T E S T :
<
<
E303: EQU $
<
< TEST D'EXISTENCE DE LA CLEF :
<
JAL E370 < LA CLEF EXISTE.
< (BIT0(A)=1).
<
< CAS D'UNE FONCTION DE TEST OU LA CLEF N'EXISTE PAS :
<
STA TEST1 < RESULTAT DE PARCOURS.
STX TEST2 < ADRESSE SECTEUR,
< AINSI, LE DEMANDEUR PEUT LES RECUPERER
< AU RETOUR DANS (TEST1,TEST2)...
LY CE000
ANDR A,Y < (Y)=RESULTAT DE PARCOURS.
JMP E305 < GO BACK...
<
< CAS D'UNE FONCTION DE TEST OU LA CLEF EXISTE :
<
<
< ON A ICI :
< (W)=ADRESSE DESCRIPTEUR DE LA CLEF.
<
E370: EQU $
PSR X
LA XXKE2,W < ACCES AU MOT1 DU DESCRIPTEUR.
DBT < SI ON TROUVE A LA SUITE DU DBT
< (X)=K, C'EST QUE BIT0(MOT1)=1,
< C'EST-A-DIRE QUE LA CLEF EST
< A L'ETAT 'IN USE'.
ADCR X < PAR EXTREME PRUDENCE...
LY INFINI < (Y)=Q8000 INITIALEMENT.
CPZR X < TEST DE L'ETAT IN USE/IDLE.
JNE E373 < (X)#0, DONC CLEF A L'ETAT 'IDLE'.
<
< CAS D'UNE CLEF A L'ETAT 'IN USE' :
<
ADRI XXPL7-XXPL6,Y < (Y)='8001.
E375: EQU $
<
< RENVOI DES MOT2 & 3 DU DESCRIPTEUR DANS TEST1 & TEST2 :
<
LA XXKE3,W < ACCES MOT2.
STA TEST1
LA XXKE4,W < ACCES MOT3.
STA TEST2
PLR X
JMP E305 < GO BACK...
<
< CAS D'UNE CLEF A L'ETAT 'IDLE' :
<
E373: EQU $
TBT NBITMO+BXPL2 < EST-CE UN TEST-OPEN...
JNC E375 < NON JUSTE UNE DEMANDE D'ACCES
< AUX MOT2 & 3 DU DESCRIPTEUR.
<
< CAS D'UN TEST OPEN OU LA CLEF ESTA L'ETAT 'IDLE' :
<
LYI XXPL5 < (Y)='0000.
SBT BXKE4 < POSITIONNEMENT DU BIT 'IN USE'
< DANS LE MOT1.
STA XXKE2,W < MAJ MOT1.
<
< ECHANGE DE (MOT2,MOT3) & (TEST1,TEST2) :
<
LX TEST1
LA XXKE3,W
STA TEST1
STX XXKE3,W
LX TEST2
LA XXKE4,W
STA TEST2
STX XXKE4,W
PLR X < RESTAURE @SECTEUR DE LA CLEF
< SUR LAQUELLE ON VIENT DE
< FAIRE UN TEST-OPEN.
PSR A,W
LA XXKE3,W
LR A,W < (W)=ADRESSE DU DESCRIPTEUR COURANT,
STX DEMO2,W < ON Y INSCRIT L'ADRESSE DU SECTEUR
< CONTENANT LA CLEF COURANTE, ET CECI POUR
< FACILITER UN EVENTUEL RESTART...
PLR A,W
BSR AWSDK < REECRITURE DE SON SECTEUR APRES
< LA MAJ QU'IL A SUBIT.
JMP E305 < MAINTENANT LA CLEF EST A
< L'ETAT 'IN-USE', GO BACK...
Copyright © Jean-François COLONNA, 2011-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2011-2024.