LEX 'SECURELX' * (c) Copyright PPC Paris 1986 CON(2) 1 CON(2) 79 CON(2) 79 REL(5) SEC/U Comme les TOKENs de SECURE * et de UNSECURE ne se suivent NIBHEX F pas, on ne peut les * inclure ds le mÁme LEX; mais comme REL(4) (Tx00)+1 ces 2 ordres utilisent les * mÁmes routines, il faut CON(4) 0 chaÑner les LEX qui les * contiennent, ce qui ne peut pas CON(5) 0 faire en utilisant les * pseudos-po habituelles (M.M.) CON(3) 0 REL(5) Secure CON(1) 13 Tx00 CON(1) 11 NIBASC 'SECURE' CON(2) 79 NIBHEX 1FF =BSERR EQU #0939A =CNFFND EQU #109AC =CURRST EQU #2F55D =EOLCK EQU #02A7E =EOLXCK EQU #05405 =FILSK+ EQU #06F1D =FINDF+ EQU #09F63 =FSPECe EQU #02F02 =FSPECp EQU #03CC5 =FSPECx EQU #09F2D =LOCADR EQU #0A611 =MAINST EQU #2F558 =NXTSTM EQU #08A48 =POLL EQU #12337 =PURGDC EQU #05745 =RAMROM EQU #0A5F7 =RESPTR EQU #03172 =ROMCID EQU #00BFE =ROMFND EQU #1102F =S-R0-0 EQU #2F871 =S-R0-1 EQU #2F876 =S-R0-2 EQU #2F87B =S-R0-3 EQU #2F880 =eDVCNF EQU #00040 =eFACCS EQU #0003C =lFNAMh EQU #00010 =lFTYPh EQU #00004 =oFLENh EQU #00020 =pFPROT EQU #0000B =tALL EQU #000F8 =tKEYS EQU #000CF ENDTXT * * * Routine de compilation des nouveaux ordres * UN/SECURE: * UN/SECURE [Nom de fichier][:]/ALL/keys * * Secp GOSBVL =EOLCK t(UN)SECURE suivit d'un * EOL? GONC Secp10 Non Resptr GOVLNG =RESPTR Oui; alors il n'y a rien È * rajouter Secp10 GOSUB Resptr Restaure D1 GOSBVL =FSPECp t(UN)SECURE suivit d'un * Nom de fichier et/ou d'un type RTNNC de mÅmoire? LC(2) =tALL Non; peut-Étre alors de * ALL? ?A=C B GOYES Secp11 Si oui, laissons le * systÉme finir la dÅcompilation LC(2) =tKEYS Ne serait-ce pas KEYS * plutÂt que ALL? ?A#C B GOYES Fspece Non; l'utilisateur a donc * Åcrit n'importe quoi Secp11 RTNCC Non; laissons le systÉme * agir Fspece GOVLNG =FSPECe (En dÅfinitive ns sommes * plus rusÅ que l'utilisateur) Purgdc GOVLNG =PURGDC STITLE ExÅcution de (UN)SECURE ********************************************************************* ********************************************************************* ** ** Nom: Secure - Execute l'ordre SECURE ** Uecure - Execute l'ordre UNSECURE ** ** Classe: STEXEC ** ** But: Execute l'ordre (UN)SECURE ** ** Contitions d'entrÅe: ** ** D0 pointant aprÉs tSECURE ou ** tUNSECURE ** P=0 ** ** Etat È la sortie: ** via NXTSTM ** ** Registres/RAM utilisÅe(s): ** A-D,D1,D0,R0-R3 ** STMTR0 (En entier), S0-S2,S6-S8,S11 ** ** Ss-Pgm: ** CNFFND,EOLXCK,FILSK+,FINDF+,FSPECx,POLL ** ROMFND ** ** Nb de registres de la pile de retour utilisÅs: ** 6 ** ** DÅtails: SECURE [Nom de fichier][:]/ALL/keys ** ** Application(s) futures: ** La modification de la seule routine Sec95 ** permettra d'Åtendre la ** nouvelle syntaxe de (UN)SECURE È: ** EN/DISABLE, PURGE, HELP... ** Les drapeaux S3-S6,S9-S10 sont inutilisÅs. ** ** CrÅation: 17/01/86 J-J Moreau D'aprÅs la ** routine CAT de N.N. ** ********************************************************************* ********************************************************************* REL(5) =Purgdc REL(5) =Secp Secure ST=0 11 ST11=0 uniquement si l'on * ÅxÅcute l'ordre SECURE Sec-1 A=DAT0 B Pour un commentaire * dÅtailÅe de cette routine, qui n'a GOSBVL =EOLXCK que peu d'intÅrÁt en * elle-mÁme (On n'y fait que du GONC Sec05 calcul) reportez-vs aux * IDS vol.3 (Fonction CAT). D1=(5) =CURRST Vs y trouverez un * commentaire fort dÅtaillÅ. C=DAT1 A D1=C Sec00 GOSUB Sec95 (Remarquez que l'on * n'arrive ici que s'il n'y a qu'un GOTO Nxtstm seul fichier È * (dÅ)sÅcuriser) Sec05 P= 15 LCHEX E P= 0 D1=(5) =S-R0-3 DAT1=C S LC(2) =tALL ?A=C B GOYES Sec39 C=0 S DAT1=C S GOSBVL =FSPECx GONC Sec38 Bserr GOVLNG =BSERR Sec38 GOSBVL =FINDF+ GONC Sec00 ?ST=1 6 GOYES Bserr ?C=0 S GOYES Bserr C=D S C=C-1 S GONC Sec40 Sec39 GOTO Sec10 Sec40 C=C-1 S GOC Sec70 GOSBVL =POLL CON(2) =pFPROT GOC Bserr ?XM=0 GOYES Nxtstm D=D+1 S D=D+D S GOC Fspec+ ?A#0 W GOYES Sec42 Fspec+ GOTO Fspece Sec42 C=0 A LC(2) =eFACCS GONC Bserr (B.E.T.) Sec70 D=D+1 B GONC Sec82 D1=(5) =S-R0-3 DAT1=C S GOSUB Romchk GONC Sec90 Sec34 C=0 A LC(2) =eDVCNF GOTO Bserr Sec82 GOSUB Romf-1 GOC Sec34 CD1EX GOTO Sec11 Secal? Secalp D1=(5) =S-R0-3 C=DAT1 S ?C#0 S GOYES Sec84 Nxtstm GOVLNG =NXTSTM Sec84 C=C+1 S GONC Seccnt Sec85 GOSBVL =ROMFND Sec87 GOC Nxtstm Sec90 A=DAT1 B ?A=0 B GOYES Sec85 CD1EX GOTO Sec11 Seccnt DAT1=C S GOSUB Romchk GOTO Sec87 Sec10 D1=(5) =MAINST C=DAT1 A Sec11 D1=(5) =S-R0-1 DAT1=C A GOTO Eoflc+ Eoflch A=C A GOSBVL =FILSK+ Eoflc+ D1=C A=DAT1 B ?A#0 B GOYES Eoflch D1=(5) S-R0-2 DAT1=C A D1=(5) S-R0-1 A=DAT1 A D0=A C=DAT0 B ?C=0 B GOYES Secal+ D1=D1- 5 Sec17 DAT1=A A D1=A GOSUB Sec95 D1=(5) S-R0-0 A=DAT1 A C=0 A LC(2) =oFLENh A=A+C A D0=A A=DAT0 A CD0EX A=A+C A D0=A C=DAT0 B ?C#0 B GOYES Sec17 Secal+ GOTO Secalp * * * Voici la routine qui se charge de * (dÅ)sÅcuriser un fichier. C'est elle que * l'on aura soin de modifier si l'on veut Åtendre * le domaine d'action de * certaines ordres comme ENABLE... (Cf ci-dessus) * On n'a en fait que 3 choses È savoir pr * pouvoir modifier ce LEX: * 1- S3-S5, S9-S10 ne sont utiliser ni par * Sec-1 ni par Sec95 * 2- D1 @ l'en-tÁte du fichier traitÅ * 3- R0-R3 ne doivent pas Átre modifiÅs * * Sec95 CD1EX C(A) @ en-tÁte du fichier * traitÅ GOSBVL =LOCADR DÅtermine quel type de * mÅmoire le contient GOSBVL =RAMROM Est de la mÅmoire vive * (RAM ou IRAM)? GOC Sec96 GOTO Nxtstm Sec96 D1=D1+ lFNAMh D1 @ champ S de l'en-tÁte D1=D1+ lFTYPh . A=DAT1 B (B sert È gagner de la * place) LCHEX 1 ?ST=0 11 Secure? GOYES SecSe LCHEX E EnlÉve la protection du * fichier A=A&C P GONC SecDn (B.E.T.) SecSe A=A!C P ProtÉge le fichier SecDn DAT1=A P RTN Romchk P= 0 (D'aprÉs 1 routine HP) LC(2) =ROMCID GOSBVL =CNFFND ?A=0 X RTNYES D1=D1+ 1 B=A X C=DAT1 8 D=C W D1=D1+ 3 C=DAT1 3 D1=D1+ 3 C=DAT1 S C=C+1 S D=C S D1=D1+ 4 CSL A CSL A LCHEX 8 AD1EX D1=C ASL W ASL W ASL W A=B X R1=A RTNCC Romf-1 D=D-1 B C=D A R3=C GOSUB Romchk RTNC GONC Romf-3 (B.E.T.) Romf-2 GOSBVL =ROMFND RTNC Romf-3 C=R3 ?C#D B GOYES Romf-2 RTNCC * * * 2Éme partie du LEX * * SEC/U CON(2) 1 CON(2) 90 CON(2) 90 CON(5) 0 Plus aucun LEX n'est * chainÅe È celui-ci NIBHEX F REL(4) (Tx01)+1 CON(4) 0 Aucune table de messages CON(5) 0 Aucun routine * d'interception de polls CON(3) 0 REL(5) Uecure Point d'entrÅe de l'ordre * UNSECURE CON(1) 13 Tx01 CON(1) 15 NIBASC 'UNSECURE' CON(2) 90 NIBHEX 1FF REL(5) Purgdc REL(5) Secp Uecure ST=1 11 ST11=1 lorsque l'on * ÅxÅcute l'odre UNSECURE GOLONG Sec-1 Utilise la mÁme routine END