< S I S C M S 5 14 PAGE PAGE < < < O P E N D ' U N F I C H I E R : < < < FONCTION : < CE SOUS-PROGRAMME PERMET < L'OUVERTURE D'UN FICHIER ; < POUR CE FAIRE, ELLE ALLOUE < AU DEMANDEUR (SI CELA EST < POSSIBLE) UNE 'DCT' APPAR- < TENANT AU POOL DU 'SGF', < PUIS ELLE ACTIVE LA TACHE < 'SGF' REENTRANTE CORRESPON- < DANTE. < L'ACCES A UN FICHIER PEUT < SE FAIRE SOIT EN EN DONNANT < LE, SOIT EN < RECHERCHANT UN FICHIER D'UN < TYPE DONNE (LIBRE PAR EXEM- < PLE...). < < < ARGUMENTS : < (A)= < 1- BIT0=K : BIT1-15=NOM-DIRECT DU FICHIER, < 2- BIT0=1 : BIT1-15=MASK-ETAT RECHERCHE. < (B)= < BIT0-12=K, < BIT13=K : FICHIER PARTAGEABLE, < =1 : FICHIER NON PARTAGEABLE, < BIT14-15=K1 : FICHIER IN, < =10 : FICHIER OUT, < =11 : FICHIER DE TRAVAIL. < (Y)=NVP DU FUTUR FICHIER. < < < A T T E N T I O N : < LE 'NVP' DU FUTUR FICHIER < (Y) EST RECUPERE DANS LA PILE < PAR UN DEPLACEMENT CALCULE A < L'ASSEMBLAGE... < < < REMARQUE : < LORS D'UN "OPEN-NEW", ON < RECHERCHE UN FICHIER LIBRE, < CE QUI SE FAIT EN DONNANT : < (A)='B0 (=CLOSE & INEXISTANT). < < < RESULTATS : < (X)=NSP DE LA DCTF ALLOUEE, OU < 0 SI L'OPEN N'A PU SE FAIRE. < < USE L,DCT0 USE W,DEM0 OPNFIL: EQU $ XKREG: VAL K < INITIALISATION DU CUMUL DES REGISTRES. #@PSR A,B,Y < #SISP CMS5 KREG# A CAUSE DU MICRO-CANAL.. #@PSR W,L < #SISP CMS5 KREG# A CAUSE DU MICRO-CANAL.. XREGTG:: VAL -XKREG < NOMBRE DE REGISTRES EMPILES A L'ENTREE. LR A,Y < SAVE PROVISOIRE DE L'ARGUMENT < D'APPEL (A) DANS Y, POUR SAVOIR < ULTERIEUREMENT SI L'APPEL A EU < LIEU PAR NOM-DIRECT OU PAR ETAT. RQST &ASXSGF <<< NBITEF-N < MASQUE D'ETAT DU FICHIER. XWOR%2: VAL CORBT?XBITF1=FMASK(K?XWOR%1=FCINST ANDI XWOR%2 < AFIN DE NE TESTER QUE LES BITS < PARTAGEABLE (13) ET ETAT (14-15). CPI XEF1 XWOR%2: VAL COSBT?XBITF1=FMASK(K=FCINST ORI XWOR%2 < RESTAURATION DU BIT OPEN (12). JG E402R < OPEN IMPOSSIBLE : LE FICHIER < EST DEJA OUVERT, NON PARTAGEABLE < ET EXISTANT. < A NOTER : (Y)=NSPVID !!! < < CAS OU L'OUVERTURE DU FICHIER EST POSSIBLE : < E401: EQU $ < < ON A ICI : < (X)=NOM-DIRECT DU FICHIER, < (A)=ETAT DU FICHIER AVANT CETTE DEMANDE. < (Y)=K : FICHIER DEJA OUVERT, OU APPEL AVEC < LE NOM-DIRECT=K, < >=K : APPEL PAR NOM-DIRECT, < < 0 : APPEL PAR ETAT. < CPZR Y JL Z239 < APPEL PAR ETAT. < < CAS DE L'APPEL PAR NOM-DIRECT (LE CAS FICHIER DEJA < OUVERT QUI AMENE AUSSI ICI, SERA < DISCRIMINE PAR LA SUITE) ; DANS LE CAS DE L'APPEL < PAR NOM-DIRECT, ON VERIFIE QUE LE FICHIER < DEMANDE EST EXISTANT : < XWOR%1: VAL BIT>NBITEF-N < MASQUE DE L'ETAT... XWOR%2: VAL CORBT?XBITF2=FMASK(K?XWOR%1=FCINST LYI XWOR%2 < ON VA IGNORER LE BIT PARTAGEABLE. ANDR A,Y < (Y)=K SI LE FICHIER ETAIT (ETAT < DANS A) CLOSE ET INEXISTANT. CPZR Y JE E402R < ERREUR : L'OPEN NE PEUT AVOIR < LIEU DANS LE CAS OU LE FICHIER < DEMANDE PAR NOM EST CLOSE ET < INEXISTANT. < A NOTER : (Y)=K. < < < O U V E R T U R E D U F I C H I E R : < < < Z239: EQU $ < < RECHERCHE D'UNE DCT LIBRE : < PSR A LA &ASDCTF BSR ABETA < (A)=BETA(SDCTF), < =NOMBRE DE 'DCTF' LIBRES... IF XXFICD-W,,,XEIF% IF ATTENTION : IL FAUT QUE LE SEUIL UTILISE IF PAR LE 'CCI' SOIT SUPERIEUR A 'W' POUR DES IF RAISONS LIEES A DES DEMANDES SIMULTANEES IF D'OUVERTURE DE FICHIERS !!! XEIF%: VAL ENDIF CPI W < Y-EN-A T'IL AU MOINS UNE ??? JGE Z239X1 < OUI, AU MOINS UNE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < IL N'Y A PAS DE 'DCTF' DE LIBRES ; < AUTREFOIS, ON FAISAIT : < < LAD &ASXSGF < BSR ARLSE < SORTIE DE LA PHASE CRITIQUE 'SGF', < RQST &ADCTF < ATTENTE D'ALLOCATION D'UNE 'DCTF', < RQST &ASXSGF < PUIS, RE-RENTREE EN PHASE CRITIQUE... < < MALHEUREUSEMENT, L'ETAT DU FICHIER < DANS 'TEDF' N'INDIQUE PAS ENCORE < L'OUVERTURE (QUI A LIEU A LA SORTIE < DE 'OPNFIL') ; OR EN PARTICULIER DANS < LE CAS DE L'OPEN 'NEW', SI PAR MALHEUR < 2 OPENS 'NEW' ONT LIEU SIMULTANEMENT, IL < SE PEUT QU'IL TOMBE SUR LE MEME FICHIER < INTERNE !!! < ALORS QUE FAIRE ??? ET BIEN JE NE SAIS PAS < CAR IL Y A UN RISQUE TEL QUE CELUI EVOQUE < CI-DESSUS !!! < LAD &ASXSGF BSR ARLSE < ON SORT DE LA PHASE CRITIQUE, RQST &ASXSGF < ET ON Y RE-RENTRE... Z239X1: EQU $ PLR A RQST &ASDCTF < ATTENTE D'UNE DCTF. < (ON SAIT QU'IL EN EXISTE AU MOINS < UNE...) < < CAS OU AU MOINS UNE DCTF EST LIBRE : < BSR AACTP < ACCES A LA TP : (W)=@TP DU FICHIER. < < < A T T E N T I O N : < A PARTIR D'ICI, LA 'TP' DU < FICHIER EST RESIDENTE EN ME- < MOIRE CENTRALE... < < IC NUSF,W < ET 1 UTILISATEUR DE PLUS SUR < CE FICHIER (C'EST PEUT-ETRE LE 1ER). PSR A,X < SAVE L'ETAT AVANT LA DEMANDE, NTRN LXI X8/NBITMO < (X)=NOMBRE DE MOTS OCCUPES PAR (TODCTF'. TRN LAD AODCTF < ADRESSE DU RELAI VERS LA TABLE < D'OCCUPATION DES DCTF. BSR ASOBT < RECHERCHE ET OCCUPATION DE < LA 1ERE DCTF LIBRE. JG SYSRD1 < OK, (X) EST CORRECT... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ATTENTION, SI L'ON RELANCE LE < SYSTEME, LE NUMERO DE 'DCTF' < ALLOUEE EST FORCEMENT MAUVAIS < ET RISQUE DE PERTURBER 'DCTSY'... < SYSRD1: EQU $ < < ON A ICI : < (A)=NUMERO PAR RAPPORT A 0 DE LA 1ERE DCTF LIBRE. < LR A,X PSR X < SAVE NUMERO DE DCTF / A 0. ADRI NSPFIL,X < (X)=NSP DE LA DCTF ALLOUEE. < < ALLOCATION D'UN BUFFER D'IMPLANTATION DE LA DCTF : < PSR W < SAVE @TP. LA AALBTP < ETANT DANS UNE PHASE CRITIQUE < DU SGF, ON PEUT UTILISER LE < BLOC NON REENTRANT D'ALLOCATION < DES BUFFERS DE TP. LR A,W < (W)=@DEMANDE ALLOCATION BUFFER. STZ ARGDEM+OPDEM < RAZ DU BIT WAITB DE L'OPDEM. LAD ARGDEM+ASDEM STA ARGDEM+AMDEM < L'ADRESSE OCTET DU BUFFER ALLOUE < SERA RENVOYE PAR ASDEM. BSR ACHAND < DEMANDE D'ALLOCATION 1 BUFFER. LA &ADCTSY < TEST DE DCTSY. JAE SYSRD2 < OK, DCTSY(NSPF)=K. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < JE NE SAIS PAS, MAIS EN TOUT < CAS ALLER VOIR QUELLE ET LA < TACHE QUI OCCUPE DCTSY(X). < JMP SYSRD2 < ET OUI... E402R: JMP E402 < RELAI VERS 'E402'... SYSRD2: EQU $ SBT WAITB < RESTAURATION DE L'OPDEM DE < ALBTP (AVEC WAITB POSITIONNE) ; A < NOTER QU'ICI, ON A : (A)=K. BSR ACHANW < ATTENTE DE FIN D'ALLOCATION. STA ARGDEM+OPDEM < RESTAURATION DE L'OPDEM DE ALBTP. < < RECUPERATION DU BUFFER ALLOUE POUR DCTF : < LA ARGDEM+ASDEM SLRS NOCMO=K < CONVERSION EN UNE ADRESSE MOT. PLR W < RESTAURE (W)=@TP. LR A,L < (L)=@DCTF. < < INITIALISATION DE LA DCTF : < LR X,Y < (Y)=NSP DE LA DCTF. LXI LDCTF < (X)=LONGUEUR D'UN BUFFER. E441: EQU $ STZ O,L < MISE A 0 DE TOUT LE BUFFER CONTE- ADRI P,L < LA FUTURE 'DCTSGF'. JDX E441 ADRI -LDCTF+PFIL+DEPILE,L < POSITIONNEMENT SUR LE PREMIER MOT < DE LA PILE DE LA 'DCTSGF'. LXI LPILEH+XXPFIL+XXPILI < (X)=LONGUEUR D'UNE PILE DE 'DCTSGF'. E441X: EQU $ LR L,A STA O,L < ON INITIALISE TOUTE LA PILE DE LA ADRI P,L < 'DCTSGF' AVEC LE '$', AFIN D'ETRE JDX E441X < COMPATIBLE AVEC 'SI CMS5 GENPIL2'. ADRI -LPILEH-XXPFIL-XXPILI-PFIL-DEPILE,L < RESTAURE : (L)=ADRESSE 'DCTSGF'. XWOR%1: VAL XLNSGF=FCBA(MOCD LRM A,X BYTE XWOR%1;KF < POUR UN NOM TYPE "HANDLER-SGF"... WORD COSBT?BISOSE=FMASK(K=FCINST STA HNAME < RANGEMENT 2 PREMIERS CARACTERES DU NOM < DE CE HANDLER TYPE "SGF"... STX BITSEM < ON POSITIONNE 'BISOSE' DANS 'BITSEM' DE < LA 'DCTSGF' ; AINSI LE 'SGF' NE TRANSMET < JAMAIS LE COUPLE (SLO,SLE) SAUF EXCEP- < TION (DANS 'ELESS' LORSQU'IL S'AGIT DES < LECTURES-ECRITURES DES SECTEURS D'UN < ENREGISTREMENT DE FICHIER... PLR X < (X)=NUMERO DE DCTF PAR RAPPORT A 0. ADRI I,X < (X)=NUMERO DE DCTF PAR RAPPORT A 1. XR B,X < SAVE B DANS X, ET : < (B)=NUMERO DE DCTF PAR RAPPORT A 1. LAI K < NETTOYAGE DE A. DV DIX < (A)=DIZAINES ; (B)=UNITES. ADRI HZERO,A < CONVERSION ASCI DES DIZAINES. ADRI HZERO,B < CONVERSION ASCI DES UNITES. STB HNAME+LHNAME-Z < RANGEMENT CHIFFRE DES UNITES. STBY HNAME+LHNAME-Z < RANGEMENT CHIFFRE DES DIZAINES. LR X,B < RESTAURE (B)=ETAT DEMANDE APRES < L'OPEN DU FICHIER. IF SPHEX0-I,,XEIF%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF IC SPHEX < LE SEMAPHORE D'EXCLUSION DE < PHASE CRITIQUE DE CETTE DCT < EST MIS A 1. IF XXNTRY-I,,XEIF%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF IC NTRIES < LE NBRE MAX D'ESSAIS EST FIXE A 1. LRM A,X WORD TRYVID WORD XSGFON STA FRETRY < POUR FAIRE UNE 'SYSER' !!! STX DCTFON < LISTE DES FONCTIONS RECONNUES. LRM A,X WORD SMST WORD XSGFUP STA PST+RS < REGISTRE 'S' : MODE MAITRE... STX DCTFUP < ET LISTE DES "ALTITUDES" DES FONCTIONS... XWOR%1: VAL MOCG=K XWOR%2: VAL XNVPF>XWOR%1 IF XWOR%2-Q8000,,XEIF%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF STA IOID < ON MET LE CODE '80 DANS LA PARTIE < 'IO' DE IOID (MODE FICHIER). IF K,,XEIF%, IF ATTENTION : L'INITIALISATION DE 'ETAT' EST MAUVAISE !!! XEIF%: VAL ENDIF LR L,A STA PST+RL < REGISTRE L. ADRI PFIL,A STA PST+RK < REGISTRE K. LR C,A STA PST+RC < REGISTRE C. LRM A,X WORD SO WORD SE STA PST+RSLO < INITIALISATION DE 'SLO', STX PST+RSLE < ET DE 'SLE' (PLUS PROPRE QU'UTILE...). LRM A,X WORD FFILTR WORD FSFILT STA FILTRE < ROUTINE DE FILTRAGE, STX SFLITR < ROUTINE DE S-FILTRAGE. LRM A,X WORD HANDLR WORD HDLFIL STA PST+RP < REGISTRE P, STX ES < HANDLER DE GESTION DE FICHIERS. XR W,K < W BASE LA PILE... LA -XREGTG+DEPILE,W < RECUPERATION DU FUTUR 'NVP' DU FICHIER. XR W,K LXI FONSB < FONCTION 'SET BIT A 1 SANS VERIF'. CPBY MEMV < COMPARAISON DU NVP AU SEUIL... JGE E441Y < NVP>=SEUIL ==> SGF SUR DKB... LXI FONRB < FONCTION 'SET BIT A 0 SANS VERIF'. E441Y: EQU $ LAI NSPDKB < DANS TOUS LES CAS ON DEMANDE < 'DKB' QUI SERA PEUT-ETRE UTILISEE < EN TRANSPARENT... STBY VAR+DFILDK+XXNSP < ON GENERE LE NSPTYP DE LA DEMANDE < D'E/S DISQUE UNE FOIS POUR TOUTE... XR X,Y < (X)=NSP(DCTF), (Y)=FONCTION. LAD ATNSPF < (A)=ADRESSE DU RELAI VERS 'TNSPF'. BSR ATMOBT < MEMORISATION DE LA POSITION DU < 'NVP' DU FICHIER PAR RAPPORT AU < SEUIL ACTUEL... LR L,A < (A)=ADRESSE DE LA 'DCTSGF', STA &ADCTSY < ET ENFIN MISE A JOUR DE 'DCTSY' PAR < INSERTION DE CETTE NOUVELLE 'DCTSGF'. XR X,Y XWOR%1: VAL YAPILS-DCTF0-DAPILS ADRI DAPILS+XWOR%1,A < BASE DE LA PILE DES SECTEURS < A RELEASER. SBT BITX < BIT D'INDEXATION. STA VAR+APILS < POINTEUR DE LA PILE DES SECTEURS. STY VAR+NSPF < SAVE NSP DE LA DCTF. LAD AESTF < ADRESSE DU RELAI VERS 'ESTF'. LR Y,X < (Y)=NSPDCTF. ADRI NSNSP0,X < (X)=NIVEAU SOFT DE LA DCTF. BSR ASMMK <<< MASQUAGE GENERAL IT LYI FONSB < FONCTION DE MISE A 1 D'UN < BIT SANS VERIFICATION. < < < P H A S E I N I N T E R R U P T I B L E : < < BSR ATMOBT < BISE A 1 DU BIT DE CTTE TACHE DANS < LA FILE ESTF. BSR ASMDK <<< DEMASQUAGE GENERAL IT LY VAR+NSPF < RESTAURE (Y)=NSPDCTF. < < < A T T E N T I O N : < L'ARMEMENT DU HANDLER 'SGF' AURA < LIEU AU COURS DE LA 1ERE DEMANDE < QUI LUI SERA ADRESSEE. < < PLR A,X < RESTAURE ETAT AVANT (A) ET NOM < DIRECT (X). STX VAR+FILNOM < MISE DU NOM DIRECT DANS LA DCTF. < < ON A ICI : < (A)=ETAT AVANT LA DEMANDE D'OPEN, < (B)=ETAT DEMANDE POUR LE FICHIER APRES L'OPEN, < (X)=NOM DIRECT DU FICHIER, < (Y)=NSP DE LA DCTF ALLOUEE, < (L)=ADRESSE DCTF, < (W)=ADRESSE TP DU FICHIER. < < < MISE A JOUR DE TEDF : < SBT NBITMO+XBITF1 < ON FORCE LE BIT OPEN DANS < L'ETAT DEMANDE POUR LE FICHIER. XWOR%1: VAL COSBT?XBITF1=FMASK(K=FCINST ANDI XWOR%1 < DE L'ETAT AVANT LA DEMANDE, ON < NE CONSERVE QUE LE BIT < OPEN/CLOSE (BIT 12). SLLS NBITEF+XBITF1-XBITF2 < CE BIT OPEN/CLOSE EST POSITIONNE < EN FACE DU BIT DE MASQUE DU BIT < PARTAGEABLE/NON PARTAGEABLE. < < < A T T E N T I O N : < SI LE FICHIER ETAIT 'OPEN' (1), < ET QUE LE PASSAGE EN 'NON PARTAGEA- < BLE' SOIT DEMANDE, IL FAUT ALORS < IGNORER CE BIT, LE MASQUE DE L'ETAT < A DONNER AU FICHIER EST DONC CONS- < TRUIT A PARTIR DU BIT OPEN/CLOSE < DE L'ETAT AVANT... < < IBT XBITF1-NBITEF-XBITF1+XBITF2 < INVERSION DE L'ANCIEN BIT OPEN/CLOSE. XWOR%1: VAL BIT>NBITEF-N < MASQUE DE L'ETAT FICHIER. XWOR%2: VAL CORBT?XBITF2=FMASK(K?XWOR%1=FCINST XWOR%2: VAL XWOR%2>NBITEF < CADRAGE... ORI XWOR%2 < < ON A ICI : < (A)=MASQUE, ET : < (A)='B0 SI LE FICHIER ETAIT OPEN, < (A)='F0 SI LE FICHIER ETAIT CLOSE. < ORR B,A < DANS A ON A L'ARG DE MTEDF. < < ELIMINATION DES DEMANDES D'ETAT INEXISTANT : < RBT NBITMO+XBITF1 < RAZ DU BIT OPEN FORCE CI-DESSUS. RBT NBITMO+XBITF2 < RAZ BIT PARTAGEABLE A PRIORI. CPZR B JNE E410 < ETAT DEMANDE : < IN, OUT, OU TRAVAIL. < < CAS OU L'ETAT DEMANDE EST 'INEXISTANT', < ON FORCE L'ETAT 'TRAVAIL' : < XWOR%1: VAL COSBT?XBITF3=FMASK(K=FCINST XWOR%1: VAL COSBT?XBITF4=FMASK(K?XWOR%1=FCINST ORI XWOR%1 < MISE A 1 DES BITS 14 & 15 DE A. E410: EQU $ BSR AMTEDF < MAJ DE L'ETAT DU FICHIER. < < MISE DANS LA DCTF DU NIVEAU DE LA TACHE FAISANT L'OPEN : < BSR ACANSP < RENVOIE (A)=NSP DEMANDEUR OU NSPACT. STA VAR+NSPDDR < NSPDDR DE DCTF = DCT DE L'OUVREUR E402: EQU $ LR Y,X < RESTAURE NSPDCTF DANS X. LAD &ASXSGF BSR ARLSE PLR W,L < A CAUSE DU MICRO-CANAL. PLR A,B,Y < A CAUSE DU MICRO-CANAL. RSR < ...OUF... PAGE < < < C L O S E D ' U N F I C H I E R : < < < FONCTION : < CE SOUS-PROGRAMME A POUR BUT < DE FERMER UN FICHIER, C'EST-A- < DIRE DE LIBERER LES RESSOURCES < QU'IL UTILISAIT ('DCTF', BUFFER < DE SA 'TP',...). CETTE FERMETURE < EST REFUSEE DANS LE CAS OU LE < TRAVAIL EN COURS EST INACHEVE < ('OPEN ENREGISTREMENT' SANS LE < 'CLOSE' ASSOCIE). < < < ARGUMENTS : < (A)= < SI BIT0=K : BIT1-15=NOM DIRECT DU FICHIER A FERMER, < SI BIT0=1 : BIT1-15=NSP DE LA DCTF ALLOUEE < AU FICHIER LORS DE L'OPEN. < (B)= < BIT8-11=K011 : DELETE (METTRA LE FICHIER A L'ETAT < OPEN & INEXISTANT). < =1000 : SAVE. (ETAT CLOSE). < =1011 : MODE SPECIAL RESERVE AU < RELEASEUR DES CLEFS D'UN FICHOIER < DELETE (METTRA LE FICHIER A L'ETAT < CLOSE & INEXISTANT). < (LE RESTE DE B ETANT A 0 ; CECI EST UN < ETAT/MASK A DONNER AU FICHIER AU CLOSE). < (L)=ADRESSE DCTF, SI BIT0(A)=K. < < < RESULTATS : < (Y)=K SI CLOSE OK, OU SI ENCORE AU MOINS UN UTI- < LISATEUR SIMULTANE. < =1 SI LE FICHIER ETAIT DEJA FERME, < =2 SI CLOSE NON REALISE, UN 'OPEN ENREGISTREMENT' < AYANT ETAIT FAIT (SANS LE CLOSE ASSOCIE), < =NIVEAU DE LA TACHE AYANT FAIT L'OPEN SI LE < DEMANDEUR DE CLOSE N'EST PAS L'OUVREUR... < < ECFC: VAL ECFC ECEO: VAL ECEO USE L,DCT0 CLSFIL: EQU $ PSR A,X,L,W LX C7FF < MASQUE DE NOM-DIRECT. ANDR A,X < (X)=NOM DIRECT OU NSP. < < DISCRIMINATION DU MODE D'APPEL : < JAG E403 < BIT0(A)=K : APPEL PAR NOM-DIRECT. < < CAS D'UN APPEL PAR NSP : IL FAUT CALCULER L'ADRESSE DE LA DCT : < JAE E444 < < SI NSP=K, C'EST HDLVID, RIEN < A FAIRE. LYI ECFC < POSITIONNEMENT DU CODE ERREUR < 1 DANS Y. LA &ADCTSY < RECUPERATION DE L'@DCTF DANS A. < NOTA : ON N'UTILISE PAS CADCT, < CAR SI LE FICHIER N'EXISTE PAS, < ON A DCTSY(X)=K, ET EN FAIT, < IL N'Y A PAS DE RECOVERY A FAIRE. JAE E405 < ERREUR : LA DCTF N'EXISTE PAS, < LE CLOSE NE PEUT DONC AVOIR LIEU. JAG SYSRD3 < OK : LA DCTF EXISTE. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ETRE PRUDENT, CAR L'ADRESSE < RECUPEREEE N'EST PAS CELLE NI < D'UN BUFFER, NI D'UNE 'DCT', < CAR ELLES SONT POSITIVES... < SYSRD3: EQU $ LR A,L < (L)=@DCTF. < < TEST D'UN DEBORDEMENT DES PILES 'SGF' : < MALHEUREUSEMENT APRES QUE CE DEBORDEMENT < AIT EU LIEU !!! < LAD LDCTF-Z,L < ACCES AU DERNIER MOT DE LA 'DCTSGF', CP LDCTF-Z,L < COMME IL S'AGIT DU DERNIER MOT DE LA < PILE, IL DOIT ENCORE CONTENIR SA < PROPRE ADRESSE (C'EST UN GARDE-FOUS...). JE E403X1 < C'EST BON... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < EVALUER L'AMPLITUDE DU DEBORDEMENT, < ET VOIR OU CELA C'EST PRODUIT, ET QUE < FAIRE POUR QUE LES 'DCTSGF' RESTENT < IMPLANTEES DANS UN BUFFER !!! < E403X1: EQU $ < < ON A ICI : < (L)=ADRESSE DCTF, < (X)=NSPF. < < < TEST D'OUVREUR-FERMEUR : < BSR ACANSP < RENVOIE (A)=NSP FERMEUR (OU NSPACT) LY VAR+NSPDDR < ACCES AU NSP DE L'OUVREUR CPR A,Y JNE E405 < CLOSE REFUSE : (Y)=NIVEAU-OUVREUR. LX VAR+FILNOM < RECUPERATION DU NOM DIRECT DU < FICHIER A FERMER. E403: EQU $ BSR ABETA1 < CACUL (A)=BETA(SCHVID(DCTF))). JAL Z221 < OK : HDLSGF EN ATTENTE SUR SCHVID LRM A WORD HANDLR < DANS LE CAS OU HDLSGF N'EST PAS < EN ATTENTE SUR SCHVID, TESTONS < SON REGISTRE P POUR SAVOIR < S'IL A 'BOUGE' DEPUIS L'OPEN... CP PST+RP < VALEUR INITIALE DE P. JE Z221 < OK : HDLSGF N'A PAS 'BOUGE'... BSR ASYSER < E R R E U R S Y S T E M E ... Z221: EQU $ < < TESTS DE VALIDITE DU CLOSE : < < < ON A ICI : < (X)=NOM DIRECT DU FICHIER. < LY ETAT1 < Y-A-T'IL UN OPEN ENREGISTREMENT < EN COURS... ADR Y,Y IF ECEO-2,,XEIF%, IF ATTENTION : 'ECEO' EST MAUVAIS !!! XEIF%: VAL ENDIF CPZR Y JNE E405 < OUI, LE CLOSE EST REFUSE, < NOTONS AU PASSAGE QUE : (Y)=2. < < TEST SUR L'ETAT DU FICHIER : < LYI FONSB1 < (Y)=1 A PRIORI, S'IL IL N'Y A PAS < D'ERREUR, CE (Y)=1 SERA UTILISE < PAR ATMOBT PAR LA SUITE. IF ECFC-FONSB1,,XEIF%, IF ATTENTION : 'ECFC' EST MAUVAIS !!! XEIF%: VAL ENDIF LAI MTSGF < ARGUMENT DE DEMANDE D'ETAT. BSR AMTEDF < < ON A ICI, AU RETOUR : < (A)=ETAT DU FICHIER DE NOM DIRECT (X). < TBT XBITF1 < TEST DU BIT OPEN (1) / CLOSE (K). JNC E405 < DEJA FERME : (Y)=1. < < CAS OU LE FICHIER ETAIT OUVERT : < RQST &ASXSGF <<< XWOR%2 SWBR X,X < (X)='0800 (FONCTION TEST-OPEN). ORR X,Y < (Y)=TEST-OPEN.OR.NOM-DIRECT. BSR AOPN1 < DEMANDE D'OUVERTURE DE < L'ENREGISTREMENT. < < TEST DES CONDITIONS DE RETOUR : < CPZR Y JNE E416XX < Y CONTIENT DEJA LE CODE-ERREUR. < < CAS OU L'OPEN A EU LIEU : < LA &VAR+AFILT < ACCES A LA TETE DE L'ENREGISTREMENT. STA VAR+NFILR < INITIALISATION DE L'ADRESSE DU < PROCHAIN SECTEUR A LIRE AVEC LA < TETE DE L'ENREGISTREMENT. E416XX: EQU $ RSR < (Y)=K, OK. PAGE < < < O P E N - N E W E N R E G I S T R E M E N T : < < < ARGUMENTS : < (Y)=NOM-DIRECT DU FICHIER AUQUEL APPARTIENT < L'ENREGISTREMENT, < (L)=ADRESSE DCTF. < (A,B)=CLEF. < < USE L,DCT0 USE W,DEM0 OPNNK: EQU $ JALE OPNNK1 < VALIDATION DE 'PEK'... CP C1FFF < IL FAUT QUE BIT0=BIT1=BIT2=K JLE E499 OPNNK1: EQU $ LYI ECEC1 < ERREUR : 'PEK' INVALIDE JMP E417XX < < CAS D'UNE 'PEK' VALIDE : < E499: EQU $ TBT NBITMO+BXKE5 < TEST PARITE DE PDK DANS LE JC E4991 < CAS D'UN OPEN-NEW: IL EST < INTERDIT D'INSERER DES CLES < IMPAIRES SI L'ON VEUT QUE < LE FONCTIONNEMENT DU MODE NEXT < SOIT CORRECT TBT NBITMO+BXKE4 < DE PLUS, PDK DOIT ETRE > 0 JNC E478 E4991: EQU $ LYI ECEC2 < ERREUR PDK JMP E417XX < < CAS D'UN PDK CORRECT LORS D'UN OPEN NEW < E478: EQU $ LX INFINI < (X)=FONCTION INSERT. ORR X,Y < (Y)=FONCTION-INSERT.OR.NOM-DIRECT. BSR AOPN1 < DEMANDE D'OUVERTURE. < < TEST DES CONDITIONS DE RETOUR : < CPZR Y JE E417 < OK, L'OPEN A LIEU. < < CAS OU L'OPEN N'A PU AVOIR LIEU : < JMP E417XX < Y CONTIENT DEJA LE CODE-ERREUR. < < CAS OU L'OPEN A EU LIEU : < E417: EQU $ LA INFINI STA VAR+NFILR < INITIALISATION DE L'ADRESSE DU < PROCHAIN SECTEUR A LIRE AVEC < L'INFINI. E417XX: EQU $ < SORTIE... RSR < (Y)=K, OK. PAGE < < < O P E N - N E X T E N R E G I S T R E M E N T : < < < ARGUMENTS : < (L)=ADRESSE DCTF. < (CLEFS,CLEFS+1)=CLEF PRECEDENTE, < (Y)=NOM-DIRECT DU FICHIER. < < USE L,DCT0 USE W,DEM0 OPNEXT: EQU $ LA VAR+CLEFS+CLEFSE < RECUPERATION DE LA LB VAR+CLEFS+CLEFSD < CLEF COURANTE... SBT NBITMO+BXKE5 < POSITIONNEMENT DU MODE NEXT. JMP OPNONK < ON EST RAMENE A OPEN-OLD... PAGE < < < I N I T I A L I S A T I O N D ' U N C L O S E < E N R E G I S T R E M E N T : < < < ARGUMENTS : < (Y)='6800.OR.NOM-DIRECT SI CLOSE-SAVE, < ='6000.OR.NOM-DIRECT SI DELETE-RELEASE, < (L)=ADRESSE DCTF. < < < RESULTAT : < (Y)=K SI CLOSE AUTORISE, < =2 SI CLOSE IMPOSSIBLE, AUCUN OPEN N'AYANT < EU LIEU. < < USE L,DCT0 USE W,DEM0 CLO1: EQU $ < < TEST SUR OPEN EN COURS : < LX ETAT1 ADRI -I,X CPZR X JE E418 < OK, ETAT1=1, IL Y A DONC EU < UN OPEN AVANT. < < CAS OU IL N'Y A PAS EU D'OPEN AVANT : < LYI ECEO < CODE ERREUR CLOSE DEMANDE SANS < OPEN. JMP E418XX < < CAS OU IL Y A EU UN OPEN AVANT LA DEMANDE DE CLOSE : < E418: EQU $ < < SAUVEGARDE DU DESCRIPTEUR D'ENREGISTREMENT < DANS LE DESCRIPTEUR DE CLEF : < LX &VAR+AFILT < RECUPERATION DE LA TETE DE < L'ENREGISTREMENT. STX TEST1 LX &VAR+AFILQ < RECUPERATION DE LA QUEUE DE < L'ENREGISTREMENT. STX TEST2 LA VAR+CLEFS+CLEFSE < RECUPERATION DE LA LB VAR+CLEFS+CLEFSD < CLEF COURANTE... XR B,X BSR ASTBOX < RENVOI EVENTUEL DE 'PDK' DANS LA BOX... XR B,X PSR W BSR AACTP2 < MISE EN MEMOIURE DE LA TP < DU FICHIER. BSR APLSC < Y POSSEDE LA FONCTION DEMANDEE. PLR W < < TEST DES CONDITIONS DE RETOUR : < CPZR Y JE SYSRD7 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < PEUT-ETRE UN 'JMP E418XX'... < SYSRD7: EQU $ DC ETAT1 < ETAT1=K, ON MEMORISE < AINSI QU'IL N'Y A PLUS < D'OPEN EN COURS. E418XX: EQU $ RSR < (Y)=K, OK. PAGE < < < C L O S E S A V E D ' U N E N R E G I S T R E M E N T : < < < ARGUMENTS : < (Y)=NOM-DIRECT DU FICHIER, < (L)=ADRESSE DCTF. < < USE L,DCT0 USE W,DEM0 CLOSK: EQU $ LA VAR+NFILW < TEST DU PROCHAIN SECTEUR A ECRIRE. CP INFINI < EXISTE-T-IL? JNE E465 < OUI, IL EXISTE < < CAS OU LE PROCHAIN SECTEUR A ECRIRE N'EXISTE PAS (Q8000) : < XWOR%1: VAL MXPL1=K XWOR%2: VAL XXPL2>XWOR%1 < CADRAGE DE LA FONCTION DE DELETE. XWOR%3: VAL COSBT?BXPL2=FMASK(K?XWOR%2=FCINST XWOR%4: VAL MOCG=K XWOR%4: VAL -XWOR%4 < POUR UN CADRAGE A DROITE... LXI XWOR%3>XWOR%4 SWBR X,X < (X)='6800=FONCTION DE DELETE-CLOSE. ORR X,Y < (Y)='6800.OR.NOM-DIRECT. BSR ACLO1 < DEMANDE DE FERMETURE DE < L'ENREGISTREMENT EN SAVE. < < TEST DES CONDITIONS DE RETOUR : < CPZR Y JNE E419 < ERREUR, LE CLOSE EST REFUSE. BSR ARDESC < DANS LE CAS OU LE CLOSE EST < ACCEPTE ON RELEASE LE DESCRIPTEUR < D'ENREGISTREMENT. E419: EQU $ RSR < OK, Y EST CORRECT. < < CAS OU LE PROCHAIN SECTEUR A ECRIRE EXISTE : < E465: EQU $ < < TRANSFORMATION DE LA DEMANDE DE CLOSE < SAVE EN UNE DEMANDE D'ECRITURE AVEC EOF ; < LE SECTEUR QUE L'ON VA ECRIRE EN < QUEUE DE L'ENREGISTREMENT CONTIENT < 2 CARACTERES 'EOT' CONSECUTIFS. < LAI FGW < FONCTION ECRITURE. SBT EOF < AVEC 'EOF'. STA ARGDEM+OPDEM < MAJ DE L'OPDEM DE LA DEMANDE < ARGUMENT DU CLOSK. LAI K XKREG: VAL K < INITIALISATION DU CUMUL DES REGISTRES... #@PSR A < #SISP CMS5 KREG# < LE MOT COURANT EST LE PREMIER MOT DU < DERNIER BUFFER (IL DONNERA UN CHAINAGE < 'INFINI'...). LR K,A < (A)=@MOT DU MOT DE CHAINAGE SGF. SLLS NOCMO=K STA ARGDEM+AMDEM < @OCTET DU DERNIER SECTEUR < DE L'ENREGISTREMENT. KEOF:: VAL KEOT < CARACTERE DOUBLE DE FIN D'ENREGISTREMENT. LAI KEOF < 4 OCTETS ET CODE DU 'EOF'. STA ARGDEM+CODEM < 4 OCTETS : 1 MOT DE CHAINAGE < DU SGF, PLUS LES 2 'EOT'. SWBR A,A ORI KEOF < (A)='0404='EOF''EOF'. #@PSR A < #SISP CMS5 KREG# < LE MOT SUIVANT DE LA PILE CONTIENT < 2 CARACTERES 'EOF'. XKREG: VAL -XKREG < NOMBRE DE MOTS DU BUFFER DE FERMETURE < DE L'ENREGISTREMENT... IF XKREG*NOCMO-KEOF,,XEIF%, IF ATTENTION, LES OPTIMISATIONS SIOUX QUI IF PRECEDENT SONT IDIOTES !!! XEIF%: VAL ENDIF BSR AELWS < ECRITURE DU SECTEUR CONTENU < DANS LA PILE K. ADRI -XKREG,K < DESTRUCTION DU BUFFER < REENTRANT DU SECTEUR. JMP E419 < GO BACK. PAGE < < < C L O S E - R E L E A S E D ' U N < E N R E G I S T R E M E N T : < < < ARGUMENTS : < (Y)=NOM-DIRECT DU FICHIER, < (L)=ADRESSE DCTF. < < USE L,DCT0 USE W,DEM0 CLORK: EQU $ XWOR%1: VAL MXPL1=K XWOR%2: VAL XXPL2>XWOR%1 < CADRAGE DE LA FONCTION DE DELETE. XWOR%4: VAL MOCG=K XWOR%4: VAL -XWOR%4 < POUR UN CADRAGE A DROITE... LXI XWOR%2>XWOR%4 SWBR X,X < (X)='6000=FONCTION DELETE-DELETE. ORR X,Y < (Y)='6000.OR.NOM-DIRECT. BSR ACLO1 < DEMANDE DE FERMETURE. < < TEST DES CONDITIONS DE RETOUR : < CPZR Y JNE E424XX < Y CONTIENT LE CODE-ERREUR. < < CAS D'UN CLOSE ACCEPTE : < < < RELEASE DE L'ENREGISTREMENT : < LAD VAR+BFILDE < 'BFILDE' EST PRIS COMME BUFFER. SLLS NOCMO=K < CONVERSION EN UNE ADRESSE-OCTET. STA VAR+AFILDK+AMDEM LAI NOCMO < DEMANDE LECTURE 2 OCTETS, JUSTE < SUFFISANT POUR OBTENIR L'EN- < TETE DE CHAINAGE SEQUENTIEL. STA VAR+AFILDK+CODEM STZ VAR+AFILDK+OPDEM < DEMANDE DE LECTURE (K). LX &VAR+AFILT < INITIALISATION DE L'ADRESSE < DISQUE DANS X AVEC LA TETE < DE L'ENREGISTREMENT. BSR ARDESC < ON PEUT MAINTENANT RELEASER < LE DESCRIPTEUR D'ENREGISTREMENT. LB VAR+NFILW < (B)=ADRESSE DU PROCHAIN SECTEUR < A ECRIRE POUR TEST DE FIN DU < PARCOURS DE L'ENREGISTREMENT EN < SEQUENTIEL. < < LIBERATION DES SECTEURS : POUR ACCELERER LE < PROCESSUS DE LIBERATION DES SECTEURS,ILS < SONT GROUPES PAR PAQUET DE 16 DANS L 'PILS'. < LE NBRE DE SECTEURS CONTENUS DANS CETTE < PILE EST MIS DANS 'AFILS+CODEM'. < STZ VAR+AFILS+CODEM PSR W < SAVE @DEMANDE DE CLOSE-RELEASE. LAD VAR+DFILDK LR A,W < (W)=@DEMANDE DFILDK. < < BOUCLE DE RELEASE DES SECTEURS : < E421: EQU $ < < TEST DE FIN D'ENREGISTREMENT : < LY INFINI CPR Y,X LYI XXGF2 < DEMANDE AVEC ATTENTE A PRIORI JE E422 < SI (X)=Q8000, C'EST LA FIN CPR X,B JE E422 < (X)=PROCHAIN SECTEUR A ECRIRE, < C'EST LA FIN AUSSI. LA VAR+AFILS+CODEM < INDEX SECTEUR DANS LA PILE. XWOR%1: VAL LLPILS=K TBT NBITMO-B-XWOR%1 ADCR Y < SI LA PILE EST PLEINE (A)=LLPILS < ET ALORS (Y)=1, ET LA DEMANDE SERA < SANS ATTENTE. BSR AELESS < LECTURE DE L'EN-TETE DU SECTEUR < D'ADRESSE (X) AVEC ATTENTE < EN GENERAL. DANS LE CAS OU LA < PILE EST PLEINE ON PROFITE DE LA < LECTURE (QUI SERA PRIORITAIRE) < POUR RELEASER LA PILE DE SECTEURS. < < PENDANT LA LECTURE ON VA METTRE EN PILE LE SECTEUR (X), < ET EVENTUELLEMENT RELEASER LA PILE. < CPI LLPILS < PILS FAIT LLPILS MOTS MAX JL E423 < LA PILE N'EST APS PLEINE. < < CAS OU LA PILE DE BLOCAGE DES BUFFERS EST PLEINE : < LA VAR+APILS RBT XXGF1 < (A)=@DE LA PILE DES SECTEURS < A RELEASER. BSR AELARS < DEMANDE RELESAE (BIT0(A)=K) < DE LLPILS SECTEURS. < ET ATTENTE DE FIN DE RELEASE, < AFIN DE LIBERER LA PILE DE BLOCAGE. STZ VAR+AFILS+CODEM LAI K < INDEX DU 1ER SECTEUR DE LA PILE. < < MISE EN PILE DE BLOCAGE : < E423: EQU $ IC VAR+AFILS+CODEM < ET 1 SECTEUR DE PLUS DANS LA PILE. XR A,X < < ON A ICI : < (X)=INDEX COURANT DE LA PILE, < (A)=ADRESSE DU SECTEUR A RELAESER. < STA &VAR+APILS < MISE EN PILE. CPZR Y < L'ATTENTE DE FIN DE LECTURE EST-ELLE < DEJA FAITE... JE E462 < OUI... BSR AWAITR < ATTENTE DE FIN DE LECTURE. E462: EQU $ < < RECUPERATION DU CHAINAGE DES SECTEURS : < LX VAR+BFILDE < LE BUFFER CONTIENT L'EN-TETE DU < SECTEUR QUE L'ON VIENT DE LIRE. JMP E421 < < RENCONTRE DE LA FIN D'ENREGISTREMENT : < E422: EQU $ LA VAR+AFILS+CODEM JAE E424 < LA PILE EST VIDE. < < CAS OU LA PILE EST NON VIDE A LA FIN DE L'ENREGISTREMENT : < LA VAR+APILS RBT XXGF1 BSR AELARS < RELEASE DES SECTEURS PRESENTS < DANS LA PILE ET ATTENTE DE FIN DE RELEASE < DE RELEASE. E424: EQU $ PLR W < RESTAURE @DEMANDE DE CLOSE-RELEASE. E424XX: EQU $ < SORTIE... RSR < (Y)=K, OK. PAGE < < < V A L I D A T I O N D E S L E C T U R E S : < < < ARGUMENTS : < (W)=ADRESSE DE DEMANDE DE LECTURE, < (L)=ADRESSE DCTF. < < < RESULTAT : < (X)=ADRESSE DU SECTEUR A LIRE. < (Y)=K SI LECTURE POSSIBLE, < =4 SI LECTURE IMPOSSIBLE, AUCUN OPEN N'AYANT < EU LIEU, < =6 SI LECTURE IMPOSSIBLE L'ENREGISTREMENT ETANT < VIDE OU ENTIEREMENT LU. < < < A T T E N T I O N : < DETRUIT LE REGISTRE 'A' !!! < < USE L,DCT0 USE W,DEM0 ELR1: EQU $ < < TEST SUR UN OPEN-ENREGISTREMENT EN COURS : < LY ETAT1 ADRI -I,Y CPZR Y JE E425 < OK, ETAT1=1, IL Y A UN OPEN < ENREGISTREMENT EN COURS. < < CAS D'UNE DEMANDE DE LECTURE, ALORS QU'IL N'Y A PAS D'OPEN : < LYI ECRPO < CODE-ERREUR. JMP E426 < < CAS D'UNE DEMANDE DE LECTURE AVEC OPEN PREALABLE : < E425: EQU $ LX VAR+NFILR < RECUPERATION DU SECTEUR SUIVANT. < A LIRE. LY INFINI CPR X,Y < CE SECTEUR EXISTE-T-IL? LYI ECZERO JNE E426 < OUI, IL EXISTE, ON PEUT DONC < LE LIRE... < < CAS D'UNE DEMANDE DE LECTURE ALORS QUE < L'ENREGISTREMENT EST SOIT VIDE, SOIT < DEJA ENTIEREMENT LU : < LYI ECLEV E426: EQU $ RSR < A NOTER QUE SI LA LECTURE < EST POSSIBLE, ON (Y)=K. PAGE < < < R E C U P E R A T I O N D U C H A I N A G E < S E Q U E N T I E L D E S S E C T E U R S < L O R S D ' U N E L E C T U R E : < < < ARGUMENT : < (W)=ADRESSE DFILDK. < (SLO,SLE)=DEFINISSENT L'ESPACE DE < TRAVAIL QUI EST UTILISE < TEL QUEL, CONTRAIREMENT A 'ELCH'... < < < RESULTAT : < (X)=CHAINAGE VERS LE SECTEUR SUIVANT DE < L'ENREGISTREMENT, < NFILR=ADRESSE DU SECTEUR SUIVANT (CF. X). < < < A T T E N T I O N : < DETRUIT LE REGISTRE 'A' !!! < < USE L,DCT0 USE W,DEM0 ELR2: EQU $ PSR Y LA ARGDEM+AMDEM < RECUPERATION DE L'ADRESSE < OCTET DU BUFFER DE LECTURE. SLRS NOCMO=K < CONVERSION EN UNE ADRESSE-MOT. < RAPPEL : LES BUFFERS DISQUE < SONT TOUJOURS A DES FRONTIERES < DE MOTS (CF. ADM). LR A,Y < (Y)=ADRESSE ABSOLUE DU PREMIER MOT DU < BUFFER DANS LA PAGE DONNEE PAR 'SLO'. IF XCHSGF-O,,XEIF%, ADRI XCHSGF,Y < POUR ATTEINDRE LE CHAINAGE... XEIF%: VAL ENDIF < < < A T T E N T I O N : < CETTE ROUTINE NE PEUT ETRE APPELEE QU'APRES < QUE LA LECTURE SE SOIT ACHVEE, PUISQU'ELLE < RECUPERE DE L'INFORMATION DE CHAINAGE DANS < LE SECTEUR LU... < < LAR < RECUPERATION DANS 'A' DU CHAINAGE VERS < LE SECTEUR SUIVANT DE L'ENREGISTREMENT. < < TRUANDAGE PARESSEUX < LR A,X < (X)=ADRESSE DU SECTEUR SUIVANT OU < L'INFINI SI LE SECTEUR COURANT < EST LE DERNIER... CP INFINI JE E460X < FIN D'ENREGISTREMENT... IF NLSTS-K,,XEIF%, IF ATTENTION : DE NOMBREUX PROGRAMMES UTILISATEURS IF VONT MERDER (TEL 'EDITS'...) !!! XEIF%: VAL ENDIF LAI NLSTS STAR < AINSI, LE PREMIER MOT DU BUFFER < EST TOUJOURS NUL, SAUF DANS LE < CAS DE LA FIN D'ENREGISTREMENT... E460X: EQU $ < < < A T T E N T I O N : < LE PROCHAIN SECTEUR (X) EST PEUT-ETRE < EN FAIT LE PROCHAIN SECTEUR A ECRIRE QUI N'EXISSTE PAS < ENCORE : < < LA VAR+NFILW < ACCES PROCHAIN SECTEUR A ECRIRE. CPR A,X < COMPARAISON DU SECTEUR SUIVANT < (X) ET DU PROCHAIN SECTEUR A < ECRIRE (A). JNE E460 < ILS DIFFERENT, OK. < < CAS OU L'ON EST CHAINE SUR LE PROCHAIN SECTEUR A ECRIRE : < LX INFINI < LE PROCHAIN SECTEUR A LIRE < N'EXISTE PAS JUSQU'A CE QUE < LE PROCHAIN SECTEUR A ECRIRE < SOIT ECRIT. E460: EQU $ STX VAR+NFILR < (X) EST LE PROCHAIN SECTEUR < A LIRE. PLR Y RSR PAGE < < < L E C T U R E D ' U N S E C T E U R < D ' U N E N R E G I S T R E M E N T : < < < ARGUMENTS : < (W)=ADRESSE DE LA DEMANDE DE LECTURE, < (L)=ADRESSE DCTF. < < USE L,DCT0 USE W,DEM0 ELRS: EQU $ BSR AELR1 < PREPARATION DE LA LECTURE. < < LA LECTURE EST-ELLE POSSIBLE : < CPZR Y JNE E427XX < Y EST CORRECT. < < CAS OU LA LECTURE EST POSSIBLE : < < < ON A ICI : < (Y)=K, < (X)=ADRESSE DU SECTEUR A LIRE. < BSR ADADF < PREPARATION DE L'EXECUTION < LA DEMANDE DE LECTURE, < TRES IMPORTANT : SAVE W... LA BITSEM < ATTENTION : POUR 'ELESS' QUI VA SUIVRE, RBT BISOSE < ON AUTORISE LA TRANSMISSION DE (SLO,SLE) STA BITSEM < AFIN D'ACCEDER A L'ESPACE UTILISATEUR... BSR AELESS < DEMANDE LECTURE AVEC ATTENTE < (CF. (Y)=K, PUISQUE OK) DU SECTEUR < D'ADRESSE (X) ; A LA FIN DE LA LECTURE < ON INHIBE LA TRANSMISSION DE (SLO,SLE). BSR AELR2 < RECUPERATION DU PROCHAIN < SECTEUR A LIRE DANS CET < ENREGISTREMENT. PLR W < RESTAURE @DEMZNDE DE LECTURE SGF, < RAPPELONS QUE LE PSR AVAIT ETE < FAIT PAR AADF. E427XX: EQU $ < SORTIE... RSR < RETOUR OK, AVEC (Y)=K. PAGE < < < L E C T U R E E T D E L E T E < D ' U N S E C T E U R < D ' U N E N R E G I S T R E M E N T : < < < ARGUMENTS : < (W)=ADRESSE DE LA DEMANDE DE LECTURE-DELETE, < (L)=ADRESSE DCTF. < < USE L,DCT0 USE W,DEM0 ELRDS: EQU $ BSR AELR1 < VALIDATION DE LA DEMANDE DE < LECTURE. < < LA LECTURE EST-ELLE POSSIBLE : < CPZR Y JNE E428XX < Y EST CORRECT. < < CAS OU LA LECTURE EST POSSIBLE : < < < ON A CI : < (X)=ADRESSE DU SECTEUR A LIRE, < (Y)=0. < BSR ADADF < PREPARATION DE LA DEMANDE < LECTURE. LYI XXGF2 < DEMANDE DE LECTURE AVEC ATTENTE. LA BITSEM < ATTENTION : POUR 'ELESS' QUI VA SUIVRE RBT BISOSE < ON AUTORISE LA TRANSMISSION DE (SLO,SLE) STA BITSEM < AFIN D'ACCEDER A L'ESPACE UTILISATEUR... BSR AELESS < LECTURE DU SECTEUR (X) AVEC ATTENTE ; < EN FIN DE LECTURE, ON INHIBE LA TRANS- < MISSION DE (SLO,SLE). < < RELEASE DU SECTEUR LU (X) : < LAD ARGDEM+ASDEM < ADRESSE DE L'ADRESSE < SECTEUR A RELEASER. STY VAR+AFILS+CODEM < DEMANDE DE RELEASE 1 SECTEUR. BSR AELARS < DEMANDE DE RELEASE (BIT0(A)=K), < AVEC ATTENTE DE FIN DE RELEASE. < < MISE A JOUR DE LA CHAINE DE L'ENREGISTREMENT : < BSR AELR2 < RECUPERATION DU PROCHAIN SECTEUR < A LIRE. < < ON A ICI : < (X)=ADRESSE DU PROCHAIN SECTEUR A LIRE. < STX &VAR+AFILT < MISE A JOUR DE LA TETE DE < L'ENREGISTREMENT. LY INFINI CPR X,Y JNE E428 < OK, L'ENREGISTREMENT N'EST PAS < VIDE < < CAS OU ON A RENCONTRE LA FIN DE L'ENREGISTREMENT : < STX &VAR+AFILQ < ON MET AUSSI A JOUR LA QUEUE DE < CHAINE QUI EST VIDE MAINTENANT. E428: EQU $ PLR W < RESTAURE @DEMANDE LECTURE-DELETE. < LE PSR CORRESPONDANT AYANT ETE < FAIT PAR ADADF. LYI ECZERO < RETOUR OK. E428XX: EQU $ RSR PAGE < < < C H A I N A G E D E S S E C T E U R S < L O R S D ' U N E E C R I T U R E : < < < ARGUMENTS : < (W)=ADRESSE DE LA DEMANDE 'DFILDK', < (L)=ADRESSE DCTF, < (B)=ADRESSE DU SECTEUR SUIVANT (A METTRE EN TETE DU < SECTEUR COURANT AVANT SON ENVOI SUR DISQUE). < BISOSE(BITSEM)=1 : ON UTILISE (SLO,SLE)=(SO,SE), CE < QUI SIGNIFIE QUE L'ON TRAVAILLE < DANS LA PAGE 0 (CAS DE "EOF" PAR < EXEMPLE...), < =0 : ON UTILISE (SLO,SLE) TELS QUELS < AFIN DE TRAVAILLER DANS L'ESPACE < ARGUMENT (C'EST LE CAS COURANT, OU < EN COURS D'ENREGISTREMENT, ON CHAINE < LES SECTEURS ENTRE EUX...). < < < A T T E N T I O N : < DETRUIT LE REGISTRE 'A' !!! < < USE L,DCT0 USE W,DEM0 ELCH: EQU $ PSR B,Y LR B,Y < (Y)=ADRESSE DU SECTEUR SUIVANT... CALL #SISP CMS5 PSRSLO# < SAUVEGARDE DE (SLO,SLE) A PRIORI... LA BITSEM TBT BISOSE < DANS QUELLE PAGE DE 32K FAUT-IL ALLER ??? JNC ELCH1 < DANS CELLE QUI EST DEFINIE PAR (SLO,SLE) < ARGUMENT (MODE NORMAL "UTILISATEUR"...). CALL #SISP CMS5 PAGE0# ELCH1: EQU $ LR Y,B < (B)=ADRESSE DU SECTEUR SUIVANT... LA ARGDEM+AMDEM < RECUPERATION DE L'ADRESSE OCTET < DU BUFFER. SLRS NOCMO=K < CONVERSION EN UNE ADRESSE-MOT. LR A,Y < (Y)=ADRESSE ABSOLUE DU PREMIER MOT DU < BUFFER DANS LA PAGE DEFINE PAR 'SLO'. IF XCHSGF-O,,XEIF%, ADRI XCHSGF,Y < POUR ATTEINDRE LE CHAINAGE... XEIF%: VAL ENDIF LR B,A < (A)=CHAINAGE VERS LE SECTEUR SUIVANT, STAR < CHAINAGE DU SECTEUR COURANT VERS LE < SECTEUR SUIVANT... < RESTAURATION DE (SLO,SLE) A PRIORI : CALL #SISP CMS5 PLRSLO# LR Y,A < ON REMET L'ADRESSE ABSOLUE DANS 'A' POUR < RESTER COMPATIBLE AVEC L'ANCIENNE VER- < SION DU SYSTEME ?!???! PLR B,Y RSR PAGE < < < E C R I T U R E D ' U N S E C T E U R : < < < ARGUMENTS : < (W)=ADRESSE DE LA DEMANDE DE LECTURE, < (L)=ADRESSE DCTF. < < USE L,DCT0 USE W,DEM0 ELWS: EQU $ LA ARGDEM+OPDEM TBT EOF < EST-CE LA FERMETURE DU FICHIER ??? JC E430X < OUI, PAS DE TEST SUR 'NSL' ALORS ; < EN EFFET, CE RETOUR EN ERREUR, PROVO- < QUERAIT UN REFUS DE FERMETURE DU FICHIER, < D'OU UNE 'SYSER' DANS LE 'CCI'... LA NSL < (A)=NOMBRE DE Q-SECTEURS LIBRES, SLRS S < ON DECALE, CAR EN GENERAL 'NSL' EST < UN NOMBRE SUR 16 BITS... XWOR%9: VAL -S IF XXSGNT>XWOR%9-NDCTF,,,XEIF% IF ATTENTION, POUR NE PAS AVOIR D'ENNUIS, IL IF FAUT QUE LE SEUIL UTILISE POUR 'NSL' IF SOIT STRICTEMENT SUPERIEUR AU NOMBRE IF DE FICHIERS OUVRABLES A UN INSTANT IF DONNE !!! XEIF%: VAL ENDIF CPI XXSGNT>XWOR%9 < ON UTILISE LE SEUIL ARBITRAIRE < DE 'HDLSTN'... JGE E430X < OK, ON PEUT ECRIRE... LYI ECEPOV < ET NON, ON NE DEMANDE PAS DE Q-SECTEUR, < ET ON N'ECRIT DONC PAS... JMP E436XX < ET ON SORT EN ERREUR... E430X: EQU $ < < VALIDATION DE L'ECRITURE : < LA ETAT1 CPI W JE E430 < OK, IL Y A EU UN OPEN. < < CAS OU IL N'Y A PAS EU D'OPEN, LA LECTURE EST IMPOSSIBLE : < LYI ECEPO < CODE LECTURE DEMANDEE, ET < OPEN NON EN COURS. JMP E436XX < < CAS OU L'ECRITURE PEUT AVOIR LIEU, UN OPEN AYANT EU LIEU : < E430: EQU $ STA VAR+AFILS+CODEM < POUR DEMANDE D'ALLOCATION < D'UN SECTEUR. LX VAR+NFILW < ACCES A L'ADRESSE DU PROCHAIN < SECTEUR A ECRIRE. LR X,A CP INFINI < EXISTE-T-IL SEULEMENT? JNE E434 < OUI, C'EST BON... < < CAS OU LE PROCHAIN SECTEUR A ECRIRE N'EXISTE PAS : < LAD VAR+NFILW < ADRESSE MEMOIRE OU METTRE < L'ADRESSE DU SECTEUR ALLOUE. SBT XXGF1 < BIT0 DE DEMANDE D'ALLOCATION. BSR AELARS < DEMANDE D'ALLOCATION D'1SECTEUR < AVEC ATTENTE. LX &VAR+AFILQ < TEST DE LA QUEUE DE L'ENREGISTRE- < MENT. LR X,A CP INFINI JE E431 < L'ENREGISTREMENT EST VIDE... < < CAS D'UNE MISE A JOUR D'UN ENREGISTREMENT DEJA EXISTANT < EN EFFET, LE NFILW N'EXISTE PAS CELA SIGNIFIE < QUE L'ON A FAIT UN OPEN-OLD SUR L'ENREGISTREMENT, < CE QUI EST VERIFIE PAR LE FAIT QUE L'ENREGISTREMENT < N'EST PAS VIDE. < ON EST DONC OBLIGER DE RECCHAINER LE DERNIER SECTEUR < DE L'ENREGISTREMENT (QUEUE) SUR LE SECTEUR QUE < L'ON VA ECRIRE ; IL FAUT DONC RELIRE LA QUEUE ET POUR < CELA, IL FAUT DEMANDER UN BUFFER ; A NOTER QUE < CELA EST POSSIBLE, CAR EN EFFET LE SECTEUR QUE < L'ON RELIT NE CONTIENT QUE LE CHAINAGE 'INFINI' < ET LE CODE "EOF""EOF"... < PSR W LAD VAR+DFILS < ON VA UTILISER LA DEMANDE < D'ALLOCATION SECTEUR POUR < L'ALLOCATION BUFFER. LR A,W < (W)=@DFILS. LAI NSPALB XWOR%1: VAL MSPTYP=K XWOR%1: VAL NBITMO-XWOR%1 SBT PRIO-XWOR%1 < FUTUR BIT DE MODE PRIORITAIRE. SWBR A,A < GENERATION DU NSP D'ALLOCATIO < BUFFER. STA NSPTYP LAD VAR+AFILDK+AMDEM < ON VA METTRE L'ADRESSE DU BUFFER < ALLOUE DIRECTEMENT DANS DFILDK. STA ARGDEM+AMDEM < (W)=@DFILS. BSR ACHAND < ENVOI DE LA DEMANDE. LAI YY7 SLLS NOCMO=K < (A)=YY8 OCTETS A LIRE. STA VAR+AFILDK+CODEM STZ VAR+AFILDK+OPDEM < DEMANDE DE LECTURE (K). LAD VAR+DFILDK LYI XXGF2 < DEMANDE DE LECTURE AVEC ATTENTE. BSR AWAITR < ARRIVE ICI, ON EST OBLIGE < LA FIN D'ALLOCATION BUFFER. < < ARRIVE ICI, ON UN BUFFER ALLOUE : < LR A,W < (W)=@DEMANDE DFILDK. BSR AELESS < LECTURE AVEC ATTENTE DU SECTEUR < D'ADRESSE (X). < < ARRIVE ICI, ON A DANS LE BUFFER ALLOUE, LE SECTEUR < DE QUEUE D'ENREGISTREMENT. < LB VAR+NFILW < RECUPERATION DU PROCHAIN SECTEUR < AECRIRE DANS B. BSR AELCH < CHAINAGE DE LA QUEUE VERS NFILW. LAI FGW STA ARGDEM+OPDEM < DEMANDE D'ECRITURE. BSR AELESS < REECRITURE DU SECTEUR DE < QUEUE D'ENREGISTREMENT (X) < AVEC ATTENTE (Y VAUT ENCORE 0). < < RELEASE DU BUFFER DE TRAVAIL : EN EFFET LORSQU'ON < ARRIVE ICI, C'EST QUE LE SECTEUR DE QUEUE A ETE REECRIT : < LAD VAR+DFILS LR A,W < (W)=@DFILS. LAI NSPRLB SWBR A,A STA NSPTYP < GENERATION DU NSPTYP DE < RELEASE BUFFER. BSR ACHAND < ENVOI DE LA DEMANDE. BSR AWAITR < ATTENTE DE FIN DE RELEASE. PLR W < RESTAURE @DEMANDE D'ECRITURE. < < ECRITURE DU SECTEUR COURANT (X) : < E431: EQU $ LX VAR+NFILW < LE PROCHAIN SECTEUR A ECRIRE < DEVIENT LE SECTEUR COURANT (CELUI < QUE L'ON VA ECRIRE. E434: EQU $ LA ARGDEM+OPDEM TBT EOF < TEST DU BIT EOF DANS LA DEMANDE < D'ECRITURE SGF. JC E432 < OUI, C'EST DONC LE DERNIER < SECTEUR DE L'ENREGISTREMENT. < < CAS OU CE N'EST PAS LE DERNIER SECTEUR DE L'ENREGISTREMENT < QUE L'ON ECRIT : < LAD VAR+NFILW < ADRESSE OU METTRE L'ADRESSE DU < SECTEUR ALLOUE. SBT XXGF1 < POSITIONNEMENT DU BIT < DEMANDE D'ALLOCATION. BSR AELARS < ALLOCATION D'1 SECTEUR ET < ATTENTE. LB VAR+NFILW < RECUPERATION DANS B DU SECTEUR < ALLOUE. LYI XXGF2 < SI CE N'EST PAS LE DERNIER SECTEUR < DEMANDE AVEC ATTENTE. JMP E433 < < CAS DE L'ECRITURE DU DERNIER SECTEUR DE L'ENREGISTREMENT : < E432: EQU $ LB INFINI < IL N'Y A PAS A ALLOER DE DERNIER < SECTEUR. STB VAR+NFILW < MAJ DE NFILW. LYI XXGF3 < DANS LE CAS DU DERNIER SECTEUR < LA DEMANDE EST SANS ATTENTE, < ET DONC PRIORITAIRE ; LE TEMPS < D'ECRITURE SERA UTILISE POUR < FERMER (CLOSK) L'ENREGISTREMENT. E433: EQU $ CPZR Y < EST-CE LE DERNIER SECTEUR ??? IF XXGF3-K,XEIF%,,XEIF% IF ATTENTION : LE TEST SUIVANT EST MAUVAIS !!! XEIF%: VAL ENDIF JNE E461X1 < OUI, IL EST ECRIT A PARTIR DE LA PILE < DU 'HDLSGF', EN CONSEQUENCES, IL FAUT < RESTER DANS LA PAGE 0 !!! LA BITSEM < ATTENTION : POUR 'ELESS' QUI VA SUIVRE, RBT BISOSE < ON AUTORISE LA TRANSMISSION DE (SLO,SLE), STA BITSEM < AFIN D'ATTEINDRE L'ESPACE RELATIF... E461X1: EQU $ BSR AELCH < CHAINAGE DU SECTEUR COURANT < VERS NFILW. < < ON A ICI : < (X)=ADRESSE DU SECTEUR A ECRIRE, < (Y)=K SI CE N'EST PAS LE DERNIER SECTEUR, < =1 SI C'EST LE DERNIER SECTEUR (EOF). < BSR ADADF < MAJ DE LA DEMANDE D'ECRITURE DISQUE < DFILDK. < < < A T T E N T I O N : < 'ADADF' A FAIT UN 'PSR''W' !!! < < BSR AELESS < ECRITURE DU SECTEUR (X) ; EN FIN D'ECRI- < TURE, LA TRANSMISSION DE (SLO,SLE) EST < INHIBEE... LA VAR+NFILR < TEST DE L'ADRESSE DU PROCHAIN < SECTEUR A LIRE. CP INFINI JNE E461 < C'EST BON, IL EXISTE DEJA < < (RE-)INITIALISATION DU PROCHAIN SECTEUR A LIRE AVEC LE SECTEUR QUE < L'ON VIENT D'ECRIRE : < STX VAR+NFILR E461: EQU $ STX &VAR+AFILQ < MAJ DE LA QUEUE DE L'ENREGISTREMENT. LA &VAR+AFILT < ACCES A LA TETE DE L'ENREGISTREMENT. CP INFINI JNE E435 < C'EST BON, IL N'ETAIT PAS VIDE < < CAS OU L'ENREGISTREMENT ETAIT VIDE AVANT CETTE ECRITURE : < STX &VAR+AFILT < MAJ DE LA TETE DE L'ENREGISTREMENT. E435: EQU $ < < RAPPEL : < DANS LE CAS OU CE N'EST < PAS L' , ON A : < (Y)=0 (RETOUR OK...). < CPZR Y < TEST EOF OU PAS EOF... JE E436 < CE N'EST PAS EOF, A NOTER < AU PASSAGE QUE L'ATTENTE DE FIN < D'ECRITURE EST DEJA FAITE. < < CAS OU L'EOF EST DEMANDE : < LY VAR+FILNOM < RECUPERATION DU NOM-DIRECT DU < FICHIER. BSR ACLOSK < DEMANDE DE CLOSE-SAVE DE < L'ENREGISTREMENT. CPZR Y < TEST DES CONDITIONS DE RETOUR. JE SYSRD8 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... SYSRD8: EQU $ BSR AWAITR < ATTENTE DE FIN D'ECRITURE. E436: EQU $ PLR W < RESTORE (W)=@DEMANDE ECRITURE SGF. E436XX: EQU $ RSR PAGE < < < A L L O C A T I O N D ' U N S E C T E U R < P O U R E X T E N S I O N 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 : < < < ARGUMENT : < (A)=ADRESSE DU MOT OU METTRE L'ADRESSE SECTEUR ALLOUE < < < A T T E N T I O N : < DETRUIT LE REGISTRE 'A' !!! < < USE W,DEM0 ALSC: EQU $ PSR X,W < < TEST SUR L'ETAT DU STOCK DE SECTEURS DE PLSC : < LX NSTOCS CPZR X JE E320 < PAS DE SECTEURS EN STOCK, IL VA < DONC FALLOIR PASSER PAR < L'ALLOCATEUR DISQUE. < < CAS OU IL Y A AU MOINS UN SECTEUR EN STOCK : < DC NSTOCS < ET UN SECTEUR DE MOINS... LR A,W < (W)=@ DU MOT OU METTRE L'@ SECTEUR < ALLOUE. LA &ASTOCS < (A)=1ER SECTEUR DE LA PILE. STA O,W < RENVOI AU DEMANDEUR. < < RETOUR : < E321: EQU $ PLR X,W RSR < < CAS OU LE STOCK DE SECTEURS EST VIDE, < PASSONS PAR L'ALLOCATEUR DISQUE : < E320: EQU $ STA RASCAM < MAJ DE LA DEMANDE. LAI NSPGET XWOR%1: VAL MSPTYP=K XWOR%1: VAL NBITMO-XWOR%1 SBT PRIO-XWOR%1 < BIT PRIORITAIRE (FUTUR BIT8(A). SWBR A,A < GENERATION DE L'EN-TETE DE LA < DEMANDE A CHAND. STA RALSC LAD RALSC LR A,W < (W)=ARG DE CHAND. BSR ACHAND BSR ACHANW < ATTENTE DE FIN D'ALLOCATIOPN. JMP E321 < LE SECTEUR EST ALLOUE, ON S'EN VA. PAGE < < < I N I T I A L I S A T I O N D ' U N S E C T E U R < 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 : < < < EN-TETE D'UN SECTEUR : < MOT0=CHAINAGE VERS LE SECTEUR SUIVANT, < MOT1=CHAINAGE VERS LE SECTEUR PRECEDENT, < MOT2=K SI CE N'EST PAS UN SECTEUR DE DEBORDEMENT, < DEPLACEMENT DU DESCRIPTEUR DE DEBORDEMENT CHAI- < NANT CE SECTEUR DANS L'AUTRE CAS. < MOT3=NBRE DE DESCRIPTEURS UTILISES DANS LE SECTEUR. < < < ARGUMENT : < BIT0-7(A)=NBRE DE DESCRIPTEURS UTILISES INITIALIEMENT, < BIT8-15(A)=DANS LE CAS OU CE SECTEU EST UN SECTEUR < DE DEBORDEMENT, ON A ICI, LE DEPLACEMENT < DU DESCRIPTEUR QUI A DEBORDE DANS SON < SECTEUR, < (L)=ADRESSE DU BUFFER CONTENANT LE SECTEUR < A INITIALISER. < (X)=ADRESSE SECTEUR PRECEDENT (POUR CHAINAGE ARRIERE). < MOT D'ADRESSE (L)=ADRESSE DU SECTEUR A INITIALISER. < < < RESULTAT : < (X)=ADRESSE SECTEUR INITIALISE, < (W)=ADRESSE DU PREMIER DESCRIPTEUR DU SECTEUR=(L)+XSFL. < < < A T T E N T I O N : < DETRUIT LE REGISTRE 'A' !!! < < INITS: EQU $ PSR B STX XXSFB,L < CONSTITUTION DU CHAINAGE ARRIERE < DU SECTEUR A INITIALISER VERS LE < SECTEUR PRECEDENT. LX XXSFS,L < (X)=@SECTEUR A INITIALISER. LBI K SCLD NBITOC < DECONCATENATION DES 2 OCTETS DE A. SWBR A,A < CADRAGE DE A ET B A DROITE. STA XXSFD,L < DEPLACEMENT DANS LE CAS D'UN < SECTEUR DE DEBORDEMENT. STB XXSFK,L < NBRE DE DESCRIPTEURS UTILISES. LA INFINI < IL N'Y A PAS ENCORE DE SECTEUR SUI < SUIVANT. STA XXSFS,L < CONSTITUTION DU CHAINAGE AVANT < DU SECTEUR A INITIALISER VERS < LE SECTEUR SUIVANT (INFINI). LR L,W < (W)=@BUFFER. ADRI XXSFL,W < (W)=@1ER DESCRIPTEUR. PSR X,W LXI YY7-XXSFL < (X)=NOMBRE DE MOTS A REMETTRE A '0000, INITS1: EQU $ STZ O,W < ET ON REMET LE RESTE DU SECTEUR A '0000. ADRI P,W < AU MOT SUIVANT, JDX INITS1 < S'IL EXISTE... PLR X,W PLR B RSR PAGE < < < I N I T I A L I S A T I O N D ' U N < D E S C R I P T E U R D E C L E F : < < < FORMAT D'UN DESCRIPTEUR DE CLEF : < MOT0 : < BIT0=INDICATEUR LIBRE (1) / OCCUPE (K), < BIT1=INDICATEUR DE DEBORDEMENT (1), < BIT2=INDICATEUR DE DERNIER DESCRIPTEUR DE < LA SEQUENCE (1), < BIT3-15=PEK, < MOT1 : < BIT0 : BIT IN USE (1) / IDLE (K) ; CE < BIT N'A DE SENS QUE SI : < BIT0(MOT0)=BIT1(MOT0)=K, < C'EST-A-DIRE SI ON EST DANS UN DESCRIPTEUR < DE CLEF (OCCUPE & NON EN DEBORDEMENT). < BIT1-15=PDK. < < ET, LORSQUE LA CLEF EST A L'ETAT 'IDLE' : < < MOT2=ADRESSE SECTEUR DE DEBORDEMENT, OU ADRESSE 1ER SECTEUR < DE L'ENREGISTREMENT, < MOT3=ADRESSE DERNIER SECTEUR DE L'ENTREGISTREMENT. < (EVENTUEL) < < < ARGUMENTS : < BIT8-15(A)=ETAT DU DESCRIPTEUR (DERNIER, LIBRE...) < (W)=ADRESSE DESCRIPTEUR. < < < A T T E N T I O N : < DETRUIT LE REGISTRE 'A' !!! < < < NOTA : < LORS DE SA CREATION, UNE CLEF EST AUTOMATIQUEMENT < MISE A L'ETAT 'IN USE', C'EST DONC DE PLUS UN OPEN. < DE PLUS ON FAIT : < (MOT2,MOT3)<--(TEST1,TEST2), < (TEST1,TEST2)<--(Q8000,Q8000). < < < IMPORTANT : < LORS D'UNE DUPLICATION DE DESCRIPTEUR POUR < DEBORDEMENT, LA VERSION DUPLIQUEE POSSEDE LA < PROPRIETE 'IN USE/IDLE' DE LA VERSION EN DEBORDEMENT. < < INITK: EQU $ SWBR A,A < L'ETAT EST MIS DANS L'OCTET < GAUCHE DE A. OR PEK < GENERATION DU 1ER MOT DU DESCRIPTEUR < BIT0-2=ETAT, < BIT3-15=PEK. STA XXKE1,W < MOT0. LA PDK TBT BXKE5 < EST-CE UNE CLEF MODE NEXT... JNC SYSRD9 < NON, OK BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < PEUT-ETRE NE PAS FAIRE L'INITIALISATION, < OU MIEUX, VOIR POURQUOI ON A LE < BIT BXKE5'... < SYSRD9: EQU $ SBT BXKE4 < PASSAGE AUTOMATIQUE A L'ETAT < 'IN USE'. STA XXKE2,W < MOT1. < < OPEN DU DESCRIPTEUR : < LA TEST1 STA XXKE3,W < INITIALISATION DU MOT2. LA TEST2 STA XXKE4,W < INITIALISATION DU MOT3. < < INITIALISATION DE LA CHAINE DES < ENREGISTREMENTS DANS 'TEST1' ET 'TEST2' : < LA INFINI STA TEST1 < CHAINE VIDE. STA TEST2 < CHAINE VIDE. RSR PAGE < < < I N S E R T I O N D ' U N E C L E F < D A N S 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 : < (L)=ADRESSE DU BUFFER DU SECTEUR COURANT, < (A)=RESULTAT DU PARCOURS DE LA LISTE SEQUENTIELLE < A LA QUELLE APPARTIENT LA CLEF QUE L'ON VA < INSERER. < (X)=ADRESSE DU SECTEUR COURANT DE LA LISTE. < < USE W,DEM0 INSERT: EQU $ < ARRIVE ICI, ON SAIT QUE L'INSERTION ES < EST POSSIBLE. XR A,X CP INFINI < TEST DE LISTE VIDE XR A,X JE E330 < LA LISTE EST VIDE < < CAS OU LA LISTE DE LA CLEF N'EST PAS VIDE : < SLLS LXKE=K < CONVERSION EN UNE ADRESSE DE MOT < DU DESCRIPTEUR PRECEDENT. XWOR%1: VAL XXPL8(XXPL10 < ON RECHERCHE LE BIT COMMUN ENTRE < LES CODES DE RETOUR 'CLEF NON CERNEE'. IF XXPL9(XWOR%1,,XEIF%, IF ATTENTION : ANOMALIE DANS LES CODES !!! XEIF%: VAL ENDIF XWOR%2: VAL XWOR%1=K XWOR%3: VAL NBITMO-B-XWOR%2 < NUMERO DU BIT COMMUN DES FONCTIONS < 'CLEF NON CERNEE'. XWOR%4: VAL LXKE=K TBT XWOR%3-XWOR%4 < DISCRIMINATION CLEF NON CERNEE (1) < - CLEF CERNEE (K). RBT XWOR%3-XWOR%4 < RAZ BIT0 DE A. LR A,W < (W)=@ DU DESCRIPTEUR PRECEDENT. JNC E340 < LA CLEF EST CERNEE. < < CAS D'UNE CLEF NON CERNEE : < LB XXKE1,W < ACCES A L'ETAT DU DESCRIPTEUR PRE < PRECEDENT. RBT NBITMO+BXKE2 < LA CLEF N'ETANT PAS CERNEE, CELA < SIGNIFIE QUE LE DESCRIPTEUR (W) < EST LE DERNIER DE LA LISTE, AVEC < L'INSERTION C'EST LA NOUVELLE CLEF < (PEK,PDK) QUI DEVIENT LA DERNIERE. STB XXKE1,W < LE DESCRIPTEUR PRECEDENT < N'EST PLUS LE DERNIER DE LA LISTE. SBR L,A < CALCUL DE (W)-(L), AVEC (A)=(W). CPI YY7-XXSFL < LE DESCRIPTEUR PRECDENT EST-IL < EN BOUT DE SECTEUR... JGE E335 < OUI, IL FAUT DONC CHANGER DE < SECTEUR. < < CAS OU L'ON PEUT RESTER DANS LE MEME SECTEUR : < E336: EQU $ ADRI LXKE,W < PASSAGE AU DESCRIPTEUR SUIVANT. E337: EQU $ XWOR%1: VAL COSBT?BXKE2=FMASK(K=FCINST XWOR%2: VAL MOCG=K XWOR%2: VAL -XWOR%2 < POUR UN CADRAGE A DROITE... LAI XWOR%1>XWOR%2 < INDICATION DE DERNIER DESCRIPTEUR < (FUTUR BIT2 DU DESCRIPTEUR DE LA < CLEF). E338: EQU $ BSR AINITK < INITIALISATION DU DESCRIPTEUR DE < LA CLEF INSEREE. IC XXSFK,L < ET UN DESCRIPTEUR OCCUPE DE PLUS < DANS CE SECTEUR. BSR AWSDK < ECRITURE DU SECTEUR COURANT (X), < ET ATTENTE. < < RETOUR : < BR RETCID < < CAS OU LA CLEF N'EST PAS CERNEE, ET OU POUR LA RAJOUTER < IL FAUT UN NOUVEAU SECTEUR : < E335: EQU $ LR L,A < ON DEMANDE AINSI QUE L'ADRESSE DU < SECTEUR SUIVANT SOIT MISE DANS LE < MOT0 DU SECTEUR COURANT POUR < GENERE AUTOMATIQUEMENT LE CHAINAGE < AVANT. BSR AALSC < ALLOCATION 1 SECTEUR, ATTENTE < EVENTUELLE ET CHANAGE AVANT DES SECTEURS < SECTEURS. BSR AWSDK < ECRITURE DU SECTEUR COURANT (X). LAI K < INDIQUONS AINSI QU'IL Y A < 0 DESCRIPTEURS UTILISES ET < QUE LE NOUVEAU SECTEUR N'EST PAS < SECTEUR DE DEBORDEMENT. BSR AINITS < INITIALISATION DU NOUVEAU SECTEUR. < (X A ENCORE L'@SECTEUR PRECEDENTE). JMP E337 < < CAS OU LA LISTE EST VIDE : < E330: EQU $ LR L,A < ON DEMANDE QUE L'@ DU SECTEUR ALLOUE < SOIT MISE DANS LE MOT0 DU BUFFER < MAIS CELA SERVIRA UNIQUEMENT < A 'INITS'... BSR AALSC < ALLOCATION 1 SECTEUR. LX INFINI < INDIQUONS AINSI QU'IL N'Y A PAS DE SECTEU < DE SECTEURS PRECEDENTS. LAI K XWOR%1: VAL MOCG=K XWOR%2: VAL W>XWOR%1=K < '1' CADRE A GAUCHE... SBT NBITMO-B-XWOR%2 < (A)='100 : ON INDIQUE AINSI QU'IL < Y A 1 DESCRIPTEUR UTILISE < ET PAS DE DEBORDEMENT. BSR AINITS < INITIALISATION DU SECTEUR. < < NOTA SUR LA PREMIERE CLEF D'UNE LISTE SEQUENTIELLE : < POUR NE PAS AVOIR DE PROBLEMES AVEC DES < DELETES DE LISTES NE CONTENANT QU'UN SEUL < DESCRIPTEUR, ON CREE A PRIORI EN TETE < DE CHAQUE LISTE UNE CLEF BIDON (K,-1). < STZ XXKE1,W LA INFINI < ON NE SAIT JAMAIS... XWOR%1: VAL COSBT?BXKE4=FMASK(K=FCINST IF XWOR%1-Q8000,,XEIF%, IF ATTENTION : L'INITIALISATION DE 'XXKE2' EST MAUVAISE IF EN UTILISANT 'INFINI' !!! XEIF%: VAL ENDIF STA XXKE2,W < CLEF (K,Q8000). STA XXKE3,W < CHAINE VIDE. STA XXKE4,W < CHAINE VIDE. JMP E336 < < CAS OU LA CLEF EST CERNEE : < E340: EQU $ LR X,A CP PLSCAS < LE DESCRIPTEUR PRECEDENT EST-IL < EN MEMOIRE... JE E341 < OUI, OK. < < CAS OU LE DESCRIPTEUR PRECEDENT N'EST PLUS EN MEMOIRE : IL FAUT RELIRE SON < SON SECTEUR : < BSR ARSDK < LECTURE DU SECTEUR DU DESCRIPTEUR < PRECEDENT (X). E341: EQU $ LA XXKE1,W < ACCES AU MOT0 DU DESCRIPTEUR < PRECEDENT. JAGE E342 < TEST DE SON BIT0 (LIBRE) : LE < DESCRIPTEUR PRECEDENT N'EST APS < LIBRE. < < CAS OU LE DESCRIPTEUR PRECEDENT EST LIBRE : < C'EST BON, ON PEUT DONC L'UTILISER... < LAI K < INDIQUONS AINSI QUE LE DESCRIPTEUR < EST OCCUPE ET QU'IL N'EST PAS < LE DERNIER. JMP E338 < < CAS OU LE DESCRIPTEUR PRECEDENT EST OCCUPE : < IL VA FALLOIR FAIRE DU DEBORDEMENT... < E342: EQU $ < < SAUVEGARDE DU DESCRIPTEUR PRECEDENT POUR LE RESTAURER < LORSQU'ON AURA OBTENU UN SECTEUR DE DEBORDEMENT : < (ON A DEJA : (A)=MOT0). < LB XXKE2,W < ACCES MOT1. PSR A,B < SAVE MOT0,MOT1 DU DESCRIPTEUR PRECEDENT < PRECEDENT. SBT BXKE1 < LE DESCRIPTEUR PRECEDENT DEVIENT < DEVIENT UN DESCRIPTEUR DE < DEBORDEMENT. STA XXKE1,W LA XXKE3,W < MOT2. LB XXKE4,W < MOT3. PSR A,B < SAVE MOT2,MOT3. < < CALCUL DU DEPLACEMENT DU DESCRIPTEUR DE DEBORDEMENT < DANS SON SECTEUR : < LR W,A < (A)=@DESCRIPTEUR DE DEBORDEMENT. SBR L,A < (L)=@BUFFER. PSR A < SAVE DEPLACEMANT : A NOTER < QUE L'ON SAVE LE DEPLACEMENT ET NON PAS < ET NON PAS L'@ POUR DES RAISONS < DE TRANSLATABILITE DES BUFFERS EN MEMOIRE < MEMOIRE. LR W,A ADRI XXKE3-XXKE1,A < ON DEMANDE QUE L'@ DU SECTEUR ALLOUE < SOIT MISE DANS LE MOT2 DU < DESCRIPTEUR DE DEBORDEMENT. BSR AALSC < ALLOCATION DU SECTEUR DE < DEBORDEMENT. BSR AWSDK < ECRITURE DU SECTEUR COURANT (X), < ET ATTENTE < < GENERATION DE L'EN TETE DU SECTEUR DE DEBORDEMENT : < PLR A < RESTAURE DEPLACEMENT DU < DESCRIPTEUR DE DEBORDEMENT. XWOR%1: VAL MOCG=K XWOR%2: VAL W>XWOR%1=K < '1' CADRE A GAUCHE... SBT NBITMO-B-XWOR%2 < INDIQUONS AINSI QU'IL Y A < UN DESCRIPTEUR UTILISE. LY XXKE3,W < SAVE @SECTEUR DE DEBORDEMENT DANS Y. < DANS Y. BSR AINITS < INITIALISATION DU SECTEUR DE < DEBORDEMENT (X=@SECTEUR < PRECEDENT). LR Y,X < GENERATION DE (X)=@SECTEUR DEBORDE- < MENT, CAR AINITS A RENVOYE : < (X)=@SECTEUR SUIVANT DU PRECEDENT.) < < RESTAURATION DU DESCRIPTEUR COMME 1ER < DESCRIPTEUR DU SECTEUR DE DEBORDEMENT : < PLR A,B < RESTAURE MOT2,MOT3. STA XXKE3,W < MOT2. STB XXKE4,W < MOT3. PLR A,B < RESTAURE MOT0,MOT1. STA XXKE1,W < MOT0. STB XXKE2,W < MOT1. JMP E336 PAGE < < < D E L E T E U N E C L E F D A N S U N E < L I S T E S E Q U E N T I E L L E : < < < ARGUMENTS : < (L)=ADRESSE DU BUFFER DU SECTEUR COURANT, < (X)=ADRESSE DU SECTEUR COURANT, < (A)=RESULTAT DU PARCOURS DE LA LISTE SEQUENTIELLE. < (B)=ARGUMENT D'APPEL DE PLSC. < BIT4(B)=K : DELETE DESCRIPTEUR, < BIT4(B)=1 : CLOSE DESCRIPTEUR (IDLE). < < USE W,DEM0 DELETE: EQU $ SLLS LXKE=K < CONVERSION EN UNE ADRESSE DE MOT < DU DESCRIPTEUR DE LA CLEF < A DELETER. XWOR%1: VAL XXPL6=K RBT NBITMO-B-XWOR%1 LR A,W < (W)=@DU DESCRIPTEUR DE LA CLEF A < DELETER. LA XXKE2,W < ACCES AU MOT1 DU DESCRIPTEUR. TBT BXKE4 < TEST BIT IN USE/IDLE. JC SYSRDA < IN USE, OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ETRE PRUDENT... < SYSRDA: EQU $ TBT NBITMO+BXPL2 < DISCRIMINATION DELETE/CLSE. JC E372 < UN CLOSE EST DEMANDE. < < TRAITEMENT DES DELETE-DELETE : < LORS D'UN DELETE-DELETE, LE DESCRIPTEUR EST LIBERE, LE < BIT IN USE/IDLE N'AYANT PLUS AUCUN SENS. < E350: EQU $ DC XXSFK,L < ET UN DESCRIPTEUR DE MOINS < DANS LE SECTEUR. JE E355 < IL N'Y A PLUS AUCUN DESCRIPTEUR < OCCUPES DANS LE SECTEUR, IL < ALLONS LE LIBERER. < < CAS OU LE SECTEUR COURANT CONTIENT ENCORE AU MOINS < UN DESCRIPTEUR OCCUPE : < LA XXKE1,W < ACCES A L'ETAT DU DESCRIPTEUR DE < DE LA CLEF QUE L'ON DELETE. TBT BXKE2 < EST-CE LE DERNIER DESCRIPTEUR < DE LA LISTE SEQUENTIELLE. JC E352 < ET OUI, C')ST LE DERNIER. < < CAS OU LE DESCRIPTEUR DELETE N'EST PAS LE DERNIER < DE LA SEQUENCE : < SBT BXKE0 < MEMORISATION DE LA LIBERATION DE CE < CE DESCRIPTEUR. E362: EQU $ STA XXKE1,W < ET MISE A JOUR DU DESCRIPTEU. JMP E359 < ET C'EST TOUT... < < CAS OU LE DESCRIPTEUR DELETE EST LE DERNIER DE LA LISTE : < E352: EQU $ ADRI -LXKE,W < PASSAGE AU DESCRIPTEUR PRECEDENT. E353: EQU $ LA XXKE1,W < TEST DE L'ETAT LIBRE DU < DESCRIPTEUR PRECEDENT. JAL E352 < LE DESCRIPTEUR PRECEDENT EST < LIBRE (BIT0=1), CONTINUONS DONC < A REMONTER DANS LE SECTEUR. < < ARRETONS NOUS SUR LE 1ER DESCRIPTEUR OCCUPE (PAR UNE < CLEF OU UN DEBORDEMENT). < A NOTER, QU'IL Y A FORCEMENT AU MOINS UN DESCRIPTEUR < OCCUPE DANS CE SECTEUR PUISQU LE NBRE DE BLOCS < UTILISES EST DIFFERENT DE 0 (CF. 3,L). < SBT BXKE2 < LE 1ER DESCRIPTEUR OCCUPE < DEVIENT LE DERNIER DE LA LISTE. JMP E362 < ET C'EST TOUT... < < CAS OU ON TROUVE UN SECTEUR VIDE, ON VA DONC LE LIBERER : < E355: EQU $ LAD RALSC LR A,W < (W)=@DEMANDE DE RELEASE SECTEUR, < A NOTER, QUE CETTE INITIALISATION < EST FAITE QUELQUE SOIT LA FACON < DONT ON LIBERERA LE SECTEUR. < < TEST SUR LE STOCK DE SECTEURS DE PLSC : < LA NSTOCS CPI MSTOCS < A-T'ON UN STOCK SUFFISANT... JGE E360 < OUI... < < CAS OU LE STOCK DE SECTEURS DE PLSC EST INSUFFISANT : < ADRI I,A STA NSTOCS < ET UN SECTEUR DE PLUS EN STOCK... XR A,X < < ON A ICI : < (A)=ADRESSE SECTEUR A LIBERER. < (X)=NUMERO DE CE SECTEUR DANS LA PILE. < STA &ASTOCS < MISE EN PILE... IC WEIO < AINSI WEIO>0, DONC LE WAIT < NE NOUS BLOQERA PAS TOUTE A < L'HEURE... JMP E361 < < CAS OU LE STOCK DE SECTEURS EST SUFFISANT : < E360: EQU $ < < LE SECTEUR ETANT LIBRE ON VA UTILISER SON MOT4 < POUR RENVOYER A 'RELEASE SECTEUR' L'@ < DU SECTEUR A RELEASER. < LR L,A ADRI XXSFL,A STA RASCAM < MAJ DE LA DEMANDE DE RELEASE. STX XXSFL,L < RANGEMENT DE L'@SECTEUR A < RELEASER DANS MOT4 DU SECTEUR. LAI NSPREL XWOR%1: VAL MSPTYP=K XWOR%1: VAL NBITMO-XWOR%1 SBT PRIO-XWOR%1 < FUTUR BIT PRIORITAIRE DE L'EN- < TETE DE DEMANDE SWBR A,A < GENERATION DE L'EN-TETE DE < DEMANDE.(NSPREL,PRIORITAIRE). STA RALSC BSR ACHAND < ON A (W)=@DEMANDE DE RELEASE. < < NOTA : < L'ATTENTE DE FIN DE RELEASE < EST REPOUSSEE LE PLUS TARD < POSSIBLE... < E361: EQU $ < < ON A ICI : < (L)=ADRESSE BUFFER, < (W)=ADRESSE DE LA DEMANDE DE RELEASE. < < < RECONSTITUTION DES CHAINAGES APRES LE RELEASE < D'UN SECTEUR : < LX XXSFS,L < (X)=@SECTEUR SUIVANT. LB XXSFB,L < (B)=@SECTEUR PRECEDENT. LY INFINI CPR X,Y < TEST PRESENCE SECTEUR SUIVANT LY XXSFD,L < (Y)=INDICATEUR DE DEBORDEMENT JE E356 < IL N'Y A PAS DE SECTEUR SUIVANT < < CAS OU IL Y A UN SECTEUR SUIVANT : < BSR ARSDK < LECTURE DU SECTEUR SUIVANT, < ET ATTENTE. < < MISE A JOUR DE L'EN-TETE DU SECTEUR SUIVANT : < STB XXSFB,L < CHAINAGE VERS LE SECTEUR PRECEDENT < (C'EST LE PRECEDENT DU SECTEUR < LIBERE). STY XXSFD,L < L'INDICATEUR DE DEBORDEMENT < DU SECTEUR LIBERE EST REPORTE < SUR LE SECTEUR SUIVANT. BSR AWSDK < REECRITURE DU SECTEUR SUIVANT. E356: EQU $ < < < A T T E N T I O N : < IL Y A TOUJOURS UN PRECEDENT, CAR < UNE FOIS QU'UNE LISTE SEQUENTIELLE < A ETE CREE, ON NE PEUT PLUS LA < VIDER COMPLETEMENT, CE QUI < CE QUI SIGNIFIE QUE LE 1ER SECTEUR < NE PEUT JAMAIS ETRE VIDE, DONC < JAMAIS RELEASE (CF CLEF (K,-1)). < < XR B,X < < ON A ICI : < (X)=ADRESSE DU SECTEUR PRECEDENT, < (B)=ADRESSE DU SECTEUR SUIVANT. < BSR ARSDK < LECTURE DU SECTEUR PRECEDENT < ET ATTENTE. < < ATTENTE EVENTUELLE DE FIN DE RELEASE SECTEUR : < BSR ACHANW < C'EST WEIO DU RELEASE SECTEUR. LR L,W < (W)=@BUFFER. < < LE SECTEUR RELEASE ETAIT-IL UN SECTEUR DE DEBORDEMENT : < CPZR Y < TEST INDICATEUR DE DEBORDEMENT. JNE E357 < LE SECTEUR RELEASE ETAIT UN SECTEUR < DE DEBORDEMENT. < < CAS OU LE SECTEUR RELEASE N'EATAIT PAS UN SECTEUR DE DEBORDEMENT : < STB XXSFS,L < RECONSTITUTION DU CHAINAGE AVANT < DU SECTEUR PRECEDENT VERS LE < SECTEUR SUIVANT DU SECTEUR < RELEASE. XR B,A CP INFINI < MAIS,AU FAIT, LE SECTEUR SUIVANT < DU SECTEUR RELEASE EXISTE-T-IL? XR B,A JNE E359 < OUI, LE SUIVANT EXISTE < < CAS OU LE SECTEUR SUIVANT DU SECTEUR RELEASE N'EXISTE PAS : < CELA SIGNIFIE AU PASSAGE QUE LA CLEF DELETEE ETAIT LA < DERNIERE DE SA LISTE... < NOUS VOILA DONC DANS L'OBLIGATION DE PARCOURIR LE SECTEUR < PRECEDENT (X) POUR DETERMINER QUEL EST LE DERNIER < DESCRIPTEUR DE LA LISTE (APRE DONC LE DELETE DE LA CLEF ARG. ) < ADRI YY7-XXSFL,W < (W)=@DU DERNIER DESCRIPTEUR DU SECTEUR < SECTEUR (X). JMP E353 < < CAS OU LE SECTEUR RELEASE ETAIT EN DEBORDEMENT : < E357: EQU $ ADR Y,W < (W)=@ DU DESCRIPTEUR DE DEBORDEMENT. XR B,A CP INFINI < LE SECTEUR SUIVANT DU SECTEUR < RELEASE EXISTE-T-IL? XR B,A JE E350 < NON, DONC LE DESCRIPTEUR DE < DEBORDEMENT EST LIBRE A SON TOUR < < CAS OU LE SECTEUR SUIVANT DU SECTEUR RELEASE EXISTE : IL FAUT RECONSTITUER < LE CHAINAGE DU DESCRIPTEUR DE DEBORDEMENT VERS CE SECTEUR SUIVANT. < STB XXKE3,W < (B)=@SECTEUR SUIVANT, < (W)=@DESCRIPTEUR DE DEBORDEMENT. < < RETOUR : IL FAUT METTRE A JOUR LE SECTEUR COURNAT (X) SUR DISQUE : < E359: EQU $ BSR AWSDK < REECRITURE DU SECTEUR COURANT (X). BR RETCID < OUF... < < TRAITEMENT D'UN DELETE-CLOSE : < DANS CE CAS LA CLEF PASSE A L'ETAT IDLE. < E372: EQU $ RBT BXKE4 < LA CLEF PASSE A L'ETAT IDLE. STA XXKE2,W < MAJ DU DESCRIPTEUR. < < ON FAIT DE PLUS : < (MOT2,MOT3)<--(TEST1,TEST2). < LA TEST1 STA XXKE3,W LA TEST2 STA XXKE4,W JMP E359 < ET C'EST TOUT... PAGE < < < L E C T U R E - E C R I T U R E < D ' U N S E C T E U R S U R D K M < E T A T T E N T E D E F I N D ' E / S. < < < ARGUMENT : < (X)=ADRESSE DU SECTEUR. < < USE W,DEM0 < < ECRITURE D'UN SECTEUR : < WSDK: EQU $ PSR A,B,W LAI FGW < DEMANDE D'ECRITURE. JMP E262 < < LECTURE D'UN SECTEUR : < RSDK: EQU $ PSR A,B,W LAI FGR < DEMANDE DE LECTURE. < < TRONC COMMUN LECTURE/ECRITURE : < E262: EQU $ IF NUQFM,,,XEIF% IF LA ZONE DE SIMULATION DE 'DKF' SUR 'DKM' IF EST INCOMPATIBLE AVEC LES TESTS DE IF DISCRIMINATION QUI SUIVENT !!! XEIF%: VAL ENDIF CPZR X JL E262X1 < CAS DES ADRESSES 'DKM' SUPERIEURES < A L'INFINI, ELLES APPARTIENNENT < FORCEMENT A 'DKM'... LRM B WORD NUQFM CPR B,X JGE E262X1 < (X)>=B : LE SECTEUR DEMANDE EST AUSSI < HORS DE 'NUQFM' : IL APPARTIENT A 'DKM'. LRM B WORD XXTP+NSTP CPR B,X JGE E262X2 < (X)>=XXTP+NSTP : 'SYSER'... LRM B WORD XXTP CPR B,X JGE E262X3 < XXTP<=(X) XWOR%1=K SBT NBITMO-B-XWOR%2 < POSITIONNEMENT DU FUTUR "1 DESCRIP- < TEUR" PRESENT DANS LE SECTEUR... LX INFINI < (X)=FAUX CHAINAGE ARRIERE... STX O,L < QUE L'ON MET EN TETE DU BUFFER, BSR AINITS < INITIALISATION DU BUFFER, COMME S'IL < NE CONTENAIT QU'UN SEUL DESCRIPTEUR, < ET SANS CHAINAGES... LAI K SBT BXKE2 < INDICATEUR "DERNIER DESCRIPTEUR". STA XXKE1,W < GENERATION D'UNE FAUSSE 'PEK', STZ XXKE2,W < D'UNE FAUSSE 'PDK', STX XXKE3,W < ET DE FAUX CHAINAGES STX XXKE4,W < D'ENREGISTREMENT. PLR X,L JMP E262X7 < C'EST TOUT, ET ON ESPERE QUE CA < VA MARCHER...