< 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 <NOM-INTERNE>, 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 <<<<PHASE CRITIQUE DU SGF. < < DISCRIMINATION DU MODE D'APPEL < (PAR NOM, OU PAR ETAT RECHERCHE) : < IF BITRFE-BITSIG,,XEIF%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF JAGE E400 < BIT0(A)=K : APPEL PAR NOM-DIRECT. < < CAS DE L'APPEL AVEC RECHERCHE < D'UN FICHIER D'ETAT DONNE : < RBT BITRFE < RAZ DU BIT D'APPEL PAR ETAT. < < ON A ICI : < (A)=MASK+ETAT POUR LOOKF. < BSR ALOOKF < RENVOI DANS A LE NOM DIRECT < DU 1ER FICHIER POSSEDNAT L'ETAT < CHERCHE. SI AUCUN FICHIER NE COINCIDE < COINCIDE, RAPPELONS QUE LOOKF < BLOQUE LE DEMANDEUR JUSQU'A < SATISFACTIOM, ET DEBLOQUE < LA GESTION DE FICHIERS PAR < LE SEMAPHORE SEXSGF. E400: EQU $ CP NMFIL < VALIDATION DU NOM INTERNE... JL E400XX < OK, IL EST DANS LES NORMES... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < LE MIEUX EST DE SORTIR AVEC (Y)=NSPVID, AINSI < LE FICHIER DEMANDE N'EST PAS OUVERT... < LYI NSPVID < 'OPEN' IMPOSSIBLE... JMP E402R < VERS LA SORTIE EN ERREUR... E400XX: EQU $ < < ON A ICI : < (A)=NOM DIRECT D'UN FICHIER A OUVRIR. < LXI MTSGF XR A,X < < ON A ICI : < (A)=ARGUMENT DE DEMANDE D'ETAT, < (X)=NOM DIRECT DU FICHIER DONT ON DESIRE L'ETAT. < BSR AMTEDF < RENVOI L'ETAT DU FICHIER DANS A. < < TEST DE L'ETAT DU FICHIER AVANT LA DEMANDE : < TBT XBITF1 < TEST OPEN (1) / CLOSE (K). JNC E401 < OK LE FICHIER EST CLOSE. < < CAS D'UN FICHIER DEJA OUVERT : < LYI NSPVID < NSP NULLE A PRIORI. XWOR%1: VAL BIT>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 <<<<PHASE CRITIQUE DU SGF. BSR AACTP < ACCES A LA TP DU FICHIER, A NOTER < QUE LE FICHIER NE PEUT ETRE < INEXISTANT... < < ON A ICI : < (W)=ADRESSE TP EN MEMOIRE. < DC NUSF,W < ET UN UTILISATEUR DE MOINS SUR < CE FICHIER. JG E404 < IL RESTE ENCORE AU MOINS UN < UTILISATEUR. < < CAS OU PLUS PERSONNE N'UTILISE CE FICHIER : < BSR ADETP < ON SUPPRIME LA TP DE LA TABLE < ASSOCIATIVE TATP. < < MISE A JOUR DE TEDF : < LR B,A < (A)=ETAT A DONNER. PSR A,Y CPI MCFR < EST-CE UNE DEMANDE DE DELETE ??? JE E404X < OUI, (Y)=1 (SET A 1 AVEC VERIF). LYI FONRB < NON, (Y)=4 (RESET A 0 SANS VERIF). E404X: EQU $ LAD ATADF < (A)=ADRESSE DU RELAI VERS 'TADF', < (X)=NOM DIRECT DU FICHIER, < (Y)=FONCTION SUR 'TADF'. BSR ATMOBT < SI UN DELETE A ETE DEMANDE SUR LE < FICHIER DE NOM INTERNE (X), ON MET < SON BIT A 1 DANS 'TADF' EN VERIFIANT < QU'IL ETAIT A 0 AU PREALABLE ; SINON, < ON LE RAZE SANS VERIFICATION... PLR A,Y < RESTAURE : (A)=ETAT A DONNER AU FICHIER, < (Y)=1 POUR L'APPEL SUIVANT DE TMBOT. BSR AMTEDF < (A)=ETAT/MASK A DONNER AU FICHIER. E404: EQU $ < < LIBERATION DE LA DCTF : < LX VAR+NSPF < RECUPERATION DU NSPDCTF. STZ &ADCTSY < MEMORISATION DE LA FERMETURE < PAR RAZ DE L'ENTREE DE DCTSY(X). ADRI -NSPFIL,X < CALCUL DU NUMERO DE LA DCTF < DANS L'ENSEMBLE DES DCTF /0. LAD AODCTF < ADRESSE DU RELAI D'ACCES A < LA TABLE D'OCCUPATION DES DCTF. BSR ATMOBT < LIBERATION DCTF, RAPPELONS QUE < (Y)=1 (FONCTION 'SET BIT'). LAD &ASDCTF BSR ARLSE < < RELEASE DU BUFFER CONTENANT LA DCTF : < LA ARLBTP LR A,W < (W)=@DEMANDE DE RELEASE BUFFER. LR L,A < (A)=@MOT DU BUFFER ALLOUE A DCTF. SLLS NOCMO=K < CONVERSION EN UNE ADRESSE OCTET. STA ARGDEM+ASDEM < MISE EN ASDEM DE RELBTP. LAD ARGDEM+ASDEM STA ARGDEM+AMDEM < L'ADRESSE OCTET DU BUFFER EST < RENVOYE PAR L'ASDEM DE RELBTP. BSR ACHAND < DEMANDE DE RELEASE BUFFER. BSR ACHANW LAD &ASXSGF BSR ARLSE E444: EQU $ LYI ECZERO < CONDITION DE RETOUR OK. E405: EQU $ PLR A,X,L,W RSR PAGE < < < D C T D U R E L E A S E U R D E S < C L E F S D ' U N F I C H I E R < D E L E T E : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTRCF: EQU $ PSTRCF: WORD K;K;K;K;COM+DEPCS;DCTRCF;DEMRCF;PILRCF;HDLRCF;SMST;SO;SE #@ASCI " RCF" < #SISP CMS5 ASCI# < < BLOC DE DEMANDE AU SGF : < DEMRCF: WORD NILK < NSPTYP. WORD NILK < OPDEM. DZS LDEM0+DEMRCF-$ < < PILE DU RELEASEUR : < CALL #SISP CMS5 DOL2# PILRCF: EQU $-DEPILE XWPILE: VAL 40 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < R E L E A S E U R D E S C L E F S < D ' U N F I C H I E R D E L E T E : < < < FONCTION : < CE HANDLER N'EST PAS ACCESSIBLE PAR 'CHAND', < EST TOUJOURS ACTIF. IL EST BLOQUE EN GENERAL DANS < LOOKF, EN ATTENTE DE FICHIERS A L'ETAT OPEN & < INEXISTANT (SUITE DONC A UN CLOSE-DELETE). LORSQU' < EN A TROUVE UN, IL RECUPERE SES CLEFS UNE A UNE < EN MODE NEXT, ET LES DELETE, PUIS ENFIN DEMANDE < LA FERMETURE EN MODE CLOSE & INEXISTANT, MODE < SPECIAL QUI LUI EST RESERVE. < < USE W,DEM0 HDLRCF: EQU $ LAI MCOI < RECHERCHE DE FICHIERS A L'ETAT < OPEN & INEXISTANT. SBT BITRFE < RECHERCHE PAR ETAT. XWOR%1: VAL COSBT?XBITF3=FMASK(K=FCINST XWOR%1: VAL COSBT?XBITF4=FMASK(K?XWOR%1=FCINST LBI XWOR%1 < FICHIER DE TRAVAIL. LYI NSPVID < FAUX NVP MINIMUM FORCANT LE < PASSAGE DU SGF SUR 'DKB' EN < TRANSPARENT POUR 'RCF' ; IL N'EST EN EFFE < EN EFFET PAS UTILE QUE DE LA MEMOIRE < VIRTUELLE SOIT IMMOBILISEE POUR < LUI, CAR IL N'A PAS BESOIN D'ETRE < RAPIDE... BSR AOPFIL < OUVERTURE DU 1ER FICHIER < COINCIDANT. CPZR X < TEST DES CONDITIONS DE RETOUR... JNE SYSRD4 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < PROBABLEMENT FAIRE UN 'JMP HDLRCF'... < SYSRD4: EQU $ < < T R A C E D U S Y S T E M E : < LAI NSPRCF SWBR A,A < GENERATION D'UN FAUX NSPTYP. BSR ATRACE < < ON A ICI : < (X)=NSPDCTF. < < < MISE A JOUR DU BLOC DE DEMANDE SGF : < SWBR X,A STA NSPTYP < GENERATION DE L'EN-TETE DE LA < DEMANDE AU SGF. LYI FOFONX < FONCTION OPEN-NEXT ENREGISTREMENT LBI FOFCR < FONCTION CLOSE-RELEASE ENREGISTRE- < MENT. < < BOUCLE DE RELEASE DES ENREGISTREMENTS EN MODE NEXT : < E570: EQU $ STY ARGDEM+OPDEM < FONCTION OPEN-NEXT ENREGISTREMENT BSR ACHAND < W A L'ADRESSE DU BLOC DE < DEMANDE SGF. WAIT WEIO < ATTENTE DE FIN D'OUVERTURE. LA ARGDEM+ETADEM < TEST DES CONDITIONS DE RETOUR. JANE E571 < SI (A)#0, C'EST QUE C'EST < TERMINE : SOIT CATALOGUE < DES CLEFS ENTIEREMENT EXPLORE, < OU CATALOGUE VIDE... STB ARGDEM+OPDEM < FONCTION CLOSE-RELEASE. BSR ACHAND BSR ACHANW < ATTENTE DE FIN DE CLOSE-RELEASE. JMP E570 < NEXT CLEF. < < FERMETURE DU FICHIER : < E571: EQU $ LR X,A < (X)=A=NSPDCTF. SBT BITCFN < MODE FERMETURE PAR NSP. LBI MCIN < DEMANDE DE FERMETURE A L'ETAT < CLOSE, INEXISTANT, ET SURTOUT < NON PARATGEABLE, MEMORISANT < AINSI QU'IL A DEJA ETE OUVERT < AU MOINS UNE FOIS. BSR ACLFIL < FERMETURE. JMP HDLRCF < ALLONS CHERCHER LE FICHIER < OPEN & INEXISTANT SUIVANT. PAGE < < < A L L O C A T I O N D ' U N D E S C R I P T E U R < D ' E N R E G I S T R E M E N T : < < < RESULTATS : < AFILT (DCTF) =ADRESSE DU DESCRIPTEUR ALLOUE, < AFILQ (DCTF) =ADRESSE+1 DU DESCRIPTEUR ALLOUE. < MOT(DENI(DESCRIPTEUR)) <-- NOM INTERNE DU FICHIER, < LE DESCRIPTEUR AYANT ETE NETTOYE AU PREALABLE... < < < RAPPEL PHILOSOPHIQUE : < A CHAQUE ENREGISTREMENT LOGIQUE EST ASSOCIE < UNE CLEF ; DANS LE DESCRIPTEUR DE CLEF, LORSQUE < CELLE-CI EST A L'ETAT IDLE, ON TROUVE LE < DESCRIPTEUR DE L'ENREGISTREMENT, SOI LA < LA TETE ET LA QUEUE DE LA LISTE DE SECTEURS < CHAINES QUI LE CONSTITUENT. LORSQUE LA CLEF < EST A L'ETAT IN USE, CE DESCRIPTEUR EST RENDU < RESIDENT, ET C'EST LE ROLE DE CETTE ROUTINE < DE LUI ALLOUER 2 MOTS EN MEMOIRE. < < < I M P O R T A N T : < LORS D'UNE REINITIALISATION DU SYSTEME < ('SYSINI'), SI UN OU PLUSIEURS DESCRIPTEURS < D'ENREGISTREMENT SONT DIFFERENTS DE 0, < CELA SIGNIFIE QUE CERTAINEMENT DES ENREGISTRE- < MENTS ETAIENT ENCORE OUVERTS LORS DU < RECHARGEMENT DU SYSTEME ; CONNAISSANT AINSI < LE NOM INTERNE DES FICHIERS EN CAUSE (VOIR < LE MOT 'DENI' DES DESCRIPTEURS), ON PEUT < CONNAITRE LEUR 'TP', PUIS LA LISTE DES < CLEFS, ET DONC LA CLEF 'IN USE', ET DONC < RESTAURER MANUELLEMENT LES CHAINAGES < D'ENREGISTREMENT SI NECESSAIRE... < < USE L,DCT0 ADESC: EQU $ < < RECHERCHE D'UN DESCRIPTEUR LIBRE : < PSR A LAD &ASXSGF BSR ARLSE < POUR EVITER LES INTERBLOCAGES PLR A < DANS LE CAS OU AUCUN DESCRIPTEUR < N'EST LIBRE. RQST &ASEMDE < ALLOCATION D'UN DESCRIPTEUR, < AVEC ATTENTE EVENTUELLE. RQST &ASXSGF <<<<PHASE CRITIQUE DU SGF. PSR A,X LAD ATODE < ADRESSE DU RELAI VERS LA TABLE < D'OCCUPATION DES DESCRIPTEURS. NTRN LXI X7/NBITMO TRN < (X)=NOMBRE DE MOTS DE LA TABLE D'OCCU- < PATION DES DESCRIPTEURS. BSR ASOBT < RECHERCHE DU 1ER LIBRE, DONT LE < NUMERO EST RENVOYE DANS A. JG SYSRD5 < OK, (X) EST CORRECT... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ATTENTION, SI ON RELANCE LE < SYSTEME, L'ADRESSE DU DESCRIPTEUR < RENVOYEE SERA MAUVAISE, PUIS < QUE CE DERNIER N'EXISTE PAS... < SYSRD5: EQU $ SLLS UDE=K < CONVERSION DU NUMERO DE DESCRIP- < TEUR EN UN NUMERO DE MOT DANS < LE POOL. AD ATDE < (A)=@MOT DU DESCRIPTEUR ALLOUE. XR A,W < (A)=SAVE W, (W)=ADRESSE DESCRIPTEUR... DO UDE STZ K=FCDO,W < NETTOYAGE AVANT UTILISATION... LX VAR+FILNOM < (X)=NOM INTERNE DU FICHIER, QUE L'ON STX DENI,W < DUPLIQUE DANS LE DESCRIPTEUR... XR A,W < RESTAURE... STA VAR+AFILT < ADRESSE DE L'ADRESSE DE LA < TETE DE L'ENREGISTREMENT. ADRI DEMO1-DEMO0,A STA VAR+AFILQ < ADRESSE DE L'ADRESSE DE LA < QUEUE DE L'ENREGISTREMENT. PLR A,X RSR PAGE < < < R E L E A S E D ' U N D E S C R I P T E U R < D ' E N R E G I S T R E M E N T : < < < ARGUMENT : < AFILT (DCTF) =ADRESSE DESCRIPTEUR A RELEASER. < < USE L,DCT0 RDESC: EQU $ < < < A T T E N T I O N : < ON EST DANS UNE PHASE < CRITIQUE DU 'SGF !!! < < PSR A,X,Y LA VAR+AFILT < RECUPERATION DE L'ADRESSE DU < DESCRIPTEUR A RELEASER. XR A,W < (A)=SAVE W, (W)=ADRESSE DESCRIPTEUR. LX VAR+FILNOM < (X)=NOM INTERNE COURANT, LY DENI,W < (Y)=NOM INTERNE D'OUVERTURE, CPR X,Y < SONT-ILS IDENTIQUES ??? JE RDESC1 < OUI, OUFFF... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ETRE PRUDENT, CAR EN RELANCANT < LE SYSTEME, ON RISQUE D'EFFACER DES < INFORMATIONS UTILISEES PAR UN AUTRE... < RDESC1: EQU $ DO UDE STZ K=FCDO,W < NETTOYAGE POUR LA 'COPY'... XR A,W < RESTAURE... SB ATDE < CONVERSION EN UN NUMERO DE < MOT DANS LE POOL. SLRS UDE=K < (A)=NUMERO DU DESCRIPTEUR A RELEASER. LR A,X < (X)=NUMERO DU DESCRIPTEUR A RELEASER. LAD ATODE < ADRESSE DU RELAI D'ACCES A LA < TABLE D'OCCUPATION DES DESCRIP- < TEURS D'ENREGISTREMENT. LYI FONSB1 < FONCTION SET BIT A 1. BSR ATMOBT < RELEASE DU DESCRIPTEUR. LAD &ASEMDE BSR ARLSE < RELEASE D'UN DESCRIPTEUR PLR A,X,Y RSR PAGE < < < A T T E N T E V E V N E M E N T E T L I B E R A T I O N < P R O V I S O I R E D U S G F : < < < ARGUMENT : < (W)=ADRESSE DE LA DEMANDE ASSOCIEE A L'EVENEMENT. < < USE W,DEM0 WAITR: EQU $ PSR A LAD &ASXSGF < LIBERATION DU SGF BSR ARLSE PLR A BSR ACHANW < ATTENTE EVENEMENT. RQST &ASXSGF < RETOUR SGF RE-ALLOUE. RSR < RETOUR SGF RE-ALLOUE. PAGE < < < H A N D L E R D U S G F : < < < DEFINITION : < LE HANDLER SGF EST FAIT D'UN CERTAIN NBRE DE ROUTINES < SPECIFIQUES, REALISANT DES FONCTIONS BIEN DETERMINEES : < < - OPEN NEW ENREGISTREMENT, < (=INSERTION D'UNE NOUVELLE CLEF DANS LE CATALO- < GUE DU FICHIER, AVEC INITIALISATION DE L'ENREGISTRE < MENT) < - OPEN OPLD ENREGISTREMENT, < (REPRISE D'UN ANCIEN ENREGISTREMENT POUR < POUR RELECTURE OU MISE A JOUR) < - OPEN NEXT ENREGISTREMENT, < (ACCES A L'ENREGISTREMENT DONT LA CLEF < EST LA CLEF SUIVANT LA CLEF OUVERTE < PRECEDEMMENT) < - CLOSE RELEASE ENREGISTREMENT, < (SUPPRESSION DE LA CLEF DU CATALOGUE ET DELETE < DE L'ENREGISTREMENT) < - CLOSE SAVE ENREGISTREMENT, < (ABANDON PROVISOIRE DE L'ENREGISTREMENT, LA CLEF < ETANT CONSERVEE DANS LE CATALOGUE) < - LECTURE SEQUENTIELLE ENREGISTREMENT, < (LECTURE EN SEQUENTIEL D'1 SECTEUR DE L'ENREGISTREMENT) < - LECTURE SEQUENTIELLE ET DELETE ENREGISTREMENT, < (LECTURE EN SEQUENTIEL D'1 SECTEUR DE L'ENREGISTRE- < MENT ET RELEASE DU SECTEUR LU) < - ECRITURE SEQUENTIELLE. < (ECRITURE EN SEQUENTIEL D'1 SECTEUR DE L'ENRE- < GISTREMENT) < < < ARGUMENTS : < 1- ECRITURE, LECTURE (-DELETE) : < (AMDEM)=ADRESSE OCTET DU BUFFER DU DEMANDEUR, < (CODEM)=NBRE D'OCTETS A ECHANGER+2 < POUR LE CHAINAGE SEQUENTIEL DES < ENREGISTREMENTS PAR SGF (USAGE < INTERNE MAIS PREVU PAR L'UTILISATEUR) < 2- OPEN (NEW OU OLD) : < (AMDEM)='PEK' DE LA CLEF, < (CODEM)='PDK' DE LA CLEF. < 3- AUTRES CAS : NEANT. < < DANS TOUS LES CAS, ON A DANS OPDEM LA FONCTION : < BIT12-15= < 0011 : OPEN NEXT, < 0100 : OPEN NEW, < 0101 : OPEN OLD, < 0110 : CLOSE RELEASE, < 0111 : CLOSE SAVE, < 1000 : LECTURE, < 1001 : LECTURE & DELETE, < 0010 : ECRITURE. < BIT0=0 : EN GENERAL, < 1 : DANS LE CAS D'UNE ECRITURE DEMANDE DE < DE PLUS EN CLOSE SAVE DE L'ENREGISTREMENT. < (C'EST LE BIT 'EOF'). < < < NOTION D'ENREGISTREMENT LOGIQUE : < ON APPELLE ENREGISTREMENT LOGIQUE UNE < SUITE SEQUENTIELLE DE SECTEURS CHAINES. L'ACCES < A UN ENREGISTREMENT LOGIQUE NE PEUT QU'ETRE < QUE SEQUENTIEL. < A CHAQUE ENREGISTREMENT LOGIQUE EST ASSOCIE < UNE CLEF PERMETTANT UNE IDENTIFICATION BIUNIVOQUE. < L'ACCES AUX CLEFS EST LUI DIRECT. < < < RAPPEL : < LE CHAINAGE SEQUENTIEL DES SECTEURS SE < FAIT PAR LEUR MOT 0, LE NBRE D'OCTETS < DISPONIBLES EST DONC DE 2*YY7*QUANTA-2. < < < RESULTATS : < AU RETOUR, ON TROUVE DANS 'ETAT0' < LES CODES HEXA-DECIMAUX SUIVANTS : < < (CODES HEXADECIMAUX) < 0000 : OK TOUT C'EST BIEN PASSE, < 8000 : LA CLEF EXISTE DEJA, ALORS QU'UN OPEN NEW < A ETE DEMANDE, < 6000 : LA LISTE DES CLEFS EST VIDE, ALORS QU'UN < CLOSE (SAVE/RELEASE), OU UN < OPEN-OLD A ETE DEMANDE, < OU FIN DE CATALOGUE DES CLEFS, ALORS < QU'UN OPEN NEXT A ETE DEMANDE, < 2000 : LA CLEF EST INEXISTANTE, ALORS QU'UN CLOSE < (SAVE/RELEASE) OU UN OPEN-OLD A ETE < DEMANDE, < 4000 : LA CLEF N'EXISTE PAS, ET ON A PARCOURU < TOUTE SA LISTE SEQUENTIELLE, ALORS QU'UN < CLOSE (SAVE/RELEASE) OU UN OPEN-OLD A < ETE DEMANDE, < 0001 : OPEN ENREGISTREMENT (OLD/NEW) ALORS QU'IL < Y EN A DEJA UN EN COURS, < 0002 : CLOSE (RELEASE/SAVE) DEMANDE ALORS QU'IL < N'Y A JAMAIS EU D'OPEN CORRESPONDANT, < 0003 : ECRITURE DEMANDEE, ALORS QU'IL N'Y A < PAS EU D'OPEN, < 0004 : LECTURE DEMANDEE, ALORS QU'IL N'Y A PAS < EU D'OPEN CORRESPONDANT, < 0005 : DELETE DEMANDE, ALORS QU'IL N'Y A PAS < EU D'OPEN, < 0006 : LECTURE DEMANDEE, ALORS QUE L'ENREGISTREMENT < EST SOIT VIDE, SOIT DEJA ENTIEREMENT LU. < 0008 : UN OPEN (OLD/NEW) EST DEMANDE SUR UNE < CLEF NEGATIVE OU NULLE. < 0009 : OPEN-NEW DEMANDE AVEC UNE < CLEF DE PDK IMPAIRE. < 000A : DEMANDE SGF SUR UNE DCTF CREE PAR UNE < AUTRE TACHE. < 000B : L'OPEN ENREGISTREMENT DEMANDE EST IMPOS- < SIBLE A REALISER ; IL S'AGIT D'UN CAS < RARE CORRESPONDANT AU RECHARGEMENT DU < SYSTEME (PLANTAGE, DEFSEC TROP LONG,...) < ALORS QUE DES FICHIERS SONT OUVERTS : CES < DERNIERS PEUVENT ETRE OUVERTS APRES < RECHARGEMENT ; LES CLEFS RISQUENT ALORS < DE CONTENIR NON PAS LES ADRESSES D'ENRE- < GISTREMENT, MAIS LES ADRESSES DE DESCRIP- < TEUR : ET C'EST CETTE ERREUR !!! < < IF XXPL6-ECCED,,XEIF%, IF ATTENTION : CODES ERRONNES !!! XEIF%: VAL ENDIF IF XXPL8-ECLV,,XEIF%, IF ATTENTION : CODES ERRONES !!! XEIF%: VAL ENDIF IF XXPL9-ECCI2,,XEIF%, IF ATTENTION : CODES ERRONES !!! XEIF%: VAL ENDIF IF XXPL10-ECCI1,,XEIF%, IF ATTENTION : CODES ERRONES !!! XEIF%: VAL ENDIF < < < UTILISATION DE ETAT1 (ETAT+1) : < ETAT1=K : IL N'Y A PAS EU D'OPEN ENREGISTREMENT < (OLD/NEW), < ETAT1=1 : UN OPEN ENREGISTREMENT (OLD/NEW) A EU < LIEU. < < < UTILISATION DE NSPDDR (ZONE VARIABLE) : < - A L'OPEN FILE : NSPDDR<--(NS) DE LA TACHE < FAISANT L'OPEN, < - AU CLOSE FILE : NSPDDR<--0, < - A TOUTE ENTREE DANS LE SGF : < ON COMPARE (NS) & (NSPDDR). < < < UTILISATION DU BIT15 DE PDK : < A PRIORI UN PDK DOIT ETRE UN NBRE PAIR ; < LE CATALOGUE DES CLEFS NE CONTIENT DONC QUE < DES CLEFS PAIRES. LORSQUE L'ON VEUT RECHERCHER < LA CLEF SUIVANTE D'UNE CLEF DONNE, IL < SUFFIT DE CHERCHER A PLACER DANS LE CATALOGUE < LA CLEF IMMEDIATEMENT SUPERIEURE A LA CLEF < DONNEE ; AVEC CES CONVENTIONS DE PARITE, < CETTE CLEF IMMEDIATEMENT SUPERIEURE S'OBTIENT < EN RENDANT PDK IMPAIR... < < < UTILISATION : < (CLEFS,CLEFS+1) CONTIENT EN PERMANENCE LA < CLEF COURANTE OU LA CLEF PRECEDENTE S'IL N'Y < A PAS D'OPEN EN COURS. < 1- OPEN-NEXT : ACCEDERA A LA CLEF SUIVANT CELLE < CONTENUE DANS (CLEFS,CLEFS+1). < OPEN-OLD AVEC UNE PDK IMPAIRE : DONNERA LA < CLEF SUIVANT CELLE DONNEE EN ARG. < < PAGE < < < H A N D L E R G E N E R A L < D E G E S T I O N D E F I C H I E R S : < < < FONCTION : < CE HANDLER EST CHARGE DE LA RECUPERATION < DE LA FONCTION, ET DE L'APPEL DE LA ROUTINE SPECI- < FIQUE. DE PLUS IL INITIALISE A ET B : < (Y)=NOM DIRECT DU FICHIER. < (A)=AMDEM (EVENTUEL PEK), < (B)=CODEM (EVENTUEL PDK). < < DE PLUS, IL IGNORE NSPTYP QUI LUI EST TRANSMIS < DANS A PAR HANDLR. < < USE L,DCT0 USE W,DEM0 HDLFIL: EQU $ < < TEST DE PROPRIETE DE LA 'DCTF' : < LA ARGDEM+ETADEM < ACCES NIVEAU DEMANDEUR. CP VAR+NSPDDR < LE DEMANDEUR EST-IL CELUI QUI < A FAIT L'OPEN... JE E498 < OK, C'EST BON, ENTRONS DANS < LE SGF. < < CAS OU LA TACHE DEMANDEUSE N'EST PAS CELLE QUI A FAIT < L'OPEN DCTF, OU BIEN CAS D'UNE DEMANDE ARRIVANT APRES < QUE CETTE MEME TACHE AIT FAIT UN CLOSE DCTF... < LYI ECEN JMP E497 < < ENTREE DANS LE SGF : < E498: EQU $ LXI MKESEF < MASQUE DE FONCTION. LA ARGDEM+OPDEM ANDR A,X < GENERATION D'UN INDEX D'AIGUILLAGE FONCTI < FONCTION DE CE QUI EST DEMANDE. LA ARGDEM+AMDEM LB ARGDEM+CODEM LY VAR+FILNOM < NOM DIRECT DU FICHIER DANS Y. RQST &ASXSGF <<<<PHASE CRITIQUE DU SGF. BSR &AFOFIL < EXECUTION DE LA FONCTION... LAD &ASXSGF BSR ARLSE E497: EQU $ STY ETAT0 < LA CONDITION DE RETOUT (Y) < EST SAUVEGARDEE DANS ETAT0. RSR PAGE < < < F I L T R A G E E T S - F I L T R A G E D U S G F : < < < FONCTION : < CES ROUTINES SONT CHARGEES DE DE FILTRER LES < DEMANDES QUI ARRIVENT SUR LE HANDLER SGF. EN < EFFET DANS LE CAS OU UN ENREGISTREMENT EST VIDE, < OU DANS LE CAS OU ON EST AU BOUT EN LECTURE, < IL FAUT DIFFERER LES DEMANDES DE LECTURE, < JUSQU'A CE QUE DES DEMANDES D'ECRITURE SOIENT < APPARUES. < < < ARGUMENT : < (L)=ADRESSE DCTF. < < USE L,DCT0 USE W,DEM0 FFILTR: EQU $ LA ARGDEM+OPDEM ANDI MKESEF)MKOPDM < TEST DU BIT12. JAE E411 < OK, PAS DE FILTRAGE (A=K), < IL S'AGIT D'OPEN, CLOSE OU < ECRITURE < < CAS D'UNE LECTURE OU D'UNE LECTUE-DELETE : < FSFILT: EQU $ < < TEST DE PARTAGIBILITE DU FICHIER : EN < EFFET SI LE FICHIER EST NON PARTAGEABLE < IL NE FAUT PAS FILTRER, CAR UNE DEMANDE < BLOQUEE LE SERAIT POUR L'ETERNITE, PERSONNE < NE POUVANT LA DEBLOQUER. < LX VAR+FILNOM < (X)=NOM-DIRECT DU FICHIER. LAI MTSGF < DEMANDE D'ETAT EN RETOUR. BSR AMTEDF < RENVOIE : (A)=ETAT(FICHIER (X)). TBT XBITF2 < TEST DU BIT PARTAGEABLE. LAI NIL-ZERO < PAS DE FILTRAGE A PRIORI. JC E411 < LE FICHIER ETANT NON PARTAGEABLE < PAS DE FILTRAGE. < < CAS DES FICHIERS PARTAGEABLES : < LA VAR+NFILR < TEST DE L'ADRESSE DU PROCHAIN < SECTEUR A LIRE. AND INFINI < < ON A ICI : < (A)=Q8000 : CELA SIGNIFIE QU'IL N'Y A PAS DE < PROCHAIN SECTEUR A LIRE, IL FAUT DONC < FILTRER LES DEMANDES DE LECTURE ET < LECTURE-DELETE. < (A)=K : CELA SIGNIFIE QU'IL Y A UN PROCHAIN < SECTEUR A LIRE, DONC PAS DE FILTRAGE. < E411: EQU $ RSR < A EST OK (=K OU #0). PAGE < < < D E P L A C E M E N T D E S A R G U M E N T S < D ' U N E D E M A N D E A U S G F V E R S < U N E D E M A N D E D I S Q U E : < < < FONCTION : < TRANSFERT DES ARGUMENTS (AMDEM & CODEM) DE LA < DEMANDE AU SGF VERS LA DEMANDE DISQUE DFILDK. < DE PLUS EMPILE DE MANIERE CORRECTE W (@DEMANDE < AU SGF) DANS LA PILE. < < < ARGUMENT : < (W)=ADRESSE DEMANDE AU SGF. < < < RESULTAT : < (W) DE LA DEMANDE AU SGF DANS LA PILE, < (W)=ADRESSE DE DFILDK. < < < A T T E N T I O N : < DETRUIT LE REGISTRE 'A' !!! < < USE L,DCT0 USE W,DEM0 DADF: EQU $ LA NSPTYP TBT TYPAD < L'ADRESSE EST-ELLE BIEN EN OCTETS ??? JNC DADF1 < OUI, OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < VACHEMENT GAFFE (!?!??!), CAR EN < EFFET A MAINTS ENDROITS, ON EXPLOITE < 'AMDEM' EN LA SUPPOSANT A PRIORI EN < ADRESSE OCTETS !!! < DADF1: EQU $ LA ARGDEM+AMDEM < ACCES A L'ADRESS D'OCTET DU < BUFFER DEMANDEUR. STA VAR+AFILDK+AMDEM LRM A WORD YY8Q < (A)=COMPTE D'OCTETS MAXIMUM. CP ARGDEM+CODEM < VALIDATION DU CODEM... JGE SYSRD6 < OK, CODEM<== YY7*2*QUANTA. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < EN REALITE CE N'EST PAS UNE < ERREUR, ON POURRA RELANCER < LE SYSTEME, A CONDITION DE METTRE < AU PREALABLE DANS LE 'CODEM' LA < VALEUR 'YY8*QUANTA'='YY8Q'... < LRM A WORD YY8Q STA ARGDEM+CODEM < ET VOILA, C'EST PLUS SUR EN LE < PROGRAMMANT... SYSRD6: EQU $ LA ARGDEM+CODEM < (A)=COMPTE D'OCTETS ARGUMENT. < < < A T T E N T I O N : < 1 MOT (2 OCTETS) DOIT ETRE < RESERVE EN TETE DE CHAQUE BUFFER SGF < POUR LE MOT DE CHAINAGE SEQUENTIEL. < CE MOT DOIT ETRE INCLU DANS LE COMPTE < D'OCTETS DE LA DEMANDE SGF, MAIS DOIT < ETRE LIBRE DE TOUTE INFORMATION, SOUS < PEINE DE SA DESTRUCTION... < < STA VAR+AFILDK+CODEM LA ARGDEM+OPDEM < ACCES A LA FONCTION. ANDI FGR?FGW < (A)=K SI LECTURE, (A)=2 SI ECRITURE. STA VAR+AFILDK+OPDEM PLR A < 'A' RECOIT LE 'P' DE RETOUR DE DADF. PSR W < SAVE (W)=@DEMANDE AU SGF. PSR A < REMISE DU 'P' DE RETOUR EN PILE. LAD VAR+DFILDK LR A,W < (W)=@DFILDK. RSR 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 A V E C < O U S A N S A T T E N T E : < < < ARGUMENTS : < (W)=ADRESSE DEMANDE D'E/S (DFILDK), < (X)=ADRESSE DU SECTEUR A ECHANGER (SUR 'DKM'). < (Y)=K SI ATTENTE DE FIN D'ENTREE-SORTIE, < =1 SI PAS D'ATTENTE. < < XXGF2:: VAL K < ATTENTE DE FIN D'E/S, XXGF3:: VAL XXGF2+I < PAS D'ATTENTE DE FIN D'E/S. < < < PHILOSOPHIE DU MODE PRIORITAIRE : < IL EST POSSIBLE DE RELEASER UN SECTEUR < APRE AVOIR LANCER UNE E/S SANS ATTENTE < SUR LUI, MAIS POUR EVITER QU'UNE < AUTRE TACHE QUI SE L'AIT FAIT ALLOUER < NE FASSE DESSUS UNE E/S PRIORITAIRE, IL < FAUT QUE L'E/S PRECEDENT LE RELEASE SOIT < ELLE-MEME PRIORITAIRE. < C'EST POURQUOI ICI, LORSQU'UNE DEMANDE < EST FAITE 'SANS ATTENTE', ON LUI DONNE < LE MODE PRIORITAIRE. < < USE W,DEM0 ELESS: EQU $ PSR A < < ENVOI DE LA DEMANDE : < STX ARGDEM+ASDEM < MISE EN PLACE DE L'ADRESSE < SECTEUR DANS DFILDK LBY NSPTYP < RECUPERATION DU NVP DKM/DKB. XWOR%1: VAL MSPTYP=K < POSITION DU 'NSP'... XWOR%1: VAL NBITMO-B-XWOR%1 SLLS PRIO-XWOR%1 < CADRAGE... ADR Y,A < POSITIONNEMENT DU BIT DE MODE < PRIORITAIRE A 0 OU 1 SUIVANT < LA VALEUR DE Y SLLS MSPTYP=K-PRIO+XWOR%1 < CADRAGE DU 'NSPTYP'. STA NSPTYP BSR ACHAND < ENVOI DE LA DEMANDE. < < TEST D'ATTENTE : < CPZR Y JNE E413 < LE RETOUR IMMEDIAT EST DEMANDE. < < CAS OU L'ATTENTE EST DEMANDEE : < BSR AWAITR < ATTENTE AVEC DEBLOCAGE DU SGF. E413: EQU $ < < A PRIORI, ON INHIBE SYSTEMATIQUEMENT < LA TRANSMISSION DE (SLO,SLE) PAR LE 'SGF' : < LA BITSEM SBT BISOSE STA BITSEM PLR A RSR PAGE < < < A L O C A T I O N - R E L E A S E < S E C T E U R A V E C A T T E N T E : < < < ARGUMENT : < CODEM(DFILS)=NBRE DE SECTEURS A ALLOUER/RELEASER, < BIT0(A)=K : RELEASER, < =1 : ALLOUER, XXGF1:: VAL L < DEFINITION DU BIT ALLOUER/RELEASER. < BIT1-15(A)=ADRESSE MOT DE LA LISTE DES SECTEURS < A ALLOUER/RELEASER. < < < A T T E N T I O N : < DETRUIT LE REGISTRE 'A' !!! < < USE W,DEM0 USE L,DCT0 ELARS: EQU $ PSR W TBT XXGF1 < TEST DU SENS ALLOUER/RELEASE. RBT XXGF1 < RAZ DU BIT0 A PRIORI. STA VAR+AFILS+AMDEM < MAJ DE DFILS. LAD VAR+DFILS LR A,W < (W)=@DEMANDE ALLOCATION/RELEASE. LAI NSPREL ADCR A < (A)=NSPGET/NSPREL SUIVANT QUE < BIT0(A)=1 OU 0. IF NSPGET-NSPREL-BIT,,XEIF%, IF ATTENTION : LE 'ADCR' EST MAUVAIS !!! XEIF%: VAL ENDIF SWBR A,A STA NSPTYP < MAJ DE LA DEMANDE. BSR ACHAND < ENVOI DE LA DEMANDE. BSR AWAITR < ATTENTE D'ALLOCATION/RELEASE < AVEC DEBLOCAGE DU SGF. PLR W RSR PAGE < < < A C C E S A T P L O R S < D ' U N O P E N - C L O S E < E N R E G I S T R E M E N T : < < < ARGUMENTS : < (L)=ADRESSE DCTF. < < < RESULTAT : < (W)=ADRESSE DE LA TP DU FICHIER EN MEMOIRE. < < USE L,DCT0 ACTP2: EQU $ PSR A,X LX VAR+FILNOM < (X)=NOM-DIRECT DU FICHIER. XWOR%1: VAL COSBT?XBITF3=FMASK(K=FCINST XWOR%1: VAL COSBT?XBITF4=FMASK(K?XWOR%1=FCINST LAI XWOR%1 < ETAT FICHIER 'TRAVAIL' POUR < NE PAS AVOI D'ENNUIS. BSR AACTP < < ON A ICI : < (W)=ADRESSE DE LA TP DU FICHIER EN MEMOIRE. < PLR A,X RSR PAGE < < < I N I T I A L I S A T I O N D ' U N O P E N < E N R E G I S T R E M E N T : < < < ARGUMENTS : < (Y)=Q8000.OR.NOM-DIRECT SI OPEN NEW (INSERT), < ='0800.OR.NOM-DIRECT SI OPEN OLD (TEST-OPEN), < (L)=ADRESSE DCTF. < (A,B)=LA CLEF. < < < RESULTAT : < (Y)=K SI OPEN AUTORISE, < =1 SI OPEN IMPOSSIBLE UN OPEN AYANT < DEJA EU LIEU. < =8 SI OPEN IMPOSSIBLE CAR DEMANDE POUR UNE < CLEF NEGATIVE OU NULLE. < =11 : OPEN IMPOSSIBLE PARCEQUE LE FICHIER < A DES PETITS PROBLEMES SUITE A UN < RECHARGEMENT DU SYSTEME... < < < A T T E N T I O N : < DETRUIT LE REGISTRE 'X' !!! < < < T R E S I M P O R T A N T : < TANT QUE LA 'TP' DU FICHIER EST EN < MEMOIRE, ON NE PEUT FAIRE DE RLSE < SEXSGF DE DEBLOCAGE DU SGF... < EN EFFET ON RISQUERAIT DE MODIFIER < L'ETAT DES TP EN MEMOIRE... < < USE L,DCT0 USE W,DEM0 OPN1: EQU $ < < TEST D'UN EVENTUEL OPEN-ENREGISTREMENT EN COURS : < LX ETAT1 CPZR X JE E414 < OK, ON PEUT OUVRIR. < < CAS OU IL Y A DEJA UN OPEN EN COURS : < LYI ECFC < ERREUR 'OPEN DEJA EN COURS'. JMP E415XY < < VALIDATION DE LA CLEF (PEK) : < E414: EQU $ LXI K < INITIALISATION DU COMPTE DE BITS A 1. TBT BXKE0 < BIT LIBRE/OCCUPE. ADCR X TBT BXKE1 < BIT DE DEBORDEMENT. ADCR X TBT BXKE2 < BIT DE DERNIER DESCRIPTEUR. ADCR X TBT NBITMO+BXKE4 < BIT IN USE/IDLE. ADCR X CPZR X < X-A-T'IL AU MOINS UN BIT A 1 ??? JE E466 < NON, ILS SONT TOUS A 0, LA CLEF < PARAIT BONNE... (A NOTER QU'ELLE < PEUT AVOIR UNE 'PEK' NULLE : CECI DANS < LE CAS D'UN OPEN 'NEXT'... LYI ECEC1 < ERREUR CLEF NEGATIVE OU NULLE. JMP E415XY < < CAS OU L'OPEN EST POSSIBLE : < E466: EQU $ BSR AADESC < ALLOCATION D'UN DESCRIPTEUR < D'ENREGISTREMENT. LX VAR+AFILT < RECUPERATION DE L'ADRESSE < DU DESCRIPTEUR D'ENREGISTREMENT < ALLOUE. STX TEST1 < POUR MISE A JOUR DU DESCRIPTEUR < DE LA CLEF (A,B). PSR W BSR AACTP2 < ACCES A LA TP DU FICHIER DANS W. BSR APLSC < ARGUMENTS : A,B,Y,W. PLR W < < TEST DES CONDITIONS DE RETOUR DE PLSC : < CPZR Y JE E415 < OK, L'OPEN EST BON. < < CAS OU L'OPEN NE PEUT AVOIR LIEU : < E415Y: EQU $ BSR ARDESC < RELEASE DU DESCRIPTEUR < D'ENREGISTREMENT. JMP E415XY < Y CONTIENT LE CODE ERREUR. < < CAS OU L'OPEN PEUT AVOIR LIEU : < E415: EQU $ LA PEK < EN FAIT PEK&PDK N'ONT ETE < MODIFIES QUE SI L'ON A FAIT < UN OPEN-NEXT. LB PDK < (ALORS PLSC A MODIFI PEK ET PDK). STA VAR+CLEFS+CLEFSE < SAUVEGADRE DE LA CLEF DANS LA STB VAR+CLEFS+CLEFSD < 'DCTSGF'. BXKE44:: VAL BXKE4 < BXKE44 PERMET DE PRECISER RAPIDEMENT < LA VALEUR DE LA 'PDK' : < 0 : (PDK)=K (CAS FREQUENT), < 1 : (PDK)#0... CPZR B < COMMENT EST LA 'PDK' ??? JE E415XX < NULLE, YOUPI... SBT BXKE44 < NON, ALORS ON LE MENTIONNE DANS 'PEK'... E415XX: EQU $ XR A,X BSR ASTBOX < MISE EVENTUELLE DANS LA 'BOX' DE < 'PEK' ET DE 'BXKE44'. XR A,X IF BXKE44-BXKE0,,XEIF%, IF ATTENTION : 'BXKE44' EST MAL CHOISI !!! XEIF%: VAL ENDIF < < MISE EN RESIDENT DU DESCRIPTEUR DE L'ENREGISTREMENT ASSOCIE < A LA CLEF (A,B) : < LA TEST1 JAL E415X < ILS'AGIT BIEN D'UNE ADRESSE DE < SECTEUR DISQUE 'DKM'... CP NSMGB < L'ADRESSE PRESUMEE (A) EST-ELLE < BIEN DANS L'ESPACE ALLOUABLE DE 'DKM' ??? IF XDKSYM,,XEIF%, IF ATTENTION : LES 2 TESTS CI-DESSUS SONT MAUVAIS !!! XEIF%: VAL ENDIF JGE E415X < OUI, C'EST BIEN UNE ADRESSE DISQUE... LYI ECDSYS < NON, 'OPEN' REFUSE... JMP E415Y < ET ON ARRETE LA... E415X: EQU $ IC ETAT1 < MEMORISATION D'UN OPEN ENREGIS- < TREMENT EN COURS... STA &VAR+AFILT < MAJ DE LA TETE DE L'ENREGISTREMENT. LA TEST2 STA &VAR+AFILQ < MAJ DE LA QUEUE DE L'ENREGISTREMENT. LA INFINI STA VAR+NFILW < INITIALISATION DE L'ADRESSE DU < PROCHAIN SECTEUR A ECRIRE. E415XY: EQU $ < SORTIE... RSR PAGE < < < O P E N - O L D 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)=LA CLEF. < < USE L,DCT0 USE W,DEM0 OPNOK: EQU $ JALE OPNOK1 < POUAHHH... (PEK<=0) CP C1FFF < VALIDATION SUPERIEURE... JLE OPNOK3 < OK... OPNOK1: EQU $ LYI ECEC1 < (Y)=CODE D'ERREUR... JMP E416XX < VERS LA SORTIE... OPNOK3: EQU $ TBT NBITMO+BXKE4 < LE BIT 'BXKE4' DE 'PDK' DOIT ETRE A 0 : JNC OPNOK4 < EFFECTIVEMENT... LYI ECEC2 < (Y)=CODE D'ERREUR... JMP E416XX < VERS LA SORTIE... OPNOK4: EQU $ < < TRONC COMMUN "OPEN OLD" ET "OPEN NEXT" : < OPNONK: EQU $ XWOR%1: VAL COSBT?BXPL2=FMASK(K=FCINST XWOR%2: VAL MOCG=K XWOR%2: VAL -XWOR%2 < POUR UN DECALAGE A DROITE... LXI XWOR%1>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'<EOF>, 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)<XXTP+NSTP : LE SECTEUR DEMANDE < PARTIENT DONC A 'DKF'... E262X2: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < BIEN EXAMINER L'ADRESSE SECTEUR (X)... < E262X3: EQU $ < < < C A S D E S S E C T E U R S D E ' D K F ' : < < CPI FGR < EST-CE UNE LECTURE ??? LAD RTP < OUI A PRIORI : (A)=ADRESSE(RTP). JE E262X4 < OUI... LAD WTP < NON, (A)=ADRESSE(WTP)... E262X4: EQU $ LR A,W < (W)=ADRESSE D'UNE DEMANDE DE LECTURE < OU D'ECRITURE D'UNE 'TP'... LB PLSCAM < (B)=ADRESSE OCTET DU BUFFER, STB ARGDEM+AMDEM < QUE L'ON TRANSFERE DANS LA DEMANDE < DE 'TP' VERS 'DKF'. STX ARGDEM+ASDEM < DE MEME, ON MET EN PLACE L'ADRESSE < SECTEUR DE LA 'TP' SUR 'DKA'... BSR ACHAND < ENVOI DE LA DEMANDE A 'DKA', BSR ACHANW < ET ATTENTE DE FIN D'OPERATION... JMP E262X7 < VERS LA SORTIE... < < < C A S D E S S E C T E U R S ' D K M ' : < < E262X1: EQU $ < < GENERATION DE 'PLSCDK' : < STA PLSCDK+T+OPDEM < MISE A JOUR DE LA DEMANDE. LR X,A < (A)=ADRESSE DU SECTEUR 'DKM'... CP INFINI JE E262X6 < DANS LE CAS DE L'INFINI, C'EST < QU'IL Y A EU UNE ERREUR DE LECTURE < DISQUE AU PREALABLE ; ON VA SIMULER < UNE LECTURE TRUANDE... STX PLSCAS < ADRESSE SECTEUR LAI NSPDKB < DANS TOUS LES CAS, ON DEMANDE < 'DKB' QUI SRRA PEUT-ETRE UTILISE < EN TRANSPARENT. XWOR%1: VAL MSPTYP=K XWOR%1: VAL NBITMO-XWOR%1 SBT PRIO-XWOR%1 < MODE PRIORITAIRE. SWBR A,A < LE NSP EST MIS DANS L'OCTET < GAUCHE DE 'A', STA PLSCDK+XXNSP < MISE A JOUR DE LA DEMANDE. < < VALIDATION "PRIMITIVE" DE < CE QUE L'ON VA ECRIRE, S'IL < S'AGIT D'UNE ECRITURE : < TBT TYPAD < L'ADRESSE DU BUFFER EST-ELLE D'OCTETS < OU DE MOTS ??? LA PLSCDK+T+AMDEM < (A)=ADRESSE-MOT A PRIORI... JC E262X5 < EFFECTIVEMENT... SLRS NOCMO=K < (A)=ADRESSE-OCTET CONVERTIE EN MOTS... E262X5: EQU $ LR A,W < (W)=ADRESSE DU PREMIER MOT DU BUFFER. LA PLSCDK+T+OPDEM < (A)=FONCTION DEMANDEE : CPI FGW < EST-CE UNE ECRITURE ??? JNE E262XA < NON, RIEN A VALIDER AVANT L'OPERATION... IF XCHSGF-XXSFS,,XEIF%, IF ATTENTION : LE CHAINAGE DE TYPE 'NEXT' DOIT ETRE IF TOUJOURS A LA MEME PLACE (EN FAIT, CE TEST EST IF INUTILE, CAR ON NE PASSE ICI QUE POUR DES IF SECTEURS DE LISTE DE CLEFS...) !!! XEIF%: VAL ENDIF XWOR%1: VAL XCHSGF?XXSFS LA XWOR%1,W < (A)=VALEUR DU CHAINAGE DE TYPE 'NEXT' < DU SECTEUR COURANT A ECRIRE... SLRS DECON < (A)=NUMERO PAR RAPPORT A 0 DE SON 'GB' : CPI XDKSYM < NE SERAIT-CE PAS CELUI DE LA SIMULATION < DE 'DKF' SUR 'DKM' ??? JNE E262XB < NON, ON ADMET QUE C'EST BON... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER EXAMINER LE BUFFER DONT < L'ADRESSE EST DANS 'W', ET VOIR < CE QU'IL CONTIENT, ET PEUT-ETRE < LE CORRIGER !!! < E262XB: EQU $ E262XA: EQU $ LR W,B < (B)=SAUVEGARDE DE L'ADRESSE DU BUFFER... < < ENVOI DE LA DEMANDE 'PLSCDK' : < LAD PLSCDK LR A,W < (W)=ADRESSE DE LA DEMANDE ARGUMENT. BSR ACHAND < ENVOI DE LA DEMANDE A 'DKB', ET BSR ACHANW < ATTENTE DE FIN D'OPERATION < POUR LE COMPTE DU DEMANDEUR. < < VALIDATION "PRIMITIVE" DE < CE QUE L'ON A LU, S'IL < S'AGIT D'UNE LECTURE : < LA PLSCDK+T+OPDEM < (A)=FONCTION REMPLIE : CPI FGR < FUSSE UNE LECTURE ??? JNE E262XC < NON, RIEN A VALIDER... LR B,W < OUI : < (W)=ADRESSE DU BUFFER : LA XWOR%1,W < (A)=CHAINAGE 'NEXT' PRESUME, SLRS DECON < (A)=NUMERO PAR RAPPORT A 0 DU 'GB' < D'APPARTENANCE DE CE CHAINAGE : CPI XDKSYM < NE SERAIT-CE PAS LE 'GB' DE SIMULATION < DE 'DKF' SUR 'DKM' ??? JNE E262XD < NON, ON ADMET QUE C'EST BON... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE : < ALLER VOIR LA MEMOIRE VIRTUELLE < 'DKB' SI CE FICHIER Y AVAIT DROIT < (VOIR LA LISTE 'TNSPF' INDEXEE PAR < LE 'NSPF'), ET COMPARER LA PAGE < VIRTUELLE ; SINON, ALLER VOIR CE < QU'IL Y A SUR 'DKM' !!! < E262XD: EQU $ E262XC: EQU $ < < < S O R T I E C O M M U N E ' D K A ' / ' D K B ' : < < E262X7: EQU $ < CAS DES SORTIES SIMULEES... PLR A,B,W RSR < < < C A S D E S S U I T E S D ' U N E E R R E U R < A N T E R I E U R E D E L E C T U R E : < < E262X6: EQU $ PSR X,L LA PLSCAM SLRS NOCMO=K LR A,L < (L)=ADRESSE MOT DU BUFFER DE LECTURE... LAI K XWOR%1: VAL MOCG=K XWOR%2: VAL W>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...