< < D U M P < IDP "DUMP" IDP "P. FRANCONNET" ORDI: VAL "@" IF ORDI-" ",XWOR%1,,XWOR%1 ORDI: VAL "T" XWOR%1: VAL 0 IF ORDI-"T",XWOR%1,,XWOR%1 IDP "VERSION T1600" XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 IDP "VERSION SOLAR" XWOR%1: VAL 0 IDP "RELEASE 13 - 16/12/80" PAGE TABLE ZERO: EQU $ DZS '10 < POUR CMS4 DIALOG: VAL 0 < DIALOGUE DUMP/REST POUR SORTIE VISU. < CETTE VARIABLE INDIQUE SI LE PROGRAMME < A OU NON L'INITIATIVE DU DIALOGUE. < POUR L'INSTANT, C'EST LE PROGRAMME < EXECUTE SUR LE SOLAR QUI A L'INITIATIVE. < DONC DIALOG EST FONCTION DE 'ORDI'. < < DIALOG=1 LE PROGRAMME A L'INITIATIVE. < DIALOG=0 LE PROGRAMME N'A PAS L'INI- < TIATIVE. IF ORDI-"S",XWOR%1,,XWOR%1 DIALOG: VAL 1 XWOR%1: VAL 0 IF ORDI-"T",XWOR%1,,XWOR%1 QUANTA: VAL 1 < NOMBRE DE SECTEURS PHYSIQUES < POUR 1 SECTEUR LOGIQUE (SGF) XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 QUANTA: VAL 3 < NOMBRE DE SECTEURS PHYSIQUES < POUR 1 SECTEUR LOGIQUE (SGF) XWOR%1: VAL 0 < LPAP: VAL 128 < LONG PAGE VIRTUELLE SI PUNCH < LPAF: VAL QUANTA*128-1 < LONGUEUR PAGE VIRTUELLE SI FICHIER IF ORDI-"S",XWOR%1,,XWOR%1 LPAD: VAL QUANTA*128-1 < LONGUEUR PAGE VIRTUELLE SI DKU < LE 1ER MOT SERT A NUMEROTER LES BLOCS < S'IL VAUT -1,LE BLOC EST INVALIDE < ET LE DUMP EST FINI < S'IL VAUT -2,LE BLOC EST INVALIDE < ET LE DUMP CONTINUE SUR LE SUIVANT < < PARAMETRES "MEMOIRE COMMUNE" (CDA). < ADDCDA: VAL 0 < ADRESSE DEBUT DE LA ZONE CDA < A UTILISER. LCDAD: VAL '8000-1-ADDCDA+1 < LONGUEUR (MOTS) DE LA ZONE CDA < DISPONIBLE. LPAM: VAL 512-1 < LONGUEUR MOTS PAGE VIRTUELLE SI < MEMOIRE COMMUNE (CDA); UN VERROU + UNE < PAGE VIRTUELLE FERONT DONC UN COMPTE < ROND... XWORK: VAL LPAM+1 < LONGUEUR PAGE VIRTUELLE + VERROU ASSOCIE. XWORK: VAL LCDAD/XWORK IF XWORK,,XWOR%2,XWOR%2 XWORK: VAL -XWORK < RENDRE XWORK POSITIF. XWOR%2: VAL 0 IF XWORK-1,,,XWOR%2 IF ERREUR : IL FAUT AU MOINS DEUX BUFFERS EN CDA. XWOR%2: VAL 0 NBVER: VAL XWORK < NOMBRE DE VERROUS ( = NOMBRE DE BUFFERS < EN CDA). XWOR%1: VAL 0 LBUFV: VAL 50 < LONGUEUR MOTS BUFFER VISU LPAV: VAL LBUFV*8 < LONGUEUR MOTS PAGE VIRTUELLE SI DUMP < SUR LIGNE VISU. IL Y AURA DONC 16 BUFFERS < VISU PAR PAGE VIRTUELLE. NBCOL: VAL 80 < NOMBRE DE COLONNES CARTE < ATTENTION,CE N'EST PAS UN PARAMETRE NBPAUS: VAL 128 < NB DE CARTES AVANT PAUSE POUR < RECHARGEMENT EVENTUEL IF NBPAUS-255,XWOR%1,XWOR%1, IF E R R E U R !!! IF NBPAUS STANDARD EST EXPLOITE PAR LOAD IMMEDIAT, IF DONC, IL DOIT ETRE <= 255. IF POUR UN NOMBRE PLUS GRAND, L'UTILISATEUR A LA IF POSSIBILITE D'UTILISER L'OPTION NON-STANDARD IF A L'EXECUTION. XWOR%1: VAL 0 ACK: VAL "K" < 'OK' : CARACTERE DE SYNCHRONISATION < AVEC LA VISU RECEPTRICE SYNC: VAL "S" < CARACTERE DE RE-SYNCHRONISATION < EN CAS DE "REPRISE" VISU. NSPDAT: VAL '6A < NSP D'ACCES A LA DATE. NSPESC: VAL '57 NSPSTN: VAL '13 X123X: VAL '15-NSPSTN NSPDK1: VAL '23 IF ORDI-"S",XWOR%1,,XWOR%1 NSPDKA: VAL '22 < DISQUE VIRTUEL FIXE NSPDKB: VAL NSPDKA-1 < DISQUE VIRTUEL AMOVIBLE XWOR%1: VAL 0 LNOM: VAL 27 < LONGUEUR MAX NOM EN MOTS VAR: VAL '33 IF ORDI-"S",XWOR%1,,XWOR%1 VAR: VAL '35 XWOR%1: VAL 0 CLEFS: VAL '10 IF ORDI-"S",XWOR%1,,XWOR%1 NB1DKU: VAL '1000+3-1/3*0 < NUMERO DU 1ER BLOC POSSIBLE SUR DKU < (ON SE RESERVE DE QUOI STOCKER LE < CONTENU DU DK FIXE, SOIT '1000 SECTEURS < EN QUANTA 1); < MAIS ATTENTION : PLUS UTILISE !!! NBFDKU: VAL 'FA00-1 < ET DU DERNIER IF NBFDKU,,XWOR%2,XWOR%2 < LE DERNIER DOIT ETRE<'FA00 IF NBFDKU-'FA00,XWOR%2,, IF LE DERNIER BLOC POSSIBLE SUR DKU IF DEPASSE LA LIMITE PHYSIQUE DU DISQUE XWOR%2: VAL 0 IF NB1DKU)NBFDKU,XWOR%2,, < SI LE DEBUT ET LA FIN SONT < DE MEME SIGNE IF NBFDKU-NB1DKU,,XWOR%2,XWOR%2 < IL FAUT DERNIER>=1ER IF LE NUMERO DU DERNIER BLOC IF EST INFERIEUR AU NUMERO DU PREMIER XWOR%2: VAL 0 IF NB1DKU)NBFDKU,,XWOR%2,XWOR%2 < S'ILS SONT DE SIGNE < DIFFERENT IF NBFDKU,XWOR%2,, < LE DERNIER DOIT ETRE NEGATIF IF LE NUMERO DU DERNIER BLOC IF EST INFERIEUR AU NUMERO DU PREMIER XWOR%2: VAL 0 XWOR%1: VAL 0 PAGE WORD DEB1 WORD DEB2 PROG DEB1: EQU $ LRP L BR -1,L < TABLE PILE: DZS 40 < PILE POUR K < IF ORDI-"S",XWOR%1,,XWOR%1 BFDKU: DZS 128*QUANTA < BUFFER DKU DE RELECTURE XWOR%1: VAL 0 < BFI: EQU $ < BUFFER IMPRIMANTE BFI1: DZS 2 < ADRESSE COURANTE ASCI " " < 4 ESPACES. BFIH: DZS 8+1*8/2 < CARACTERES HEXA CODES ASCI: < 8 MOTS PAR LIGNE, < 8 CARACTERES PAR MOT, < PLUS LES ESPACES. WORK: EQU BFIH < ZONE DE TRAVAIL EN RECOUVREMENT < SUR BFIH ! ATTENTION... BFIFCH: EQU $ < FIN DES CARACTERES HEXA CODES ASCI. ASCI " " < 8 ESPACES. BFIASC: DZS 4+0*8/2 < CARACTERES ASCI, IMAGE DES CARACTERES < HEXADECIMAUX. < (+0 AFIN DE NE PAS LAISSER DE "SPACE" < ENTRE CHAQUE MOT...) BFIF: EQU $ < BFI FIN WORD '0D0A < RETURN / LINE FEED. < BP: DZS NBCOL < BUFFER PUNCH BPF: EQU $ < FIN BP < XWOR%1: VAL BP-ZERO XWOR%2: VAL $-ZERO $EQU ZERO+XWOR%1 BV: DZS LBUFV < BUFFER VISU RECEPTRICE: IL RECOIT < DES CARATERES ASCI. BVF: EQU $ < FIN BUFFER VISU LBV: VAL BVF-BV < LONGUEUR MOTS BUFFER VISU $EQU ZERO+XWOR%2 BYTE '0;'6D NOM: DZS LNOM+1 < NOM EN COURS (PRUDENCE) BYTE '04 < POUR RECHERCHE EOT IF ORDI-"S",XWOR%1,,XWOR%1 BYTE 0;"!";0;'6D ACN: DZS 2 < ACN COURANT. ACNF: EQU $ BYTE '04;'04 < POUR RECHERCHE EOT (LE 1ER EOT PEUT < ETRE ECRASE A LA SAISIE DE LA RACINE). XWOR%1: VAL 0 < < < MESSAGES A ENVOYER PAR LE S/P 'ENVOI' < M: EQU $+256 MSTAND: BYTE '6D;"S" ASCI "TANDARD?" WORD 0 MDSB: BYTE '6D;"D" ASCI "/S/E/B/X?" WORD 0 MDEL: BYTE '6D;'07;'07;'07 ASCI "DUMP & DELETE !" WORD 0 MDPF: BYTE '6D;'07;'07;"D" ASCI "K,PARC,FIN ?" WORD 0 MHEXA: BYTE '6D;"H" ASCI "EXA?" WORD 0 MQDK: BYTE '6D;"D" BYTE "K";0 MAS: BYTE '6D;"A" BYTE "S";0 MNS: BYTE '6D;"N" BYTE "S";0 MPAS: BYTE '6D;"P" ASCI "AS A PAS ?" WORD 0 MRAC: BYTE '6D;"R" ASCI "ACINE>" WORD 0 IF ORDI-"S",XWOR%1,,XWOR%1 MFIN: BYTE '6D;"F";"I";"N";"?";0 MRACA: BYTE '6D;"R" ASCI "AC.ACN>" WORD 0 XWOR%1: VAL 0 MAPD: BYTE '6D;"A" ASCI " PARTIR DE " WORD 0 MPBAS: BYTE '6D;" " ASCI "DEJA ASSIGNE!" WORD 0 MQ: BYTE " ";" ";"?";0 IF ORDI-"T",XWOR%1,,XWOR%1 MULB: BYTE '6D;"S" ASCI "UR IMP,OUTPUT,CARTES,FICH,VISU (I/O/C/F/V)?" XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 MULB: BYTE '6D;"S" ASCI "UR I/O/C/F/V/D/M/T ?" WORD 0 MINIT: BYTE '6D;"I" ASCI "NITIALISER?" XWOR%1: VAL 0 WORD 0 MFICH: ASCI " FICHIER=" WORD 0 MQV: ASCI " VI" WORD 0 IF ORDI-"S",XWOR%1,,XWOR%1 MASD: BYTE '6D;"A" < ADRESSE DEBUT DKU ASCI "DEB=" WORD 0 MASF: BYTE '6D;"A" < ADRESSE FIN DKU ASCI "FIN=" WORD 0 MCLEF2: BYTE '6D;"C" ASCI "LEF ON" WORD 0 MCLEF1: BYTE '6D;"C" ASCI "CLEF=" WORD 0 MERDK: BYTE '6D;"F" < ERREUR DKU ASCI "IN ZONE DKU" WORD 0 MSTDKU: BYTE '6D;"C" ASCI "ONTINU?" WORD 0 XWOR%1: VAL 0 MIMP: BYTE " ";"?";"?";0 MNBOCT: BYTE '6D;"N";"B";"O";"C";"T";"=";0 < PROPOSITION NOMBRE D'OCTETS EN MODE < NON-STANDARD. < MNBPAU: BYTE '6D;"P" < PROPOSITION NOMBRE DE CARTES PAR ASCI "AQUET=" < PAQUET EN MODE NON-STANDARD. WORD 0 MCART: BYTE '6D;">" WORD 0 MDEBUG: BYTE '6D;"D" < PROPOSITIONS DE DEBUG DK ASCI "EBUG?" WORD 0 MRECHE: BYTE '6D;"R" ASCI "ECHERCHE?" WORD 0 MPASEC: BYTE '6D;"P" ASCI "AS AD DK=" WORD 0 MCHAIN: BYTE '6D;"C" ASCI "HAINE=" WORD 0 MCHAIX: BYTE '6D;"H" ASCI "EXA=" WORD 0 MPBACK: BYTE '6D;"E" ASCI "RREUR SYNCHRO" WORD 0 MTMPO: BYTE '07;'0D;'07;0 < MESSAGE DE TEMPORISATION < (CLOCHE ET RETURN...) IF ORDI-"S",XWOR%1,,XWOR%1 MTOUS: BYTE '6D;"V" ASCI "ERS T OU S ?" WORD 0 MQFS: BYTE '6D;"Q";"F";"S";"=";0 < QUANTA DU FICHIER DE SAUVEGARDE ? MQDK2: BYTE '6D;"Q";"D";"K";"=";0 < QUANTA A UTILISER SUR DK2 XWOR%1: VAL 0 MCOMPA: BYTE '6D;"C" ASCI "OMPACTAGE?" WORD 0 MDATE: BYTE '6D;"D" ASCI "ATE?" WORD 0 MACN: BYTE '6D;"A";"C";"N";"?";0 < < MESSAGES AUTRES < MSKIP: BYTE "@";'0D < SAUT DE PAGE MSPI: WORD '0D0A < SAUT DE LIGNE MACK: BYTE ACK+'80;0 < 'ACK' VERS VISU RECEPTRICE MNI: WORD '0D0A ASCI "NOM INT= '" MNI1: DZS 2 MNIF: WORD '0D0A < FIN MNI. < MTIK: WORD '0D0A < TITRE KEY SUR IMPRIMANTE/VISU ASCI "K:" ASCI " N1'" MTIK1: DZS 2 < N1 EN ETENDU ASCI " N2'" MTIK2: DZS 2 < N2 EN ETENDU MTIKF: WORD '0D0A < FIN MTIK. < MDBG: BYTE '6D;"A";"S";"'" < MESSAGE DE DEBUG BUFFERS DK. MDBGAS: DZS 2 < ADRESSE DU SECTEUR COURANT ASCI " ABUF'" MDBGAB: DZS 2 < ADRESSE DU BUFFER DK MDBGF: EQU $ < FIN DU MESSAGE IF ORDI-"S",XWOR%1,,XWOR%1 MDRBL: BYTE '6D;'84;" ";"L" ASCI "AST USED BLOCK= " DRBL: DZS 2 WORD 0 MDKUP: BYTE '6D;"W" ASCI "RITE PROTECTED!" WORD 0 MCDA: ASCI "!CDA" BYTE '04 FMCDA: EQU $ XWOR%1: VAL 0 MNHE: BYTE '6D;00 NHE: DZS LNOM+1*2 < NOM EN HEXA CODE ASCI. < < < TABLES POUR PUNCH < MSK1: BYTE 'FF;'E0;'FC;'FF;'80;'F0;'FE;'FF;'C0;'F8;'FF SHF1: BYTE 8;0;16-3;16-6;2;16-1;16-4;16-7;1;16-2;16-5 SHF2: BYTE 0;5;2;0;7;4;1;0;6;3;0 IF ORDI-"S",XWOR%1,,XWOR%1 LOGSY: ASCI "!L :SY" BYTE "S";'04 LOGSYF: EQU $ XWOR%1: VAL 0 ASS: ASCI "!ASSIGN " < ASSIGNATION/DESASSIGNATION COMMON < ATTENTION ! NE PAS INSERER EN TETE DU < DU COMMON SANS PRECAUTIONS...(CF: < 'ASS', 'ASSUL', 'ASS1', ETC...) COM: EQU $ ASSUL: ASCI "0=" < UL ASS1: DZS 1 ASS2: DZS LNOM+1 BYTE '04 ASS3: BYTE "S";'04 ASS4: ASCI "O," IF ORDI-"T",XWOR%1,,XWOR%1 ASS5: BYTE "R";'04 XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 ASSMT: BYTE "M";"T";"1";'04 ASSD: ASCI "D-" XWOR%1: VAL 0 ASSN: ASCI "N," ASS6: BYTE "L";"P";"1";'04 ASS7: BYTE "O";'04 ASS8: ASCI "CU" ASS81: BYTE "1";'04 ASS82: BYTE "2";'04 ASS9: ASCI "VI" ASS91: BYTE "0";'04 SASS1: WORD 0 < SAUVEGARDE DE 'ASS1'... ISTAND: WORD 0 < INDICATEUR MODE STANDARD : < =0 MODE STANDARD. < =1 MODE NON STANDARD. DMSUBO: DZS 1 < DUMP/SUPPRESSION/BOF < =0 BOF < =1 DUMP < =-1 SUPPRESSION < =-2 EDITION. IF ORDI-"T",XWOR%1,,XWOR%1 PASPAS: DZS 1 < INDICATEUR DE PAS A PAS < =0 AUTOMATIQUE < =1 PAS A PAS XWOR%1: VAL 0 TYPDMP: DZS 1 < TYPE DE DUMP < =0 IMPRIMANTE/OUTPUT < =-1 PERFORATEUR < =1 FICHIER < =2 LIGNE VISU IHEXA: DZS 1 < INDICATEUR HEXADECIMAL (EDITION DES < NOMS EN HEXA) : < = 0 : NON, < = 1 : OUI. < ATTENTION: CET INDICATEUR EST "RECOUVERT" PAR 'IDEBUG'. IF ORDI-"S",XWOR%1,,XWOR%1 < =3 DKU IACN: DZS 1 < INDICATEUR ACN'S / NOMS : < = 0 : ON TRAVAILLE SUR L'ACN COURANT < = 1 : ON EXPLORE LES ACN'S. INACN: DZS 1 < INDICATEUR "NOUVEL ACN": ON VIENT DE < PASSER D'UN ACN A UN AUTRE (QUI PEUT < ETRE LE MEME...): < = 0 : ACN COURANT, < = 1 : "NOUVEL" ACN. IAUTOM: DZS 1 < INDICATEUR DUMP ACN'S AUTOMATIQUE : < = 0 : NON AUTOMATIQUE. < = 1 : AUTOMATIQUE, C'EST-A-DIRE QUE < POUR CHAQUE ACN, ON FERA UN DUMP DE < TOUT SON SOUS-CATALOGUE SYSTEMATIQUE- < MENT. CET INDICATEUR EST POSITIONNE < A CHAQUE FOIS QU'EST POSEE LA QUESTION < "PAS A PAS" CONCERNANT LE PARCOURS DES < ACN'S (REPONSE "A" = AUTOMATIQUE). IDSC: DZS 1 < INDICATEUR DUMP SOUS-CATALOGUE EFFECTUE < = 0 : NON EFFECTUE. < = 1 : EFFECTUE. < N'EST UTILISE QUE SI 'IAUTOM' EST A 1 < (CF CI-DESSUS). XWOR%1: VAL 0 LNC: DZS 1 < LONGUEUR OCTETES NOM EN COURS (EOT < INCLUS) IQNOM: DZS 1 < QUOI FAIRE SUR LE NOM? < =0 RIEN < =1 DUMP < =-1 SUPPRESSION IDEL: WORD 0 < 0 : DUMP SI DUMP, < 1 : DUMP & DELETE SI DUMP. INDFI: DZS 1 < INDICATEUR FICHIER OU ITEM < =0 ITEM < =1 FICHIER (ASSIGNE A L'UL 3) < =-1 FICHIER NON ASSIGNABLE IF ORDI-"S",XWOR%1,,XWOR%1 IDMPNC: WORD 0 < INDICATEUR DE DUMP DU NOM EN COURS: < = 0 : IL N'Y A PAS EU DE DUMP. < = 1 : IL Y A EU DUMP. < (UTILISE EN CAS DE DUMP DKU MULTIPLE < SUR SOLAR) XWOR%1: VAL 0 IDEBUG: EQU IHEXA < INDICATEUR DEBUG DEMANDE SUR LES < BUFFERS DK: < = 1 : DEBUG DEMANDE < = 0 : SINON. < (NOTER LE RECOUVREMENT AVEX 'IHEXA'). IPRDM: DZS 1 < INDICATEUR 1ER DUMP < =0 OUI =1 NON IPRW1P: DZS 1 < INDIC 1ER WRITE 1 CAR SUR PAGE VIRT < =0 : OUI / =1 : NON IPRWPG: DZS 1 < INDIC PREMIER WRITE DE PAGE < =0 : OUI < =1 : NEME WRITE < =-1: DERNIER WRITE IF ORDI-"T",XWOR%1,,XWOR%1 STOP: DZS 1 < STOP PARCOURS DEMANDE PAR < L'UTILISATEUR XWOR%1: VAL 0 IPCH: DZS 1 < INDICATEUR PUNCH ACTIF < =0 ACTIF #0 INACTIF < MT: WORD '0D0A < TITRE SUR IMPRIMANTE/VISU MTFI: DZS 4 < ITEM/FICHIER MTN: DZS LNOM+1 < NOM EN COURS (PRUDENT) MTI: ASCI "ITM:" < "ITEM" MTF: ASCI "FIC:" < "FICHIER" < IF ORDI-"T",XWOR%1,,XWOR%1 XRAC: DZS 1 < INDEX INITIAL (PARCOURS) SXRAC: DZS 1 < AUTRE X INITIAL XWOR%1: VAL 0 NINT: DZS 1 < NOM INTERNE FICHIER IF ORDI-"S",XWOR%1,,XWOR%1 ADKU1: WORD NB1DKU < 1ER BLOC POSSIBLE SUR DKU ADKU2: WORD NBFDKU < ET DERNIER ADKUD: DZS 1 < 1ER BLOC OU DUMPER SUR DKU ADKUF: DZS 1 < ET DERNIER N0BDKU: DZS 1 < NUMERO DU BLOC DUMPE SUR DKU ADRBL: WORD DRBL-ZERO*2 < ADRESSE DERNIER BLOC UTILISE < < ATTENTION AU RECOUVREMENT 'NVC' / 'ADKUD'. < NBV: WORD NBVER < NOMBRE DE VERROUS. NVC: EQU ADKUD < NUMERO DU VERROU COURANT (DE 0 A 'NBV'-1) XWOR%1: VAL 0 LPP: WORD LPAP*2 < LONGUEUR PAGE VIRT SI PUNCH IF LPAP-LPAV,,XWOR%1, LPV: WORD LPAV*2 < LONGUEUR PAGE VIRT. SI LIGNE VISU XWOR%1: VAL 0 LPF: WORD LPAF*2 < LONGUEUR PAGE VIRT. SI FICHIER IF ORDI-"S",XWOR%1,,XWOR%1 LPD: WORD LPAD*2 < LONGUEUR PAGE VIRT. SI DKU ADCDA: WORD ADDCDA < ADRESSE DEBUT ZONE CDA DISPONIBLE. LPM: WORD LPAM*2 < LONGUEUR PAGE VIRT. SI MEM. COM. < COMMUNE. LMPM: WORD LPAM < LONGUEUR MOTS PAGE VIRTUELLE SI MEM. COM. XWOR%1: VAL 0 NBSECT: WORD 0 < NOMBRE DE SECTEURS A DUMPER (DK) < NBOCT: WORD 0 < NOMBRE D'OCTETS A IMPRIMER POUR CHAQUE < APPEL A 'EDI' ; UTILISE SI ON EST EN < MODE NON STANDARD. < < RELAIS DIVERS < APILM1: WORD PILE-1 < PILE POUR K AM: WORD M < POUR S/P ENVOI AXNOM: WORD NOM,X < NOM EN COURS IF ORDI-"T",XWOR%1,,XWOR%1 AXRAC: EQU AXNOM XWOR%1: VAL 0 ANOM: WORD NOM < RELAI MOT SUR NOM COURANT. AONHE: WORD NHE-ZERO*2 < RELAI OCTET SUR NOM COURANT < EN HEXA CODE ASCI. AXVAL: DZS 1 < NOM+VALEUR AXASS2: WORD ASS2,X < POUR MOUVMT NOM AXMTN: WORD MTN,X < IDEM ALT: DZS 1 < POUR INFOS DEVANT VALEUR AXMTFI: WORD MTFI+4,X < POUR TITRE SUR LP1 AXTRAV: WORD ZERO,X AXBFI: WORD BFI,X < BUFFER IMPRIMANTE AOBFI1: WORD BFI1-ZERO*2 < POUR EDITION IMPRIMANTE AOFCH: WORD BFIFCH-ZERO*2 < FIN DES CARACTERES HEXA CODES ASCI < DANS LE BUFFER IMPRIMANTE. AOBUFF: DZS 1 < ADR OCTET BUFFER FICHIER ABUFF: DZS 1 < ADR MOT BUFFER FICH PBFI: DZS 1 < POINTEUR OCTET SUR BFI : < POUR LES CARACTERES HEXA CODES ASCI. PBFI2: DZS 1 < POINTEUR OCTET SUR BFI : < POUR LES CARACTERES ASCI "IMAGE" < DES CARACTERES HEXA CODES ASCI. ADRC: DZS 1 < ADRESSE COURANTE (POUR < EDITION IMPRIMANTE) AOPAG: DZS 1 < ADRESSE OCTETS PAGE VIRTUELLE AOFPAG: DZS 1 < ADR OCT FIN PAGE VIRTUELLE AOCRIT: DZS 1 < ADRESSE CRITIQE POUR COMPACTAGE (FIN < DE PAGE-2) AOPAG2: WORD PAG2 < ADR OCT DEB PAGE SI FICHIER AOPAG0: WORD PAG0 < ADR OCT DEB PAGE SI AUTRE IF ORDI-"S",XWOR%1,,XWOR%1 ADPAG0: WORD FIN < ADR MOT DEB PAGE VIRTUELLE XWOR%1: VAL 0 PPG: DZS 1 < POINTEUR OCT PAGE VIRTUELLE CCMP: DZS 1 < COMPTEUR DE COMPACTAGE PCMP: DZS 1 < "POINTEUR" DE COMPACTAGE(=ADR OCT < DE STOCKAGE DE CCMP(8-15) < EN PAGE VIRTUELLE) AXBP: WORD BP,X < POUR BUFFER PUNCH ABP: WORD BP < IDEM AXBPM1: WORD BP-1,X < IDEM ABPF: WORD BPF < FIN 72 1ERES COL BUFFER PUNCH ACHECK: WORD BP+75 < ADRESSE CHECK CARTE PBP: DZS 1 < POINTEUR BUFFER PUNCH < < ATTENTION AU RECOUVREMENT PBV/PBP < PBV: EQU PBP < POINTEUR BUFFER VISU NBM11: DZS 1 < NUMERO MODULO 11 NUMC: DZS 1 < NUMERO CARTE EN COURS NBMNP: DZS 1 < NUMERO CARTE MODULO NP PAUSE < (CF: NBPAUS) NPAUSE: WORD 0 < NOMBRE DE CARTES A PERFORER < ENTRE CHAQUE PAUSE. AXMSK1: WORD MSK1,X < TABLE PUNCH AXSHF1: WORD SHF1,X < IDEM AXSHF2: WORD SHF2,X < IDEM SUI: WORD '6EC0 < INDICATEURS MOT SUIVANT BUFFER < PUNCH DIX: WORD 10 DIXMIL: WORD 10000 < POUR NUM CARTES MODULO 10000 IF ORDI-"S",XWOR%1,,XWOR%1 ACNSYS: ASCI ":SYS" XWOR%1: VAL 0 IF ORDI-"T",XWOR%1,,XWOR%1 AWORK: WORD WORK < RELAI SUR ZONE DE TRAVAIL. XWOR%1: VAL 0 < < DEMANDES PAR SVC < DMGETM: WORD '0004 < GET MEMOIRE REP: WORD 0 < REPONSE UTILISATEUR; ON LA MET < DANS CE MOT INUTILISE PAR LE SVC ESPACE: DZS 1 < ESPACE MEMOIRE DMASS: WORD '0002 < ASSIGNATION/DESASSIGNATION WORD ASS-ZERO*2 WORD ASS3-ASS*2 DMASDK: WORD '0003 < CONNEXION DKI WORD '0300 < NVP ; NSPDKI IF ORDI-"T",XWOR%1,,XWOR%1 DMRDK: WORD '0300 < READ DKI XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 DMRDK: WORD '0000 < EN SOLAR ON AURA UNE ASSIGNATION IMPLI- < CITE OU EXPLICITE DE DK A DUMPER. XWOR%1: VAL 0 WORD 0 < ADRESSE OCTET BUFFER WORD 0 < LONGUEUR OCTET BUFFER WORD 0 < ADRESSE SECTEUR PASSEC: WORD 1 < PAS DE L'ADRESSE SECTEUR. DMASNS: WORD '0101 < DEMANDE ADRESSE SECTEUR OU NB SECT WORD BFIF-ZERO-2*2 WORD 4 < SUR 4 OCTETS DMNBOC: EQU DMASNS < DEMANDE NOMBRE D'OCTETS A IMPRIMER < EN MODE NON STANDARD. DMNBPA: EQU DMASNS < DEMANDE DU NOMBRE DE CARTES PAR < PAQUET EN MODE NON STANDARD. DMREP: WORD '0101 < REPONSE UTILISATEUR WORD REP-ZERO*2 WORD 1 DMREPF: WORD '0101 < NOM FICHIER POU DUMP WORD ASS2-ZERO*2 WORD LNOM*2 DMOUT: WORD '0202 < ENVOI MESSAGE DZS 1 DZS 1 IF ORDI-"T",XWOR%1,,XWOR%1 DMRAC: WORD '0101 < ENTREE RACINE WORD NOM-ZERO*2 WORD 2*LNOM SCATAL: BYTE 0;'02 < SGN WORD NOM-ZERO*2 DZS 1 WORD -1 < DELTA=-1 XWOR%1: VAL 0 DMLON: WORD '8502 < SGN LOAD NAME DZS 1 DZS 1 WORD -1 < DELTA=-1 DMCCI: WORD '0001 < RETOUR CCI DMTI: WORD '0B02 < EDIT TITRE (IMPRIM/OUTPUT) WORD MT-ZERO*2 DZS 1 DMNINT: WORD '0B02 < EDITION NOM INTERNE (IMPRIM/OUTPUT) WORD MNI-ZERO*2 WORD MNIF-MNI*2+2 DMTIK: WORD '0B02 < EDIT TITRE-KEY (IMPRIM/OUTPUT) WORD MTIK-ZERO*2 WORD MTIKF-MTIK*2+2 < DMSKIP: WORD '0B02 < SAUT DE PAGE SUR LP1 WORD MSKIP-ZERO*2 WORD 2 DMSPI: WORD '0B02 < SAUT DE LIGNE LP1 < ENTRE 2 ITEMS 2 BLOCS... WORD MSPI-ZERO*2 WORD 2 LOCAL LOC: EQU $ DMIDK1: ASCI "DK" BYTE " ";'0D DMIDK: WORD '0B02 < SORTIR 'DKI' WORD DMIDK1-ZERO*2 WORD 4 DMIAS: WORD '0B02 < SORTIR ADRESSE SECTEUR WORD BFIF-ZERO-2*2 WORD 4+2 < +2 A CAUSE DE RETURN/LINE FEED DMDBG: WORD '0202 < MESSAGE DE DEBUG BUFFER DK. WORD MDBG-ZERO*2 WORD MDBGF-MDBG*2 DMLIG1: WORD '0B02 < EDITION PREMIERE PARTIE DE LA LIGNE WORD BFI-ZERO*2 < SUR "OUTPUT" OU "LP1". WORD BFIFCH-BFI*2 DMLIG2: WORD '0B02 < EDITION SECONDE PARTIE DE CETTE LIGNE. WORD BFIFCH-ZERO*2 WORD BFIF-BFIFCH*2+2 DMOPN: WORD '0303 < SGF OPEN NEXT DMCLS: WORD '0307 < SGF CLOSE SAVE IF ORDI-"S",XWOR%1,,XWOR%1 DMOPOK: WORD '0305 < OPEN OLD KEY. XWOR%1: VAL 0 KN1: WORD 0 < CLE EN COURS : N1. KN2: WORD 0 < CLE EN COURS : N2. DMREAD: WORD '0308 < SGF READ BLOC DZS 1 < BUFFER FICHIER (FRONTIERE MOT!!) WORD QUANTA*128*2 DMPCH: WORD '0B02 < PUNCH CARTE DZS 1 WORD 2 DMTMPO: WORD '0005 < TEMPORISATION N SECONDES BOX: WORD 0 < 'BOX'; ON LA MET DANS CE MOT INUTILISE < PAR LE SVC WORD 0 DMOPNK: WORD '0B04 < OPEN NEW KEY WORD '0003 < N1 WORD '0000 < N2 DMWBLC: WORD '0B02 < WRITE BLOC WORD PAG0 WORD QUANTA*128*2 DMCLSK: WORD '0B07 < CLOSE SAVE KEY DMLVI: WORD '0B02 < ENVOI SUR LIGNE VISU AOBV: WORD BV-ZERO*2 WORD LBV*2 DMRACK: WORD '0B00 < LECTURE DE L'ACK VISU RECEPTRICE < (SANS ECHO) WORD REP-ZERO*2 WORD 1 IF ORDI-"S",XWOR%1,,XWOR%1 DMWDKU: WORD '8A02 < WRITE SUR DKU WORD PAG0 WORD QUANTA*128*2 DZS 1 < NUMERO DU BLOC DMRDKU: WORD '8A00 < RELECTURE DE DKU WORD BFDKU-ZERO*2 WORD QUANTA*128*2 DZS 1 STDKU: WORD 0 < 0 : LE DUMP SUR DKU EST FAIT EN CONTINU, < 1 : CHAQUE ENTITE FAIT L'OBJET D'UN < DUMP PARTICULIER. DMOUTA: WORD '0202 < EDITION DE L'ACN. WORD ACN-ZERO*2-1 WORD ACNF-ACN*2+1 DMLGN: WORD '0002 < DEMANDE DE LOGON. WORD ACN-ZERO*2-3 WORD ACNF-ACN*2+4 DMLGSY: WORD '0002 < DEMANDE DE LOGON SOUS :SYS. WORD LOGSY-ZERO*2 WORD LOGSYF-LOGSY*2 BYTE 0;"!";"L";" " < POUR LOGON SOUS ACN COURANT. ACNC: DZS 2 < ACN COURANT. BYTE '04 < EOT. DMLGNC: WORD '0002 < LOGON SOUS ACN COURANT. WORD ACNC-ZERO*2-3 WORD 8 DMCDA: WORD '0002 < !CDA WORD MCDA-ZERO*2 WORD FMCDA-MCDA*2 XWOR%1: VAL 0 < < RELAIS SOUS-PROGRAMMES < ADEB2: WORD DEB2 < ENTREE DANS DUMP ARTCCI: WORD RTCCI < RETOUR CCI ADESAS: WORD DESAS < DESASSIGNATION AQUOI: WORD QUOI < QUOI FAIRE? (DUMP,SUPP,BOF) IF ORDI-"S",XWOR%1,,XWOR%1 APARC: WORD PARC < PARCOURS ACN'S / NOMS. ATSTAC: WORD TSTAC < TEST ACN DE LOGON INITIAL. XWOR%1: VAL 0 AGOSGN: WORD GOSGN < ACCES SGN IF ORDI-"T",XWOR%1,,XWOR%1 ATRNC: WORD TRNC < TRAITEMENT NOM EN COURS XWOR%1: VAL 0 AQNOM: WORD QNOM < QUOI FAIRE SUR LE NOM ADUMP: WORD DUMP < DUMP ASUPP: WORD SUPP < SUPPRESSION AULB: WORD ULB < VERIF UL 'B ATSTFI: WORD TSTFI < TEST ITEM/FICHIER ADITEM: WORD DITEM < DUMP ITEM ADFICH: WORD DFICH < DUMP FICHIER AEDI: WORD EDI < EDITION SUR IMPRIMANTE ATI: WORD TI < EDITION TITRE SUR IMPRIMANTE ATIK: WORD TIK < EDITION TITRE-KEY SUR IMPRIMANTE AEDC: WORD EDC < CONVERSION/EDITION SUR IMPRIMANTE ABLOC: WORD BLOC < TRAITEMENT BLOC (DE FICHIER) ARCUPK: WORD RCUPK < RECUPERATION KEY EN COURS AW1PG: WORD W1PG < WRITE 1 CARACTERE SUR PAGE VIRT AWNPG: WORD WNPG < WRITE N CARACTERES SUR PAGE VIRT AWPG: WORD WPG < WRITE PAGE VIRTUELLE ASTC: WORD STC < STORE CARACTERE EN PAGE VIRT AEDPG: WORD EDPG < EDITION PAGE SUR SUPPORT EXTERNE APC1: WORD PC1 < "PUNCH" UN CARACTERE APCARD: WORD PCARD < PUNCH D'UNE CARTE AENVOI: WORD ENVOI < ENVOI D'UN MESSAGE "STANDARD" AQREP: WORD QREP < ENVOI QUESTION ET DEMANDE REPONSE ACHOIX: WORD CHOIX < CHOIX D'UNE OPTION EN NON STANDARD. ACHXX: WORD CHXX < CHOIX UN PEU DIFFERENT DU PRECEDENT. AGESTM: WORD GESTM < GESTION ESPACE MEMOIRE APAR50: WORD PAR50 < POUR DEROUTEMENT SI ALT-MOD ACONVH: WORD CONVH < CONVERSION ASCI-->HEXADECIMAL INTERNE ACONVA: WORD CONVA < CONVERSION HEXADECIMAL INTERNE-->ASCI ADMPDK: WORD DMPDK < DUMP DIRECT DISQUE ADMPDA: WORD DMPDA < ACQUISITION ET DUMP DE LA DATE. ASP1: WORD SP1 < FIN DE PARCOURS DE L'ARBRE. IF ORDI-"S",XWOR%1,,XWOR%1 ADVAS: WORD DVAS < DEMANDE ET VERIF ADRESSE DKU ASP2: WORD SP2 < INITIALISATION DKU. ASETV: WORD SETV < SET VERROU CDA. ARSETV: WORD RSETV < RESET VERROU CDA. ATESTV: WORD TESTV < TEST VERROU CDA. < < DONNEES DE CODAGE : < ICOMPA: WORD 0 < 0=COMPACTER L'INFORMATION, < 1=NE PAS LA COMPACTER. LCLEF:: VAL 16 < LONGUEUR DES CLEFS. CLEF: DZS LCLEF/2 ACLEF: WORD CLEF,X < RELAI D'ACCES A LA CLEF. CLEFB: DZS LCLEF/2 ACLEFB: WORD CLEFB,X < POUR LES RE-DECODAGES EN CAS D'ERREUR... DMCLEF: WORD '0101 < DEMANDE D'ENTREE DE LA CLEF. WORD CLEF-ZERO*2 WORD LCLEF ABUF: WORD 0 < RELAI VARIABLE D'ACCES A LA PAGE < VIRTUELLE DKU. ACOMP: WORD COMP < SOUS-PROGRAMME DE CODAGE... ADCOMP: WORD DCOMP < DECODAGE SI ERREUR D'ECRITURE... ICLEF: WORD 0 < 0 : PAS DE CODAGE... < < DONNEES DE PROTECTION DE 'DKU' : < EMQ: BYTE '6D;"?" MPQ: ASCI "!Q" MQFFFF: ASCI "XXXX" MQEOT: BYTE '04;0 MDKS0: ASCI "!DK S0 OFF" BYTE '04;0 QIN: WORD '0101 < ENTREE DES GROUPES DE CYLINDES A PROTEGER WORD MQFFFF-ZERO*2 WORD MQEOT-MQFFFF*2 QOUT: WORD '0202 < EDITION DE LA QUESTION "!Q". WORD EMQ-ZERO*2 WORD MQFFFF-EMQ*2 QCCI: WORD '0002 < ENVOI DE "!Q" AU CCI. WORD MPQ-ZERO*2 WORD 80 DKCCI: WORD '0002 < ENVOI DE "!DK S0 OFF" AU CCI. WORD MDKS0-ZERO*2 WORD 80 < < DONNEES POUR UNE RECHERCHE DE CHAINE < LORS DES DUMPS DISQUES : < IRECHE: WORD 0 < 0 : PAS DE RECHERCHE, < 1 : RECHERCHE DEMANDEE (EN MODE NON < STANDARD). ABUFDK: WORD 0 < RELAI INDEXE VERS LE BUFFER DISQUE. ARECHE: WORD BRECHE,X < RELAI VERS LA CHAINE CHERCHEE... LRECHE:: VAL 16 < LONGUEUR MAX DE LA CHAINE. BRECHE: DZS LRECHE+1/2 < CHAINE CHERCHEE... DRECHE: WORD '0101 < ENTREE DE LA CHAINE. WORD BRECHE-ZERO*2 WORD LRECHE NBRHEX:: VAL 4 < NOMBRE DE CHIFFRES HEXAS PAR MOT... DRECHX: WORD '0101 < ENTREE D'UNE CHAINE HEXA... WORD BRECHE-ZERO*2 WORD NBRHEX MASKRE: WORD 0 < MASQUE POUR LA RECHERCHE... XWOR%1: VAL 0 PAGE IF ORDI-"S",XWOR%1,,XWOR%1 DSEC DSPAR: EQU $ < < D S E C D U S / P ' P A R C '. < ICONTX: DZS 1 < INDICATEUR CONTEXTE : < = 0 : C'EST LE CONTEXTE ACN'S. < = 1 : C'EST LE CONTEXTE "NOMS". STOP: DZS 1 < INDICATEUR STOP PARCOURS DEMANDE : < = 0 : CONTINUER. < = 1 : STOP DEMANDE. PASPAS: DZS 1 < INDICATEUR DE PAS A PAS : < = 0 : PARCOURS EN MODE AUTOMATIQUE. < = 1 : PARCOURS EN PAS A PAS. MRACIN: DZS 1 < POUR MESSAGE DE DEMANDE DE RACINE. DMRAC: DZS 3 < DEMANDE RACINE (D'ACN OU DE NOM). AXRAC: DZS 1 < RELAI INDEXE SUR RACINE. XRAC: DZS 1 < INDEX INITIAL DE PARCOURS. SXRAC: DZS 1 < AUTRE INDEX INITIAL. SCATAL: DZS 4 < DEMANDE SGN POUR LE S/P 'GOSGN'. ATRNC: DZS 1 < S/P DE TRAITEMENT ACN OU NOM COURANT. DSPARF: EQU $ < FIN DE LA DSEC. LDSPAR: VAL DSPARF-DSPAR < LONGUEUR DE LA DSEC. PROG USE W,DSPAR < 'W' BASE LA DSEC 'DSPAR'. XWORK: VAL $-ZERO CONTXA: EQU $ < < C O N T E X T E A C N ' S. < $EQU CONTXA+ICONTX-DSPAR WORD 1 < 'ICONTX' = ACN'S. $EQU CONTXA+STOP-DSPAR DZS 1 < 'STOP'. $EQU CONTXA+PASPAS-DSPAR DZS 1 < 'PASPAS'. $EQU CONTXA+MRACIN-DSPAR WORD MRACA-M < 'MRACIN'. $EQU CONTXA+DMRAC-DSPAR WORD '0101 < ENTREE RACINE DES ACN'S. WORD ACN-ZERO*2 WORD ACNF-ACN*2+1 $EQU CONTXA+AXRAC-DSPAR WORD ACN,X < RELAI INDEXE SUR RACINE COURANTE ACN. $EQU CONTXA+XRAC-DSPAR DZS 1 < 'XRAC'. $EQU CONTXA+SXRAC-DSPAR DZS 1 < 'SXRAC'. $EQU CONTXA+SCATAL-DSPAR WORD '000A < DEMANDE SGN SOUS ACN. WORD ACN-ZERO*2 DZS 1 WORD -1 $EQU CONTXA+ATRNC-DSPAR WORD TRACNC < S/P DE TRAITEMENT ACN COURANT. $EQU ZERO+XWORK+LDSPAR < POSITIONNEMENT SUR SECOND CONTEXTE. CONTXN: EQU $ < < C O N T E X T E N O M S. < $EQU CONTXN+ICONTX-DSPAR WORD 0 < 'ICONTX' = NOMS. $EQU CONTXN+STOP-DSPAR DZS 1 < 'STOP'. $EQU CONTXN+PASPAS-DSPAR DZS 1 < 'PASPAS'. $EQU CONTXN+MRACIN-DSPAR WORD MRAC-M < 'MRACIN'. $EQU CONTXN+DMRAC-DSPAR WORD '0101 < ENTREE RACINE DES NOMS. WORD NOM-ZERO*2 WORD LNOM*2 $EQU CONTXN+AXRAC-DSPAR WORD NOM,X < RELAI INDEXE SUR RACINE COURANTE NOM. $EQU CONTXN+XRAC-DSPAR DZS 1 < 'XRAC'. $EQU CONTXN+SXRAC-DSPAR DZS 1 < 'SXRAC'. $EQU CONTXN+SCATAL-DSPAR WORD '0002 < DEMANDE SGN. WORD NOM-ZERO*2 DZS 1 WORD -1 $EQU CONTXN+ATRNC-DSPAR WORD TRNC < S/P DE TRAITEMENT NOM COURANT. < $EQU LDSPAR*2+XWORK+ZERO < REPOSITIONNEMENT COMPTEUR ORDINAL. XWOR%1: VAL 0 PAGE PROG WORD COM+128 IF ORDI-"S",XWOR%1,,XWOR%1 WORD LOC+128 WORD PILE-1 XWOR%1: VAL 0 DEB2: EQU $ < < E N T R Y D A N S D U M P < < INITIALISATIONS < IF ORDI-"T",XWOR%1,,XWOR%1 LRP C LA -1,C LR A,C LA APILM1 LR A,K XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 LRP K ADRI -1,K PLR C,L,W LR W,K LAD DMLGSY SVC 0 < ON ESSAYE ":SYS" A PRIORI... XWOR%1: VAL 0 WORD '1E35 SLLS 1 < ESPACE EN OCTETS STA ESPACE < ESPACE ACTUELLEMENT ALLOUE BSR AQUOI < QUOI FAIRE? (DUMP,SUPPRESS,BOF) < CE S/P POSITIONNE LES INDICATEURS: < 'ISTAND' : STANDARD/NON STANDARD. < 'DMSUBO' : DUMP/SUPPRESSION/BOF. < ET, DE PLUS, EN SOLAR : < 'IACN' : INDICATEUR ACN'S / NOMS. STZ IPRDM < INDIC 1ER DUMP LA AOPAG0 STA DMLON+1 < ADR OCT NOM+VALEUR SLRS 1 SBT 0 STA AXVAL < RELAI INDEXE NOM+VALEUR IF ORDI-"S",XWOR%1,,XWOR%1 LRM A < FIXATION TAILLE DES BUFFERS WORD QUANTA*128*2 < FICHIERS A DUMPER; QUANTA=3 STA DMREAD+2 < A PRIORI STA DMWBLC+2 < POUR LE FICHIER DE SAUVEGARDE EGALEMENT CPZ IACN JE PAR4 < < IL FAUT EXPLORER LES ACN'S. < PAR7: EQU $ STZ IAUTOM < INITIALISATION OU REINITIALISATION < DE L'INDICATEUR DE DUMP AUTOMATIQUE < DES SOUS CATALOGUES D'ACN'S. LRM W < 'W' = BASE DU CONTEXE ACN'S WORD CONTXA < POUR LE S/P 'PARC'. BSR APARC < PARCOURS DES ACN'S. PAR6: EQU $ LAI MFIN-M < PROPOSER LA FIN. BSR AQREP CPI "O" JE PAR5 < C'EST FINI. CPI "N" JE PAR7 < CE N'EST PAS LA FIN. JMP PAR6 < REPONSE NON RECONNUE. < PAR4: EQU $ < < IL NE FAUT TRAVAILLER QUE SOUS L'ACN COURANT. < LRM W < 'W' = BASE DU CONTEXTE "NOMS" WORD CONTXN < POUR LE S/P 'PARC'. BSR APARC < PARCOURS DU CATALOGUE ETC... PAR5: EQU $ < < F I N D E T R A V A I L < XWOR%1: VAL 0 IF ORDI-"T",XWOR%1,,XWOR%1 LA APAR50 < SI ALT-MODE ---> PROPOSITION DISQUE WORD '1EB5 < PARCOURS OU FIN < < D U M P D I R E C T D I S Q U E O U P A R C O U R S < < D E L ' A R B R E O U F I N D E T R A V A I L < DKPAR: EQU $ LAI MDPF-M < PROPOSITION DUMP-DK, PARCOURS, < OU FIN DE TRAVAIL BSR AQREP < ENVOI QUESTION, DEMANDE REPONSE. < SI ON EST EN SUPPRESSION CPZ DMSUBO < OU EDITION, ON NE PROPOSE PAS DE DUMP < D'ESPACE DISQUE. JL DKPAR2 CPI "D" JE DKPAR1 < VERS DUMP DISQUE DKPAR2: EQU $ CPI "P" JE PAR0 < VERS PARCOURS CPI "F" JE PAR90 < VERS FIN DE TRAVAIL JMP DKPAR < REPONSE NON RECONNUE < DKPAR1: EQU $ < DUMP DISQUE BSR ADMPDK JMP DKPAR < VERS NOUVELLE PROPOSITION < < < ENTREE DE LA RACINE DE PARCOURS < PAR0: EQU $ STZ IHEXA < HEXADECIMAL = NON A PRIORI. LAI MHEXA-M < POUR LE S/P 'CHOIXX'. BSR ACHXX < CHOIX DE L'OPTION. JANE PARH IC IHEXA < OPTION HEXADECIMAL = OUI. PARH: EQU $ STZ STOP < STOP PARCOURS=NON A PRIORI STZ PASPAS IC PASPAS < PAS A PAS = OUI A PRIORI CPZ DMSUBO < EST-CE 'BOF' ? JE PAR01 < OUI, DONC PAS A PAS SYSTEMATIQUE PAR02: EQU $ LAI MPAS-M < DUMP OU SUPPRESSION, ON BSR AQREP < PROPOSE LE 'PAS A PAS'. CPI "O" JE PAR01 CPI "N" JNE PAR02 STZ PASPAS < PAS A PAS = NON PAR01: EQU $ LAI MRAC-M < INVITATION BSR AENVOI LAD DMRAC < DEMANDE REPONSE SVC 0 LXI 0 < INIT COUNT PAR1: EQU $ LBY &AXNOM < CARACTERE DE RACINE CPI '04 < EOT ? JE PAR2 ADRI 1,X < NON, IDEX+1 JMP PAR1 PAR2: EQU $ STX XRAC < INDEX INITIAL CPZR X < RACINE DE LONGUEUR NULLE? JE PAR3 < OUI, X RESTE=0 ADRI -1,X < NON, ON FAIT X=X-1 POUR < REVENIR SUR CAR PRECEDENT PAR3: EQU $ STX SXRAC < VALEUR X INITIAL < CPZ ISTAND JE PAR93 < MODE STANDARD. LA DMSUBO CPI -1 < EN MODE SUPPRESSION ON NE PROPOSE JE PAR93 < PAS DE "A PARTIR DE". < < EN MODE DUMP, EDITION ET BOF, ET SEULEMENT EN MODE NON-STANDARD, < ON PROPOSE LE 'A PARTIR DE'. < PAR32: EQU $ LAI MAPD-M < ENVOI MESSAGE BSR AENVOI LAD DMREP < DEMANDE REPONSE. SVC 0 LBY REP < 'A' = REPONSE. < < REPONSES RECONNUES: RETURN, EOT, 0,1,...9,A,...F < CPI '0D JE PAR33 CPI '04 JE PAR33 CPI "0" JL PAR32 < REPONSE INCORRECTE. CPI "9" JG PAR34 ADRI -'30,A < 0 ... 9 JMP PAR35 PAR34: EQU $ ADRI -'41+10,A CPI 10 JL PAR32 < REPONSE INCORRECTE. CPI 15 JG PAR32 PAR35: EQU $ < REPONSE CORRECTE, 'A' VAUT 1 .. 15. STA XRAC < INDEX. PAR33: EQU $ LX SXRAC < RESTAURATION INDEX INITIAL. < < BOUCLE DE RECUPERATION NOM SGN < PAR93: EQU $ LAI '89 < NEXT-SERIE BSR AGOSGN < CODE RETOUR NXS DANS A CPI 5 < IL Y A UN NXS? JE PAR94 < NON JAE PAR500 < OUI,LE NXS EXISTE LR X,A CP XRAC < ON EST DE RETOUR SUR RACINE? JL PAR50 < OUI, FIN DE PARCOURS ADRI -1,X < AUTRES CAS D'ERREUR,ON NE SAIT PLUS < OU ON EN EST (A CAUSE DES DELETE) JMP PAR93 < ON CONTINUE < < IL Y A UN NEXT-SERIE < PAR500: EQU $ ADRI 1,X LBY &AXNOM < RECUP DU NEXT-SERIE CPI '04 < FIN DE NOM? JNE PAR93 < NON, CONTINUER LA RECUP < < TRAITEMENT DU NOM COURANT < STX LNC < LONGUEUR NOM EN COURS... IC LNC < +1 (EOT) PSR X BSR ATRNC < TRAITEMENT NOM EN COURS PLR X CPZ STOP < STOP PARCOURS? JNE PAR50 < OUI < < RECHERCHE DU NEXT-PARALLELE < PAR94: EQU $ LAI '88 < NXP BSR AGOSGN < CODE RETOUR DANS A CPI 5 < NXP EXISTE? JE PAR97 < NON JAE PAR330 < OUI JMP PAR93 < AUTRES CAS ERREURS DUES A DELETE < ON CONTINUE < < IL Y A UN NEXT-PARALLELE < PAR330: EQU $ ADRI 1,X LBY &AXNOM < RECUP DU NXP ADRI -1,X STBY &AXNOM < ON LE MET A LA BONNE PLACE JMP PAR93 < ON CONTINUE < < PAS DE NEXT-PARALLELE < PAR97: EQU $ ADRI -1,X < RETOUR ARRIERE DANS LE NOM LR X,A CP XRAC < RETOUR SUR RACINE? JGE PAR94 < NON, ON CONTINUE PAR50: EQU $ < < F I N D E D U M P D I S Q U E O U < < F I N D ' U N P A R C O U R S D E L ' A R B R E < LA APILM1 < ADRESSE DE LA PILE - 1. LR A,K < AU CAS OU ON ARRIVE ICI PAR 'ALT-MODE'. < ON PROPOSE UN NOUVEAU DUMP DK OU UN NOUVEAU < PARCOURS DE L'ARBRE, OU LA FIN < JMP DKPAR PAR90: EQU $ XWOR%1: VAL 0 BSR ASP1 < FIN DE TRAVAIL... BR ARTCCI PAGE QUOI: EQU $ < < Q U O I F A I R E ? C H O I X D ' U N E F O N C T I O N < < D U M P ? S U P P R E S S I O N ? B O F ? < < CE S/P DEMANDE A L'UTILISATEUR : < - S'IL VEUT TRAVAILLER EN MODE STANDARD OU NON. < - QUELLES FONCTIONS IL VEUT UTILISER ( DUMP, < SUPPRESSION,BOF) < ET IL POSITIONNE EN CONSEQUENCE ET RESPECTIVEMENT < LES INDICATEURS : < - 'ISTAND' < - 'DMSUBO' < < RESULTAT: < 'ISTAND' = 0 MODE STANDARD < = 1 MODE NON-STANDARD. < 'DMSUBO' = 0 BOF < = 1 DUMP SEULEMENT < =-1 SUPPRESSION SEULEMENT < =-2 EDITION. < 'IDEL' = 0 DUMP SEUL SI DUMP, < 1 DUMP & DELETE SI DUMP. < < < DE PLUS, EN SOLAR, CE S/P DEMANDE SI L'ON VEUT < EXPLORER LES ACN'S ET POSITIONNE EN CONSEQUENCE < L'INDICATEUR 'IACN' : < 'IACN' = 0 ACN COURANT SEULEMENT < = 1 EXPLORER LES ACN'S. < ( SOUS :SYS SEULEMENT !!! ) < NOTA: < EN MODE SUPPRESSION, LES DUMP DISQUE NE < SERONT PAS ACCEPTES. < STZ ISTAND < MODE STANDARD A PRIORI. LAI MSTAND-M < PROPOSITION MODE STANDARD. BSR AQREP < QUESTION ET REPONSE. CPI "F" < FIN ??? JNE QUOINX < NON... BR ARTCCI < OUI, VERS LE RETOUR CCI, ET EVEN- < TUELLEMENT 'DEB2' SI !GO... QUOINX: EQU $ CPI "O" < STANDARD ? JE QUOI1 CPI "N" < NON STANDARD ? JNE QUOI < REPONSE NON RECONNUE. IC ISTAND < MODE NON STANDARD. QUOI1: EQU $ STZ IDEL < DUMP SEUL SI DUMP A PRIORI... STZ DMSUBO < BOF A PRIORI LAI MDSB-M < ENVOI QUESTION BSR AQREP < QUESTION, REPONSE. CPI "X" < DUMP & DELETE ??? JE QDX CPI "D" < DUMP ? JE QD CPI "S" < SUPPRESSION ? JE QS CPI "B" < LES DEUX ? JE QUOIF CPI "E" < EDITION ? JNE QUOI1 < REPONSE NON RECONNUE LAI -2 STA DMSUBO < DMSUBO=-2 : EDITION. QUOIF: EQU $ IF ORDI-"S",XWOR%1,,XWOR%1 STZ IACN < A PRIORI. BSR ATSTAC < TEST ACN DE LOGON INITIAL. JNE QUOIF1 < # DE :SYS. QUOIF2: EQU $ LAI MACN-M < POUR DEMANDER SI L'ON VEUT PARCOURIR < LES ACN'S. BSR AQREP < QUESTION, REPONSE. CPI "N" JE QUOIF1 < NON. CPI "O" JNE QUOIF2 < REPONSE NON RECONNUE. IC IACN < SET INDICATEUR PARCOURS ACN'S. STZ INACN < NOUVEL ACN=NON A PRIORI. LAD DMLGSY < ACN DEMANDE, DONC LOGON SOUS :SYS SVC 0 < (POUR POUVOIR EXPLORER LES ACN'S). QUOIF1: EQU $ XWOR%1: VAL 0 RSR QDX: EQU $ LAI MDEL-M BSR AENVOI < ON AVERTIT "DUMP & DELETE"... IC IDEL < IDEL=1... (DUMP & DELETE) QD: EQU $ IC DMSUBO < DMSUBO=1 : DUMP SEUL JMP QUOIF QS: EQU $ DC DMSUBO < DMSUBO=-1: SUPPRESSION SEULE JMP QUOIF IF ORDI-"S",XWOR%1,,XWOR%1 PAGE PARC: EQU $ < < < P A R C O U R S D E L ' A R B R E D E S N O M S : < < - S O I T D E S D I F F E R E N T S A C N ' S < < - S O I T D E S N O M S D ' U N S O U S - C A T A L O G U E < S O U S L ' A C N C O U R A N T. < < CE S/P REENTRANT UTILISE UN CONTEXTE BASE PAR 'W' QUI EST < UN ARGUMENT D'APPEL. < < - ARGUMENTS: 'W' BASANT LE CONTEXTE, ET LE CONTEXTE LUI-MEME. < < - NOTA: LE CONTEXTE EST DECRIT PAR LA DSEC 'DSPAR'. < CPZ ICONTX JNE PAR0 < < ON TRAVAILLE SOUS ACN COURANT. < < < D U M P D I R E C T D I S Q U E O U P A R C O U R S < < D E L ' A R B R E O U F I N D E T R A V A I L < DKPAR: EQU $ CPZ IAUTOM JE PARD < CAS NORMAL. CPZ IDSC < CAS AUTOMATIQUE, LE DUMP DU SOUS < CATALOGUE A-T-IL ETE EFFECTUE ? JNE PAR61B < OUI, TERMINE. IC IDSC < NON, C'EST COMME SI C'ETAIT FAIT... JMP PAR0 < ALLONS-Y. PARD: EQU $ LAI MDPF-M < PROPOSITION DUMP-DK, PARCOURS, < OU FIN DE TRAVAIL BSR AQREP < ENVOI QUESTION, DEMANDE REPONSE. < SI ON EST EN SUPPRESSION OU EN MODE CPZ DMSUBO < EDITION, ON NE PROPOSE PAS DE DUMP-DK. JL DKPAR2 CPI "D" JE DKPAR1 < VERS DUMP DISQUE DKPAR2: EQU $ CPI "P" JE PAR0 < VERS PARCOURS CPI "F" JE PAR61B < RETOUR A L'APPELANT. JMP DKPAR < REPONSE NON RECONNUE < DKPAR1: EQU $ < DUMP DISQUE BSR ADMPDK JMP DKPAR < VERS NOUVELLE PROPOSITION < < < ENTREE DE LA RACINE DE PARCOURS (D'ACN'S OU DE NOMS). < PAR0: EQU $ STZ IHEXA < OPTION HEXADECIMAL = NON A PRIORI. CPZ ICONTX JNE PARH LAI MHEXA-M < POUR LE S/P 'CHOIXX'. BSR ACHXX < CHOIX DE L'OPTION. JANE PARH IC IHEXA < OPTION HEXADECIMAL ACTIVE. PARH: EQU $ STZ STOP < STOP PARCOURS=NON A PRIORI STZ PASPAS IC PASPAS < PAS A PAS = OUI A PRIORI CPZ DMSUBO < EST-CE BOF ? JE PAR01 < OUI, DONC PAS A PAS SYSTEMATIQUE PAR02: EQU $ LAI MPAS-M < DUMP OU SUPPRESSION, ON VA PEUT-ETRE < PROPOSER LE "PAS A PAS". CPZ ICONTX JE PAR8 < CAS DES NOMS SOUS L'ACN COURANT. BSR AQREP < CAS DES ACN'S, PROPOSER LE PAS A PAS. CPI "A" < AUTOMATIQUE ? JNE PARE < NON, VOYONS SI OUI OU NON. IC IAUTOM < AUTOMATIQUE : SET INDICATEUR. JMP PAR9 PAR8: EQU $ < CAS DES NOMS. CPZ IAUTOM < AUTOMATIQUE ? JNE PAR9 < SI OUI, PAS A PAS = NON. BSR AQREP < QUESTION ET REPONSE. PARE: EQU $ CPI "O" JE PAR01 CPI "N" JNE PAR02 PAR9: EQU $ STZ PASPAS < PAS A PAS = NON. PAR01: EQU $ LA MRACIN < INVITATION BSR AENVOI LAD DMRAC < DEMANDE REPONSE CPZ ICONTX JNE PARA < CAS DES ACN'S, DEMANDER LA RACINE. CPZ IAUTOM < CAS DES NOMS , FAUT-IL DEMANDER < LA RACINE ? JE PARA < OUI. LAI '04 < ICI, RACINE VIDE SYSTEMATIQUEMENT. LXI 0 STBY &AXRAC < ET VOILA ... JMP PAR1 PARA: EQU $ SVC 0 LXI 0 < INIT COUNT PAR1: EQU $ LBY &AXRAC < CARACTERE DE RACINE CPI '04 < EOT ? JE PAR2 ADRI 1,X < NON, IDEX+1 JMP PAR1 PAR2: EQU $ STX XRAC < INDEX INITIAL CPZR X < RACINE DE LONGUEUR NULLE? JE PAR3 < OUI, X RESTE=0 ADRI -1,X < NON, ON FAIT X=X-1 POUR < REVENIR SUR CAR PRECEDENT PAR3: EQU $ STX SXRAC < VALEUR X INITIAL < CPZ ISTAND JE PAR93 < MODE STANDARD. LA DMSUBO CPI -1 JE PAR93 < MODE SUPPRESSION. < < EN MODE DUMP, BOF ET EDITION, ET SEULEMENT EN MODE NON-STANDARD, < ON PROPOSE LE "A PARTIR DE". < PAR32: EQU $ LAI MAPD-M < ENVOI MESSAGE BSR AENVOI LAD DMREP < DEMANDE REPONSE. SVC 0 LBY REP < 'A' = REPONSE. < < REPONSES RECONNUES: RETURN, EOT, 0,1,...9,A,...F < CPI '0D JE PAR33 CPI '04 JE PAR33 CPI "0" JL PAR32 < REPONSE INCORRECTE. CPI "9" JG PAR34 ADRI -'30,A < 0 ... 9 JMP PAR35 PAR34: EQU $ ADRI -'41+10,A CPI 10 JL PAR32 < REPONSE INCORRECTE. CPI 15 JG PAR32 PAR35: EQU $ < REPONSE CORRECTE, 'A' VAUT 1 .. 15. STA XRAC < INDEX. PAR33: EQU $ LX SXRAC < RESTAURATION INDEX INITIAL. < < BOUCLE DE RECUPERATION ACN'S OU NOMS SGN. < PAR93: EQU $ LAI '89 < NEXT-SERIE BSR AGOSGN < CODE RETOUR NXS DANS A CPI 5 < IL Y A UN NXS? JE PAR94 < NON JAE PAR500 < OUI,LE NXS EXISTE LR X,A CP XRAC < ON EST DE RETOUR SUR RACINE? JL PAR50 < OUI, FIN DE PARCOURS ADRI -1,X < AUTRES CAS D'ERREUR,ON NE SAIT PLUS < OU ON EN EST (A CAUSE DES DELETE) JMP PAR93 < ON CONTINUE < DKPARB: JMP DKPAR < SANS COMMENTAIRE. PAR61B: JMP PAR61 < SANS COMMENTAIRE. < < < IL Y A UN NEXT-SERIE < PAR500: EQU $ ADRI 1,X LBY &AXRAC < RECUP DU NEXT-SERIE CPI '04 < FIN DE NOM? JNE PAR93 < NON, CONTINUER LA RECUP < < TRAITEMENT DU NOM COURANT < STX LNC < LONGUEUR NOM EN COURS... IC LNC < +1 (EOT) PSR X BSR ATRNC < TRAITEMENT NOM EN COURS PLR X CPZ STOP < STOP PARCOURS? JNE PAR50 < OUI CPZ ICONTX JNE PAR600 < ON TRAITE UN MOM. CPZ STDKU < QUEL MODE ??? JE PAR600 < #DKU, OU DKU EN CONTINU... CPZ IDMPNC < Y A-T-IL EU DUMP DU NOM COURANT? JE PAR600 PSR X BSR ASP1 < DKU EN DISCONTINU, ON FAIT SEMBLANT BSR ASP2 < D'AVOIR FINI, ET DE RECOMMENCER... STZ IPRW1P < ET OUI CELA STZ IPRWPG < MANQUAIT... PLR X PAR600: EQU $ < < RECHERCHE DU NEXT-PARALLELE < PAR94: EQU $ LAI '88 < NXP BSR AGOSGN < CODE RETOUR DANS A CPI 5 < NXP EXISTE? JE PAR97 < NON JAE PAR330 < OUI JMP PAR93 < AUTRES CAS ERREURS DUES A DELETE < ON CONTINUE < < IL Y A UN NEXT-PARALLELE < PAR330: EQU $ ADRI 1,X LBY &AXRAC < RECUP DU NXP ADRI -1,X STBY &AXRAC < ON LE MET A LA BONNE PLACE JMP PAR93 < ON CONTINUE < < PAS DE NEXT-PARALLELE < PAR97: EQU $ ADRI -1,X < RETOUR ARRIERE DANS LE NOM LR X,A CP XRAC < RETOUR SUR RACINE? JGE PAR94 < NON, ON CONTINUE PAR50: EQU $ < < FIN DE PARCOURS DES ACN'S OU ( FIN DE PARCOURS DE L'ARBRE DES NOMS < SOUS ACN COURANT OU FIN DE DUMP D'ESPACE DISQUE). < CPZ ICONTX JNE PAR90 < < FIN DE PARCOURS NOMS OU DE DUMP D'ESPACE DISQUE. < JMP DKPARB < VERS PROPOSITION NOUVEAU PARCOURS < OU DUMP DISQUE OU FIN. PAR61: EQU $ < < FIN DEMANDEE SOUS L'ACN COURANT. < LAI '12 < RESTAURATION ADRESSE DE DEROUTEMENT WORD '1EB5 < SUR 'ALT-MODE'. RSR PAR90: EQU $ < < FIN DE PARCOURS DES ACN'S, DONC FIN DE TRAVAIL. < LAD DMLGSY < LOGON SOUS :SYS BIEN QUE DEJA FAIT SVC 0 < AU SORTIR DE 'TRACNC'. ON NE SAIT JAMAIS! JE $+2 ACTD RSR PAGE TRACNC: EQU $ < < T R A I T E M E N T D E L ' A C N C O U R A N T. < PSR A,B,X,W < LAD DMOUTA < EDITION ACN COURANT. SVC 0 CPZ PASPAS < TEST AUTOMATIQUE/PAS A PAS. JE TRAC4 < SI AUTOMATIQUE. TRAC1: EQU $ < < MODE PAS A PAS, PROPOSER DUMP... < LAI MQ-M < QUESTION. BSR AQREP < REPONSE... < < REPONSES POSSIBLES: < < - F : FIN DE PARCOURS DES ACN'S. < - N : NON; NE RIEN FAIRE SUR L'ACN COURANT (PASSER < AU SUIVANT). < - O : OUI; TRAITER LE SOUS-CATALOGUE. < - RETURN,EOT : MEME CHOSE QUE "NON". < CPI "O" JE TRAC4 < TRAITER LE SOUS-CATALOGUE ACN COURANT. CPI "N" JE TRACF < NE RIEN FAIRE. CPI '0D JE TRACF < NE RIEN FAIRE. CPI '04 JE TRACF < NE RIEN FAIRE. CPI "F" < STOP DEMANDE ? JNE TRAC1 < REPONSE INCORRECTE. TRAC2: EQU $ < < STOP PARCOURS DES ACN'S DEMANDE. < IC STOP < POSITIONNEMENT DE L'INDICATEUR 'STOP'. JMP TRACF TRAC4: EQU $ < < TRAITER LE SOUS-CATALOGUE DE L'ACN COURANT. < LRM A,W < POUR PREPARER LE LOGON. WORD "L " WORD ACN-1 XM 0,W LR A,B LAD DMLGN < LOGON. SVC 0 STB 0,W JE $+2 ACTD < LOGON REFUSE. STZ IDSC < DUMP NON ENCORE EFFECTUE. IC INACN < NOUVEL ACN = OUI. LRM W < BASE DU CONTEXTE "NOMS" POUR LE WORD CONTXN < S/P 'PARC'. BSR APARC < TRAITEMENT DU SOUS-ARBRE, ETC... STZ INACN < NOUVEL ACN = NON. < < ET ICI, NE PAS OUBLIER DE REPASSER SOUS :SYS !!! < SINON, LA SUITE DU PARCOURS DES ACN'S NE DONNERA PAS LE RESULTAT... < ESCOMPTE (COMME DISENT LES DIPLOMATES). < LAD DMLGSY < LOGON SOUS :SYS. SVC 0 JE $+2 ACTD < PREOCCUPANT... TRACF: EQU $ < PLR A,B,X,W RSR XWOR%1: VAL 0 PAGE QNOM: EQU $ < < Q U O I F A I R E S U R L E N O M E N C O U R S ? < < CE S/P DETERMINE CE QU'IL CONVIENT DE FAIRE < SUR LE NOM EN COURS C-A-D RIEN/SUPPRESSION/DUMP, < ET POSITIONNE EN CONSEQUENCE L'INDICATEUR 'IQNOM'. < < RESULTAT: < IQNOM = 0 : NE RIEN FAIRE... < 1 : FAIRE UN DUMP < -1 : FAIRE UNE SUPPRESSION STZ IQNOM < A PRIORI, RIEN (IQNOM=0) < < EDITION NOM EN COURS < CPZ IHEXA < TEST OPTION "HEXADECIMAL". JE QNOM1 < < EDITION EN HEXADECIMAL REQUISE DU NOM COURANT. < PSR A,X,Y,W < LA ANOM LR A,W < ADRESSE MOT NOM COURANT. LXI LNOM+1 LY AONHE < ADRESSE OCTET NOM EN HEXA. CODE ASCI. QNOM3: EQU $ LA 0,W BSR ACONVA < CONVERSION ASCI (CF: S/P 'CONVA'). ADRI 1,W < MOT SUIVANT. ADRI 4,Y < 4 OCTETS A LA FOIS EN EDITION... JDX QNOM3 < LA AONHE ADRI -2,A STA DMOUT+1 < ADRESSE MESSAGE. LA LNC SLLS 1 STA DMOUT+2 < LONGUEUR MESSAGE. LAD DMOUT SVC 0 < PLR A,X,Y,W < QNOM1: EQU $ LA AXNOM SLLS 1 ADRI -1,A < A=@OCTET DE NOM - 1 STA DMOUT+1 < @ MESSAGE LAI '6D < R/C - LF. CPZ IHEXA JE $+2 < PAS D'EDITION HEXA PRECEDEMMENT. LAI "-" < IL Y A EU EDITION HEXA. LX DMOUT+1 STBY &AXTRAV < R/C - LF OU ESPACE EN TETE DE MESSAGE. LA LNC ADRI 1,A STA DMOUT+2 < LONG MESSAGE LAD DMOUT SVC 0 LX DMOUT+1 LAI '6D < RESTAURATION DE R/C - LF. STBY &AXTRAV LA DMSUBO < FONCTION DEMANDEE : JAGE QN03 < CE N'EST NI EDITION, NI SUPPRESSION... BSR ATSTFI < DANS LE CAS DE L'EDITION ET DE LA < SUPPRESSION, ON TESTE ITEM/FICHIER : CPZ INDFI < ALORS ??? JE QNIT < ITEM... JG QNFI < FICHIER... LAI MPBAS-M < FICHIER NON ASSIGNABLE, BSR AENVOI < ON LE DIT... JMP QN03 QNIT: EQU $ LAD MTI BSR ATI < TYPE "ITEM"... JMP QN03 QNFI: EQU $ LAD MTF BSR ATI < TYPE "FICHIER", ET NOM INTERNE... QN03: EQU $ CPZ PASPAS < AUTOMATIQUE? JE QN360 < OUI, ON NE PROPOSE RIEN < QN320: EQU $ LAI MQ-M < QUESTION BSR AQREP < QUESTION, REPONSE. < < REPONSES POSSIBLES: < < < SI REPONSE=F (STOP PARCOURS), ALORS < NE RIEN FAIRE SUR LE NOM ET POSITIONNER < LA VARIABLE STOP < < < SI DMSUBO=0 (BOF) < + N R/C EOT NE RIEN FAIRE < O DUMP < - SUPPRESSION < < SI DMSUBO=1 (DUMP) < O DUMP < N R/C EOT NE RIEN FAIRE < < SI DMSUBO=-1(SUPPRESSION) < - SUPPRESSION < + R/C EOT NE RIEN FAIRE < < SI DMSUBO=-2 (EDITION) < R/C EOT SONT SEULS ADMIS, ET PROVOQUENT LE PASSAGE AU NOM SUIVANT. CPI "F" < STOP PARCOURS JNE QN080 IC STOP < OUI, STOP PARCOURS JMP QN321 < ET NE RIEN FAIRE QN080: EQU $ CPI '0D < R/C NE RIEN FAIRE JE QN321 CPI '04 < EOT NE RIEN FAIRE JE QN321 PSR A LA DMSUBO CPI -2 < TEST MODE "EDITION". PLR A JE QN320 < MODE EDITION, ET REPONSE DIFFERENTE < DE RETURN OU EOT : REPONSE NON RECONNUE CPZ DMSUBO JL QN010 < VERS SUPPRESSION < < BOF OU DUMP < CPI "N" < NE RIEN FAIRE JE QN321 CPI "O" < FAIRE DUMP JE QN015 CPZ DMSUBO JNE QN320 < REPONSE NON-RECONNUE < < BOF OU SUPPRESSION < QN010: EQU $ CPI "+" < NE RIEN FAIRE JE QN321 CPI "-" < FAIRE SUPPRESSION JE QN020 JMP QN320 < REPONSE NON RECONNUE QN360: EQU $ < < MODE AUTOMATIQUE ("PAS A PAS" = NON). < LA DMSUBO CPI -2 < TEST MODE EDITION. JE QN321 < EDITION : NE RIEN FAIRE... JAG QN015 < DUMP. JAL QN020 < SUPPRESSION. ACTD < IMPOSSIBLE !! QN015: EQU $ IC IQNOM < FAIRE DUMP JMP QN321 QN020: EQU $ DC IQNOM < FAIRE SUPPRESSION QN321: EQU $ RSR < RETOUR PAGE TRNC: EQU $ < < T R A I T E M E N T D U N O M E N C O U R S < IF ORDI-"S",XWOR%1,,XWOR%1 STZ IDMPNC < A PRIORI : IL N'Y A PAS EU DUMP < DU NOM COURANT. (UTILISE EN CAS DE < DUMP SOLAR SUR DKU, MULTIPLE) XWOR%1: VAL 0 BSR AQNOM < QOUI FAIRE SUR CE NOM? < QNOM POSITIONNE IQNOM CPZ IQNOM JNE TRNC2 STZ BOX < AU CAS OU IL Y AURAIT DE BSR AGESTM < L'ESPACE A RELACHER JMP TRNCF < NE RIEN FAIRE TRNC2: EQU $ LAI '1B < CTRL-SHIFT-K WORD '1EA5 < REMPLACE ALT-MODE CPZ IQNOM < RETEST JG TRNCD < FAIRE UN DUMP JL TRNCS < FAIRE SUPPRESSION TRNCD: EQU $ BSR ADUMP CPZ IDEL < DUMP & DELETE ??? JE TRNC1 < NON, DUMP SEUL... TRNCS: EQU $ < "DELETE" OU "DUMP & DELETE"... BSR ASUPP TRNC1: EQU $ LAI '7D < ALT-MODE WORD '1EA5 < REDEVIENT ALT-MODE TRNCF: EQU $ RSR PAGE SUPP: EQU $ < < S U P P R E S S I O N F I C H I E R O U I T E M < < E N C O U R S < BSR ATSTFI < TEST SI FICHIER OU ITEM < POSITIONNE INDFI < =0 ITEM < =1 FICHIER ASSIGNE A L'UL 3 < =-1 FICHIER NON-ASSIGNABLR CPZ INDFI JE SUPI < ITEM JG SUPF < FICHIER ASSIGNABLE < FICHIER NON-ASSIGNABLE LAI MPBAS-M < PREVENIR L'UTILISATEUR BSR AENVOI JMP SUPFIN SUPF: EQU $ < SUPPRESSION FICHIER IF ORDI-"T",XWOR%1,,XWOR%1 < ASSIGNATION EN RELEASE < !ASSIGN 3=R LA ASS5 STA ASS1 LAI "3" STBY ASSUL LAD DMASS SVC 0 < IL NE RESTE PLUS QU'A DELETER < AUSSI SON NOM XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 LAI "3" BSR ADESAS < DESASSIGNATION. LA ASSD STA ASS1 LAD DMASS < !ASSIGN 3=D-NOM FICHIER. SVC 0 < DELETE FICHIER. JE $+2 ACTD JMP SUPFIN XWOR%1: VAL 0 SUPI: EQU $ < SUPPRESSION ITEM < DELETE NOM+VALEUR LAI '83 LX LNC < LONGUEUR NOM ... ADRI -1,X < ...SANS EOT POUR GOSGN BSR AGOSGN JAE SUPFIN ACTD SUPFIN: EQU $ RSR PAGE DUMP: EQU $ < < D U M P F I C H I E R O U I T E M E N C O U R S < CPZ IPRDM < 1ER DUMP? JNE DM1 < OUI IC IPRDM < BASCULEMENT BSR AULB < ASSIGNATION DE L'UL 'B. DM1: EQU $ BSR ATSTFI < TEST SI FICHIER OU ITEM < POSITIONNE INDFI < =0 ITEM < =1 FICHIER, ASSIGNE A UL 3 < =-1 FICHIER NON-ASSIGNABLE CPZ INDFI JE DMI < ITEM JG DMF < FICHIER ASSIGNE A L'UL 3 LAI MPBAS-M < FICHIER NON-ASSIGNABLE, BSR AENVOI < PREVENIR UTILISATEUR JMP DMFIN DMI: EQU $ < ITEM BSR AGESTM LAD DMLON SVC 0 JE $+2 ACTD BSR ADITEM < DUMP ITEM JMP DMFIN2 DMF: EQU $ < FICHIER BSR AGESTM < GESTION ESPACE MEMOIRE BSR ADFICH < DUMP FICHIER LAI "3" BSR ADESAS < DESASSIGNATION SYSTEMATIQUE UL 3 DMFIN2: EQU $ IF ORDI-"S",XWOR%1,,XWOR%1 IC IDMPNC < IL Y A EU DUMP DU NOM COURANT (UTILISE < SUR SOLAR, DUMP DKU MULTIPLE). XWOR%1: VAL 0 DMFIN: EQU $ RSR PAGE DITEM: EQU $ < < D U M P I T E M E N C O U R S < LA BOX < "BOX" AD LNC < +LONG. EOT INCLUS ADRI 2,A < +2 STA &ALT < LONG. TOTALE CPZ TYPDMP < TYPE DUMP JNE DMPIV < DUMP VIRTUEL DMPII: EQU $ < IMPRIMANTE/OUTPUT LAD MTI BSR ATI < TITRE LX &ALT IVALEX:: VAL 0 < BIT INDIQUANT DANS LA LONGUEUR D'UN < ITEM, S'IL S'AGIT D'UN ITEM D'EXTENSION < SUR VOLUME (CF. 'BOX'). XR A,X RBT IVALEX < CAS DES EXTENSIONS SUR VOLUME... XR A,X ADRI -2,X < LONGUEUR A EDITER LA AXVAL SLLS 1 LR A,Y < ADR OCT DEBUT BSR AEDI < EDITION DMPIV: EQU $ < DUMP VIRTUEL IF ORDI-"S",XWOR%1,,XWOR%1 < EN SOLAR, POUR UN DUMP DKU, MODE MULTIPLE, ON FAIT < LE DUMP (EVENTUEL, VOIR OPTION STANDARD) DE DATE ET ACN < AVANT DE FAIRE CELUI DE L'ITEM. < CPZ STDKU JE DMPI1 BSR ADMPDA < DUMP DATE ET/OU ACN. JMP DMPI2 DMPI1: EQU $ < < DE PLUS, EN SOLAR, ON REGARDE SI L'ACN DE DUMP A CHANGE, < ET SI OUI, ON FAIT UN DUMP DE DATE ET ACN. < CPZ INACN < "NOUVEL" ACN ? JE DMPI2 STZ INACN < RAZ INDICATEUR. BSR ADMPDA < ET DUMP DATE, ACN. DMPI2: EQU $ XWOR%1: VAL 0 LA ALT SLLS 1 < ADR OCT DEBUT LX &ALT < LONGUEUR TOTALE BSR AWNPG < WRITE N CAR SUR PGE VIRT RSR PAGE DFICH: EQU $ < < D U M P F I C H I E R E N C O U R S < IF ORDI-"S",XWOR%1,,XWOR%1 < < EN SOLAR, POUR UN DUMP SUR DKU EN MODE MULTIPLE, ON FAIT LE DUMP < (EVENTUEL, VOIR OPTION STANDARD) DE DATE ET ACN AVANT DE FAIRE < CELUI DU FICHIER. < CPZ STDKU JE DMPF7 BSR ADMPDA < DUMP DATE ET/OU ACN. JMP DMPF8 DMPF7: EQU $ < < DE PLUS, EN SOLAR, ON REGARDE SI L'ACN DE DUMP A CHANGE, < ET SI OUI, ON FAIT UN DUMP DE DATE ET ACN. < CPZ INACN < "NOUVEL" ACN ? JE DMPF8 STZ INACN < RAZ INDICATEUR. BSR ADMPDA < ET DUMP DATE, ACN. DMPF8: EQU $ XWOR%1: VAL 0 LAI 'DF < DELIM DEB FICHIER BSR AW1PG LA AXNOM SLLS 1 < ADR DEB NOM LX LNC < LONGUEUR NOM BSR AWNPG < WRITE NOM VIRT < < EDITION EVENTUELLE TITRE < CPZ TYPDMP < TYPE DUMP JNE DMPF1 DMPFI: EQU $ < IMPRIMANTE/OUTPUT LAD MTF BSR ATI < TITRE SUR IMPRIM. OU VISU DMPF1: EQU $ < < PARCOURS DU FICHIER < SBR B,B < FIN FICHIER=NON DMPF2: EQU $ < TRAITEMENT FICHIER CPZR B < FIN ? JNE DMPF9 < NON, TRAITEMENT ENREGISTREMENT LAD DMOPN < OPEN NEXT SVC 0 JE DMPF3 ADRI 1,B < PAS DE NEXT, FIN FICH=OUI JMP DMPF2 DMPF3: EQU $ LAI 'DE < DELIMITEUR DEBUT ENR BSR ARCUPK < RECUPERATION DE LA CLE BSR AW1PG SBR Y,Y < FIN ENREGISTREMENT=NON LAD KN1 SLLS 1 < ADR OCT DEB KEY LXI 4 < LONG OCT BSR AWNPG < WRITE PVIRT CPZ TYPDMP < TYPE DUMP=IMPRIM/OUTPUT ? JNE DMPF4 BSR ATIK < OUI, TITRE-KEY IMPR/OUTPUT DMPF4: EQU $ < TRAITEMENT ENR CPZR Y < FIN ENR ? JNE DMPF5 < NON,LIRE & STOCKER BLOC SUIV LAD DMREAD < LECTURE BLOC SVC 0 JE DMPF6 DMPF41: EQU $ < PAS DE BLOC SUIVANT ADRI 1,Y < FIN ENREGISTREMENT=OUI JMP DMPF4 DMPF6: EQU $ < TRAITEMENT BLOC EN COURS CPZ &ABUFF < FIN ENR? JL DMPF41 < OUI, FAIRE FIN ENR LAI 'DB < NON, DELIM DEBUT BLOC BSR AW1PG BSR ABLOC LAI 'FB < DELIMITEUR FIN BLOC BSR AW1PG JMP DMPF4 < BLOC SUIVANT DMPF5: EQU $ < PIN ENREGISTREMENT LAD DMCLS < CLOSE SAVE ENR SVC 0 JE $+2 ACTD LAI 'FE < DELIMITEUR FIN ENR BSR AW1PG JMP DMPF2 < ENR SUIVANT DMPF9: EQU $ LAI 'FF < DELIMITEUR FIN FICHIER BSR AW1PG RSR PAGE BLOC: EQU $ < < D U M P D ' U N B L O C D E F I C H I E R < < < TRAITEMENT DU BLOC QU'ON VIENT DE LIRE < ON EDITE LE BLOC SUR PAGE VIRTUELLE ET, EVENTUELLEMENT, ON < L'ENVOIE AUSSI SUR IMPRIMANTE/OUTPUT < NOTA: B Y SONT A SAUVEGARDER < PSR B,Y < SAUVEGARDE CPZ TYPDMP < TYPE DUMP=IMPRIM/OUTPUT JNE BLOCV BLOCI: EQU $ < IMPRIMANTE/OUTPUT LY AOBUFF < ADR OCTET DEBUT BLOC A EDITER LX DMREAD+2 < LONGUEUR OCT A EDITER BSR AEDI < EDITION < PAS DE REINIT DE PFICH BLOCV: EQU $ < EDITION SUR PAGE VIRTUELLE LA AOBUFF < ADR DEBUT LX DMREAD+2 < LONGUEUR BSR AWNPG < WRITE < PLR B,Y < RESTAURATION RSR PAGE EDI: EQU $ < < E D I T I O N S U R I M P R I M A N T E / O U T P U T < < EN ENTREE Y ADR OCTET DEBUT ZONE A EDITER < X LONGUEUR OCTETS ZONE A EDITER < < ON EDITE N LIGNES CONTENANT : ADRESSE / CARACTERES HEXA / CARACTERES < ASCI "IMAGE" DES CARACTERES HEXA; LE TOUT ETANT EDITE DANS LE < BUFFER IMPRIMANTE 'BFI'. < < NOTA: < EN MODE NON STANDARD, ON N'EDITE QUE 'NBOCT' OCTETS < SI 'NBOCT' <= 'NOMBRE D'OCTETS DEMANDES' (X). < CPZ ISTAND < MODE STANDARD ? JE EDI14 < OUI, ON PREND (X) OCTETS. LR X,A CP NBOCT JLE EDI14 LX NBOCT < ON FORCE LE NOMBRE D'OCTETS. EDI14: EQU $ PSR X < SVG X POUR 1ERE ENTRY LAD DMSPI < ESPACEMENT (SAUT LIGNE) SVC 0 STZ ADRC < ADRESSE COURANTE=0 JMP EDI10 < 1ERE ENTREE DANS BOUCLE EDI1: EQU $ < BOUCLE PSR X < SVG COUNT (LONG RESTANTE) LA PBFI CP AOFCH < FIN D'EDITION DES CARACTERES ? JL EDI11 < OUI LAD DMLIG1 < EDITION PREMIERE PARTIE DE SVC 0 < LA LIGNE. LAD DMLIG2 < EDITION SECONDE PARTIE DE SVC 0 < LA LIGNE. EDI10: EQU $ < REINITIALISATIONS LXI BFIF-BFI-1 < R A BLANCS BFI LAI " " SWBR A,A ORI " " EDI100: EQU $ STA &AXBFI JDX EDI100 PSR Y LY AOBFI1 < ADRESSE OCTET EDITION DE < L'ADRESSE COURANTE. LA ADRC < ADRESSE COURANTE BSR ACONVA < CONVERSION ASCI ADRI BFIH-BFI1*2,Y < POUR ADRESSE COURANTE ET ESPACES. STY PBFI < MISE A JOUR PBFI. ADRI BFIASC-BFIH*2,Y < POUR CARACTERES ASCI "IMAGE" DES < CARACTERES HEXA CODES ASCI. STY PBFI2 < MISE A JOUR 'PBFI2'. PLR Y EDI11: EQU $ < EDITION DE 1 OCT (2 CAR. < SUIVIS EVENTUELLEMENT DE 1 BLANC) LR Y,X LBY &AXTRAV < OCTET EN COURS BSR AEDC < EDITION DE 2 CARACTERES HEXA CODE ASCI. RBT 8 < AU CAS OU LE CARACTERE DE PARITE SERAIT < UTILISE SUR DE L'ASCI... CPI " " JL EDI13 CPI "_" JLE EDI200 < CARACTERE IMPRIMABLE. PSR A LA SASS1 CP ASS7 < EST-CE "OUTPUT" (EN GENERAL VISU) ??? PLR A JE EDI201 < OUI... ADRI -'20,A < NON, "LP1", ON CONVERTIT LES MINUS- < CULES EN MAJUSCULES... JMP EDI200 < VERS L'EDITION... EDI201: EQU $ SBT 8 < CAS DE LA VISU (EN GENERAL) : ON FORCE < L'EDITION DES MINUSCULES... JMP EDI200 < VERS L'EDITION... EDI13: EQU $ < CARACTERE NON IMPRIMABLE : LAI "_" < ON REMPLACE PAR "_" EDI200: EQU $ < CARACTERE IMPRIMABLE... LX PBFI2 < INDEX CARACTERE ASCI. STBY &AXTRAV < STORE CARACTERE. IC PBFI2 < MISE A JOUR 'PBFI2'. ADRI 1,Y < OCTET SUIVANT IC ADRC < ADRESSE COURANTE LA ADRC ANDI '03 < ADRC MULTIPLE DE 4? JANE EDI12 IC PBFI < OUI,ON PASSE 1 BLANC <<<< IC PBFI2 < AINSI QUE DANS LA ZONE "IMAGE". < (CE QUE L'ON SUPPRIME...) EDI12: EQU $ PLR X < RECUP COUNT JDX EDI1 < BOUCLE LAD DMLIG1 < NE PAS OUBLIER L'EDITION, EN SVC 0 < DEUX FOIS, DE LA LIGNE EN LAD DMLIG2 < COURS.... SVC 0 RSR PAGE EDC: EQU $ < < E D I T I O N D E 2 C A R A C T E R E S < < S U R I M P R I M A N T E / O U T P U T < < ARGUMENT: < 'A' (BITS 8-15) = OCTET A EDITER < < EDITION DE 2 CARACTERES DANS LE BUFFER IMPRIMANTE BUFI < EN ENTREE A CONTIENT 1 OCTET, CET OCTET EST CONVERTI < POUR DONNER 2 CARACTERES HEXA < < PBFI, POINTEUR COURANT BUFFER IMPRIMANTE EST INCREMENTE < PSR A,B,X < SAUVEGARDES. SLRD 4 SLLS 12 < A(0-3)=1ER DIGIT < B(0-3)=2ND DIGIT LXI 2 EDC2: EQU $ < BOUCLE D'EDITION PSR X < SAUVEGARDE COUNT SLRS 12 < A(12-15)=DIGIT COURANT CPI '9 < CHIFFRE > '9 ? JLE EDC1 ADRI '7,A < OUI,LUI AJOUTER '7 (PUIS '30) EDC1: EQU $ ADRI '30,A < AJOUTER '30 -->CAR HEXA EDITABLE LX PBFI STBY &AXTRAV < STOCKAGE CARACTERE IC PBFI < POINTEUR='+1 LR B,A < SECOND DIGIT PLR X < RECUP COUNT JDX EDC2 < BOUCLE PLR A,B,X < RESTAURATIONS. RSR PAGE TI: EQU $ < < E D I T I O N T I T R E S U R I M P R I M A N T E / O U T P U T < < CE TITRE EST DE LA FORME : < < ITEM:<NOM DE L'ITEM> < OU < FICHIER:<NOM DU FICHIER> < IF ORDI-"S",XWOR%1,,XWOR%1 PSR W XWOR%1: VAL 0 LXI -2 LR A,W < ADRESSE "FICHIER"/"ITEM" TI1: EQU $ LA 0,W STA &AXMTFI ADRI 1,W JIX TI1 < LX LNC LAI '0D STBY &AXMTN < 'OD DERRIERE LE NOM < LAI MTN-MT*2+1 ADR X,A STA DMTI+2 < LONGUEUR LAD DMTI < WRITE TITRE SVC 0 LAD DMSPI < ESPACEMENT. SVC 0 < EDITION NOM INTERNE SI FICHIER CPZ INDFI < FICHIER ? JE TIF < OUI, EDITER NOM INTERNE LA NINT < NOM INTERNE A EDITER. LY DMNINT+1 ADRI MNI1-MNI*2,Y < ADRESSE OCTET EDITION NOM INTERNE BSR ACONVA < PLACE LE NOM INTERNE EN ASCI. LAD DMNINT < EDITION NOM SVC 0 TIF: EQU $ IF ORDI-"S",XWOR%1,,XWOR%1 PLR W XWOR%1: VAL 0 RSR PAGE TIK: EQU $ < < E D I T I O N T I T R E - K E Y S U R I M P R I M A N T E / < < O U T P U T < PSR A,X,Y < SAUVEGARDES. < LA KN1 < N1 DE LA CLE. LY DMTIK+1 ADRI MTIK1-MTIK*2,Y < ADRESSE OCTET EDITION DE N1. BSR ACONVA < QUI PLACE N1. < LA KN2 < N2 DE LA CLE. ADRI MTIK2-MTIK1*2,Y < ADRESSE OCTET EDITION DE N2. BSR ACONVA < QUI EDITE N2. < LAD DMTIK < EDITION DU TITRE - KEY. SVC 0 PLR A,X,Y < RESTAURATIONS. RSR PAGE TSTFI: EQU $ < < T E S T I T E M O U F I C H I E R < < TEST: LE NOM EN COURS DESIGNE-T-IL UN FICHIER OU UN ITEM ? <ON FAIT UN LON AVEC DELTA=-1 ET LONGUEUR > ('7F-'48-'6+1)*2 QUI MET <VALEUR DERRIERE NOM DANS ZONE VALEUR, ON RECUPERE "BOX" DANS BOX < < C'EST UN FICHIER SI: < <1: BOX=(('7F-'48-'6+1)*2)-LONGUEUR.DU.NOM.EN.COURS.EOT.INCLUS (CF: LNC)><2: LE <2: LE MOT D'ADRESSE ('7E-'48-'6) DE LA ZONE NOM-VALEUR = NSPTN+X123X <3: LE MOT D'ADRESSE ('7F-'48-'6) DE LA ZONE NOM-VALEUR =N AVEC < 0<=N<=511 < < POURQUOI? PARCE QUE LE SYSTEME A UN BUFFER DANS LEQUEL IL A: < EN '48 !A SS IG N N= X, SUIVI DE NOM-VALEUR < ------ 6 MOTS -- < DE PLUS ON A TOUJOURS POUR UN FICHIER: NOM+VALEUR < SUR '64 OCTETS DONT ON REGARDE CI-DESSUS (ET CI-DESSOUS) < US) LES DEUX DERNIERS < < < ENSUITE SI C'EST UN FICHIER, ONFAIT !ASSIGN 3=S PUIS < !ASSIGN 3=O,NOM-EN-COURS; SI CETTE ASSIGNATION N'EST PAS POSSIBLE <ON EN CONCLUT QUE LE FICHIER EST DEJA ASSIGNE AILLEURS < < AVANT DE REVENIR A L'APPELANT, ON POSITIONNE L'INDICATEUR INDFI <=0 C'EST UN ITEM <=1 C'EST UN FICHIER ET IL EST ASSIGNE A L'UL 3 <=-1 C'EST UN FICHIER MAIS ON N'A PAS PU L'ASSIGNER A L'UL 3 < < < < IL FAUT ETRE SUR DE POUVOIR UTILISER LA ZONE NOM+VALEUR < SANS DEPASSER L'ESPACE ACTUELLEMENT ALLOUE < LAI '70 < CELA SUFFIT STA BOX < POUR LE S/P GESTM BSR AGESTM < AJUSTEMENT MEMOIRE < < MOUVEMENT DU NOM-EN-COURS ET LON < LX LNC < LONG NOM-EN-COURS (EOT INCLUS) TS1: EQU $ < BOUCLE PSR X < SVG COUNT ADRI -1,X LBY &AXNOM STBY &AXVAL STBY &AXASS2 STBY &AXMTN PLR X < RECUP COUNT JDX TS1 < BOUCLE < LAI '7F-'48-6+1*2+1 STA DMLON+2 < LONGUEUR LAD DMLON < SGN LOAD NAME SVC 0 JE $+2 ACTD WORD '1E35 STB BOX < "BOX"=LONGUEUR VALEUR RBT 16+IVALEX LA LNC < LONG NOM EN COURS (EOT INCLUS) ADR B,A < + "BOX" STA DMLON+2 < POUR LOAD NAME SGN < STZ INDFI < INDFI=ITEM A PRIORI < < TEST 1 < LAI '7F-'48-6+1*2 SB LNC CP BOX JNE TS2 < < TEST 2 < LXI '7E-'48-6 LA &AXVAL CPI NSPSTN+X123X JNE TS2 < < TEST 3 < LXI '7F-'48-6 LA &AXVAL STA NINT < AU PASSAGE, STOCK NOM-INTERNE < DU FICHIER (SI C'EN EST UN ! ) SLRS 8 CPI 1 JG TS2 < < TESTS 1 2 3 REUSSIS: C'EST DONC UN FICHIER < IF ORDI-"T",XWOR%1,,XWOR%1 LAI 128-1 SLLS 1 < A = 128-1*2 XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 LRM A WORD QUANTA*128-1*2 XWOR%1: VAL 0 < CECI POUR LA GESTION MEMOIRE; < EN EFFET, UN FICHIER UTILISANT STA BOX < UTILISANT EN RECOUVREMENT LES ZONES < LT ET VALEUR, IL PREND QUANTA*128-1 < MOTS SUR NOM+VALEUR D'OU LE POSITIONNEMEN < POSITIONNEMENT DE 'BOX' POUR < LE S/P GESTM. < < TENTATIVE D'ASSIGNATION < LAI "3" BSR ADESAS < DESASSIGNATION UL 3 < ASSIGNATION UL 3 LA ASS4 STA ASS1 LAD DMASS SVC 0 JNE TS3 IC INDFI < INDFI=1 JMP TS2 TS3: EQU $ DC INDFI < INDFI=-1(ASSIGNATION IMPOSSIBLE) TS2: EQU $ RSR IF ORDI-"S",XWOR%1,,XWOR%1 PAGE TSTAC: EQU $ < < T E S T A C N D E L O G O N " I N I T I A L ". < < RESULTAT: < - 'ACNC' RECOIT L'ACN COURANT. < - TESTER AU RETOUR COMME CECI: < < JE ACN INITIAL = :SYS < JNE ACN INITIAL # :SYS. < PSR A,B,X < WORD '1E25 < 'A' ET 'B' RECOIVENT L'ACN COURANT. STA ACNC < QU'ON STOCKE. STB ACNC+1 < LAD DMLGSY < ESSAYONS LOGON :SYS. SVC 0 LR X,B < 'B' = CODE RETOUR. LAD DMLGNC < RELOGON SOUS ACN COURANT. SVC 0 < ET ICI, PEU IMPORTE LE CODE RETOUR. CPZR B < POUR TEST EN RETOUR. < PLR A,B,X RSR XWOR%1: VAL 0 PAGE ULB: EQU $ < < C H O I X D ' U N S U P P O R T D E < < D U M P A A S S I G N E R A L ' U L ' B < < IL S'AGIT DE DEMANDER A L'UTILISATEUR SUR QUEL SUPPORT < EXTERNE IL VEUT SORTIR SES DUMP, LE SACHANT: < 1-ON ASSIGNE L'UL B AU BON SUPPORT, ET SI CA N'EST < PAS POSSIBLE, ON LE DIT ET ON BOUCLE < 2-ON INITIALISE L'INDICATEUR TYPDMP A LA BONNE VALEUR < 0 IMPRIMANTE/OUTPUT < 1 FICHIER < 2 LIGNE VISU IF ORDI-"S",XWOR%1,,XWOR%1 < 3 DKU < 4 CDA XWOR%1: VAL 0 < -1 PERFORATEUR DE CARTES < 3-ON FIXE LA TAILLE DE LA PAGE VIRTUELLE ET TOUT CE < QUI EN RESULTE CAR ON A EN MEMOIRE: < DEBUT PAGE < FIN PAGE < ZONE LT (1 MOT) LONG TOTALE NOM+VAL ITEM < VALEUR NOM+VALEUR ITEM < < BUFF BUFFER FICHIER EN RECOUVREMENT AVEC LT < < < D'OU IL SUIT QUE LA TAILLE DE PAGE ETANT FIXEE, < ON DOIT FIXER AUSSI LES ADRESSES DE TOUT CE QUI SUIT < < IF ORDI-"S",XWOR%,,XWOR% STZ STDKU < MODE CONTINU A PRIORI (CF. DKU). XWOR%: VAL 0 STZ IPRW1P < PREMIER APPEL 'W1P' = OUI. STZ IPRWPG < PREMIER APPEL 'WPG' = OUI. LAI "B" BSR ADESAS < DESASSIGNATION UL 'B STZ TYPDMP < TYPE DUMP=IMPRIM/VISU A PRIORI LA AOPAG0 STA AOPAG < ADR DEB PAGE A PRIORI AD LPP STA AOFPAG < ADR FIN PAGE A PRIORI LAI MULB-M BSR AQREP < QUESTION, REPONSE. < < ANALYSE REPONSE UTILISATEUR < CPI "I" < IMPRIMANTE JE ULBI CPI "O" < OUTPUT JE ULBO CPI "C" < CARTES JE ULBC CPI "F" < FICHIER JE ULBF CPI "V" < LIGNE VISU JE ULBV IF ORDI-"S",XWOR%1,,XWOR%1 CPI "D" < DKU JE ULBD CPI "M" < MEMOIRE COMMUNE JE ULBM CPI "T" JE ULBT < MT1 XWOR%1: VAL 0 < JMP ULB < REPONSE NON RECONNUE ULBI: EQU $ < IMPRIMANTE LA ASS6 STA ASS1 LA ASS6+1 STA ASS1+1 < ON PREPARE ASSIGN "LP1" JMP ULBAS ULBO: EQU $ < ORGANE D'OUTPUT LA ASS7 STA ASS1 < POR ASSIGN B=O JMP ULBAS ULBC: EQU $ < PERFORATEUR CI1 OU CU2 DC TYPDMP < TYPE DUMP=-1 LAI 3 STA DMTMPO+2 < CARTES : TEMPO DE 3 SECONDES. LA ASS8 STA ASS1 LA ASS81 STA ASS1+1 LAI "B" STBY ASSUL LAD DMASS < ESSAI ASSIGN CU1 SVC 0 JE ULBOK LA ASS82 STA ASS1+1 < ESSAI ASSIGN CU2 JMP ULBAS ULBF: EQU $ < FICHIER IC TYPDMP < TYPDUMP=1 LA AOPAG2 STA AOPAG < FIXATION ADR DEB PAGE AD LPF STA AOFPAG < FIXATION ADR FIN PAGE LAI MFICH-M BSR AENVOI < ENVOI INVITATION POUR NOM FICH LAD DMREPF < DEMANDE NOM SVC 0 LA ASSN STA ASS1 JMP ULBAS ULBV: EQU $ < LIGNE VISU LAI 2 STA TYPDMP < TYPDMP=2 LA ASS9 < PREPARATION ASSIGNATION STA ASS1 LA ASS91 STA ASS1+1 LAI MQV-M < ENVOI DEMANDE... BSR AQREP < ...QUELLE VISU? < AU RETOUR A=NUMERO DE VISU DEMANDE. STBY ASS1+1 < POUR L'ASSIGNATION IF LPAP-LPAV,,XWOR%1, LA AOPAG0 AD LPV STA AOFPAG < FIXATION ADRESSE FIN DE PAGE XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 JMP ULBAS ULBT: EQU $ LA ASSMT LB ASSMT+1 STA ASS1 < GENERATION DE LA CARTE !ASSIGN... STB ASS1+1 XWOR%1: VAL '0B LAI XWOR%1='FA00('00FF STBY ASSUL < POUR FAIRE !ASSIGN B=MT1... LAD DMASS SVC 0 < ASSIGNATION DE '0B A 'MT1'... JNE ULBNOK < CE QUI EST IMPOSSIBLE !!! LRM A,B BYTE XWOR%1;'0A < ECRITURE SUR MT1, BYTE XWOR%1;'08 < LECTURE SUR MT1. JMP ULBDT < OK, ON FAIT COMME POUR DKU... ULBD: EQU $ < DKU ULBDQ: EQU $ LAD QOUT SVC 0 < EDITION DE "!Q", LAD QIN SVC 0 < ENTREE DES GROUPES A PROTEGER, LAD QCCI SVC 0 < ENVOI DE "!QXXXX" AU CCI, JNE ULBDQ < ???!?! LAD DKCCI SVC 0 < MISE OFF DE LA SYNCHRONISATION SUR < LKE SECTEUR 0 DE DKU... LRM A,B WORD '8A02 < ECRITURE SUR DKU, WORD '8A00 < LECTURE SUR DKU. ULBDT: EQU $ STA DMWDKU < GENERATION DES DEMANDES DE STB DMRDKU < ECRITURE ET DE LECTURE... LAI 3 < TYPDMP=3 STA TYPDMP BSR ASP2 < INITIALISATION DE DKU. JMP ULBOK < PAS BESOIN D'ASSIGNATION EXPLICITE. < ULBM: EQU $ < MEMOIRE COMMUNE. LAI 4 STA TYPDMP < TYPDMP=4. LA AOPAG0 AD LPM STA AOFPAG < ADRESSE FIN DE PAGE VIRTUELLE. ULBM1: EQU $ < ON PROPOSE D'INITIALISER LES VERROUS EN CDA. LAI MINIT-M BSR AQREP < QUESTION / REPONSE. CPI "N" JE ULBM2 < NE PAS INITIALISER. CPI "O" JNE ULBM1 < REPONSE INCORRECTE. < INITIALISER LES 'NBV' VERROUS A LA VALEUR 'SETV'. STZ NVC < NUMERO VERROU COURANT. LX NBV < NOMBRE DE VERROUS. ULBM3: EQU $ BSR ASETV < SET VERROU COURANT 'NVC'. IC NVC < INCREMENTATION 'NVC' MODULO 'NBV'. LA NVC CP NBV JL $+2 STZ NVC JDX ULBM3 ULBM2: EQU $ < INITIALISATIONS. STZ NVC < VERROU COURANT INITIAL. LAD DMCDA < !CDA. SVC 0 JE $+2 ACTD JMP ULBOK XWOR%1: VAL 0 ULBAS: EQU $ < ESSAI ASSIGNATION LA ASS1 STA SASS1 < SAUVEGARDE DE 'ASS1' POUR UNE DISTINC- < TION EVENTUELLE ENTRE "O" ET "LP1"... LAI "B" STBY ASSUL IF ORDI-"S",XWOR%1,,XWOR%1 BSR ATSTAC < TEST ACN DE LOGON INITIAL (CE S/P < VA AUSSI POSITIONNER 'ACNC' CE QUI < PERMETTRA CI-DESSOUS UNE DEMANDE DE < LOGON ACN COURANT...). JNE ULBE LAD DMLGSY < ICI, ON SAIT QUE L'ACN DE LOGON SVC 0 < INITIAL EST :SYS. ON SE MET DONC SOUS < :SYS POUR ASSIGNER L'UL 'B, CETTE < ASSIGNATION NE RISQUE DONC PAS DE < ETRE REFUSEE POUR DES RAISONS D'HA- < BILITATION. ULBE: EQU $ XWOR%1: VAL 0 LAD DMASS SVC 0 IF ORDI-"S",XWOR%1,,XWOR%1 PSR X < SAVE CODE RETOUR. LAD DMLGNC < LOGON SOUS ACN COURANT (ET TANT PIS SVC 0 < POUR CE CODE RETOUR-LA). PLR X < RESTAURATION CODE RETOUR. CPZR X XWOR%1: VAL 0 JE ULBOK < ASSIGNATION OK ULBNOK: EQU $ LAI MIMP-M < ASSIGNATION IMPOSSIBLE BSR AENVOI < ON LE SIGNALE... BR AULB < ...ET ON BOUCLE ULBOK: EQU $ CPZ TYPDMP < IMPRIMANTE/VISU? JNE ULB2 ULB7: EQU $ CPZ ISTAND < MODE STANDARD ? JE ULB6 LAI MNBOCT-M < INVITATION. BSR AENVOI LAD DMNBOC < DEMANDE NOMBRE D'OCTETS. SVC 0 LA DMNBOC+1 < ADRESSE OCTET REPONSE BSR ACONVH < CONVERSION HEXA JNE ULB7 < REPONSE INCORRECTE. JALE ULB7 < REPONSE INACCEPTABLE STA NBOCT < NOMBRE D'OCTETS. ULB6: EQU $ LAD DMSKIP < SAUT DE PAGE TOUT DE SUITE SVC 0 ULB2: EQU $ < < FIXATION ADRESSES DE: LT (ET BUFF EN RECOUVREMENT) < VALEUR (NOM+VAL) < LA AOFPAG < ADRESSE FIN PAGE VIRTUELLE ADRI 2,A STA DMLON+1 < --->ADR NOM+VALEUR ADRI -2,A STA AOBUFF < --->ADR OCT BUFFER FICH STA DMREAD+1 < IDEM STA DMRDK+1 < ADRESSE OCTET BUFFER DISQUE SLRS 1 < EN MOTS STA ABUFF < ADR MOT BUFFER FICH STA ALT < ADR LONGUEUR TOTALE ADRI 1,A SBT 0 STA AXVAL < RELAI INDEXE NOM+VALEUR IF ORDI-"S",XWOR%1,,XWOR%1 < < SI LE DUMP EST SUR CARTES OU SUR VISU, ON < DEMANDE S'IL EST DESTINE A UN SOLAR OU A UN T1600 < < SI LE DUMP EST SUR FICHIER, ON DONNE A CHOISIR LE QUANTA < DU FICHIER DE SAUVEGARDE, CELUI-CI VALANT 'QUANTA' A PRIORI. < < < SI LE DUMP EST SUR DKU, ON DEMANDE LES ADRESSES DE DEBUT ET DE FIN < LA TYPDMP < TYPE DE DUMP JAL ULB3 < CARTES CPI 2 JE ULB3 < VISU CPI 3 JE ULB1 < DKU CPI 1 JNE ULB4 ULB5: EQU $ < DUMP SUR FICHIER LAI MQFS-M < QUANTA DU FICHIER DE SAUVEGARDE ? BSR AQREP < QUESTION, REPONSE. AU RETOUR LA < REPONSE EST DANS 'A'. XWORK1: VAL QUANTA='FA00('00FF CPI XWORK1 < Q DEMANDE = Q UTILISE ? JE ULB4 < OUI, RIEN A FAIRE. CPI "1" < QUANTA 1 DEMANDE ? JNE ULB5 < REPONSE NON RECONNUE LRM A,B WORD 128-1*2 < TAILLE PAGE VIRTUELLE WORD 128*2 < TAILLE BUFFER POUR DEMANDE SGF STB DMWBLC+2 AD AOPAG2 < ADRESSE DE FIN DE PAGE VIRTUELLE STA AOFPAG < ET TANT PIS POUR LES < (QUANTA-1*128) MOTS RESERVES < ET DEVENUS INUTILES !!! JMP ULB4 ULB3: EQU $ < DUMP CARTES OU VISU LAI MTOUS-M < ENVOI DEMANDE BSR AQREP < QUESTION, REPONSE. CPI "S" JE ULB4 < SOLAR: LA TAILLE BUFFERS FICHIERS < A DUMPER A ETE CORRECTEMENT < INITIALISEE CPI "T" < T1600 ? JNE ULB3 LRM A < VERS T1600 WORD 128*2 < D'OU LA TAILLE BUFFER STA DMREAD+2 < DANS LA DEMANDE SGF JMP ULB4 ULB1: EQU $ < CAS DKU LAI MASD-M < DEMANDE ADRESSE DEBUT BSR ADVAS STA ADKUD ADRI -1,A STA DMWDKU+3 LAI MASF-M < DEMANDE ADRESSE FIN BSR ADVAS STA ADKUF EOR ADKUD < VERIFICATION DE FIN>=DEBUT JAGE ULB8 CPZ ADKUF JGE ULB1 JMP ULB9 ULB8: EQU $ LA ADKUD CP ADKUF JG ULB1 ULB9: EQU $ < < DEFINITION DU SYSTEME DE CODAGE : < STZ ICLEF < PAS DE CODAGE A PRIORI... LAI MCLEF1-M BSR AENVOI LAD DMCLEF SVC 0 < ENTREE DE LA CLEF DE CODAGE : LXI 0 < X=INDEX DES CLEFS, LBI 0 < POUR DETECTER LES CLEFS IDENTIQUES. CLEF1: EQU $ LBY &ACLEF < A=CLEF COURANTE : ADRI -"0",A < CONVERSION BINAIRE : JAL CLEF9 < ERREUR ==> PAS DE CODAGE !!! CPI 10 JL CLEF2 < C'EST UN CHIFFRE DECIMAL... ADRI -"A"+"9"+1,A CPI 10 JL CLEF9 < ERREUR ==> PAS DE CODAGE... CPI 16 JGE CLEF9 < ERREUR ==> PAS DE CODAGE... CLEF2: EQU $ STBY &ACLEF < SAUVEGARDE DE LA CLEF EN BINAIRE... XR A,X STBY &ACLEFB < POUR LES ERREURS EVENTUELLES... < (IL FAUT REDECODER...) TBT 16,X < EXISTE-T'ELLE DEJA ??? SBT 16,X XR A,X JC CLEF9 < OUI ==> PAS DE CODAGE... ADRI 1,X < A LA SUIVANTE... LR X,A CPI LCLEF JL CLEF1 < OK, IL Y EN A UNE... LAI MCLEF2-M BSR AENVOI < C'EST FINI, TOUT EST BON, ON < LE DIT, IC ICLEF < ET ON LE MEMORISE... CLEF9: EQU $ ULB9X: EQU $ LAI MSTDKU-M BSR AQREP < CONTINU OU DISCONTINU ??? CPI "O" JE ULB9Y < CONTINU : STDKU=0... ULBD2: EQU $ CPI "N" JNE ULB9X < ??? IC STDKU < DISCONTINU : STDKU=1... ULB9Y: EQU $ ULB4: EQU $ XWOR%1: VAL 0 LA AOFPAG < CALCUL ET STOCKAGE DE ADRI -2,A < L'ADRESSE CRITIQUE POUR L'ALGORITHME STA AOCRIT < DE COMPACTAGE < < ICI, ON PEUT DEJA ENVOYER DATE DUMP ET ACN DUMP EN PAGE VIRTUELLE, < MAIS ON NE LE FERA QUE SI L'ON N'EST PAS EN DUMP SOLAR SUR DKU. < EN EFFET, DANS CE DERNIER CAS, DATE ET ACN SERONT ENVOYES A CHAQUE < FOIS QUE L'ON FERA LE DUMP D'UNE ENTITE (FICHIER, ITEM, ESPACE DISQUE). < IF ORDI-"T",XWOR%1,,XWOR%1 BSR ADMPDA < DUMP DATE ET ACN. XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 CPZ STDKU JNE ULBA BSR ADMPDA < DUMP DATE ET ACN. ULBA: EQU $ XWOR%1: VAL 0 RSR PAGE DMPDA: EQU $ < < A C Q U I S I T I O N E T D U M P D E L A D A T E < < E T D E L ' A C N . S Y S T E M A T I Q U E M E N T < < S I L ' O N E S T E N M O D E S T A N D A R D ; < < O P T I O N N E L L E M E N T S I N O N. < < LA DATE SERA ENVOYEE EN PAGE VIRTUELLE SOUS FORME < DE 12 CHIFFRES ASCI (AA MM JJ HH MM SS) PRECEDES DU < DELIMITEUR 'DA. < L'ACN SERA ENVOYE PRECEDE DU DELIMITEUR 'AC. < PSR A,B,X,Y < SAUVEGARDES PSR W < SUITE SAUVEGARDES < < FAUT-IL COMPACTER ??? < LAI MCOMPA-M BSR ACHOIX STA ICOMPA < ICOMPA=0 : COMPACTER, < #0 : NE PAS COMPACTER... < < DUMP EVENTUEL DE LA DATE (PRECEDEE DU DELIMITEUR 'DA) < EN PAGE VIRTUELLE. < LAI MDATE-M < MESSAGE POUR PROPOSITION EVENTUELLE. BSR ACHOIX < CHOIX DE L'OPTION. JANE DMPDA3 < PAS DE DUMP DATE. < < ACQUISITION ET DUMP DE LA DATE. < LAI 'DA < DELIMITEUR SIGNIFIANT "DATE". BSR AW1PG < ON L'ECRIT EN PAGE VIRTUELLE. LAI NSPDAT SBT 0 WORD '1E15 < 'B' <--- ADRESSE MOT DES 6 MOTS < CONTENANT LA DATE ET L'HEURE < DANS L'ORDRE HABITUEL ET EN BINAIRE < DANS LEUR OCTET DROIT. LR B,Y < 'Y' = ADRESSE MOT COURANT. LXI 6 < 6 MOTS (AA MM JJ HH MM SS). IF ORDI-"T",XWOR%1,,XWOR%1 LA AWORK LR A,W < ADRESSE ZONE DE STOCKAGE DATE. XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 LRM W WORD WORK < ZONE DE STOCKAGE DATE OBTENUE. XWOR%1: VAL 0 DMPDA1: EQU $ LR Y,A ADRI 1,Y < C'EST FAIT. WORD '1E15 < ACCES AU MOT COURANT. STB 0,W < STOCKAGE EN ZONE DE TRAVAIL. ADRI 1,W < POUR MOT SUIVANT. JDX DMPDA1 < AU SUIVANT. < < IL FAUT INVERSER ANNEE ET JOUR POUR METTRE LA DATE DANS L'ORDRE < HABITUEL. < ADRI -6,W < 'W' POINTE LE PREMIER MOT DE 'WORK'. LA 0,W IF ORDI-"T",XWOR%1,,XWOR%1 LB 2,W STB 0,W STA 2,W < ECHANGE ANNEE/JOUR EFFECTUE. XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 XM 2,W STA 0,W < ECHANGE ANNEE/JOUR EFFECTUE. XWOR%1: VAL 0 LXI 6 < 6 MOTS (JJ MM AA HH MM SS). DMPDA5: EQU $ LB 0,W < ACCES AU MOT COURANT. ADRI 1,W < C'EST FAIT. SLLD 16+8 < ON RAZE 'A' ET 'B'(0-7). SLRD 16+8 DV DIX < 'A'=QUOTIENT; 'B'=RESTE. ORI '30 < CONVERSION ASCI. BSR AW1PG < ECRITURE EN PAGE VIRTUELLE. LR B,A ORI '30 < CONVERSION ASCI SECOND CHIFFRE. BSR AW1PG < ET SON ECRITURE EN PAGE VIRTUELLE. JDX DMPDA5 < DMPDA3: EQU $ < < DUMP EVENTUEL DE L'ACN (PRECEDE DU DELIMITEUR 'AC) EN PAGE VIRTUELLE. < LAI MACN-M < MESSAGE POUR PROPOSITION EVENTUELLE. BSR ACHOIX < CHOIX DE L'OPTION. JANE DMPDA2 < PAS DE DUMP DE L'ACN. < < ACQUISITION ET DUMP DE L'ACN. < LAI 'AC < DELIMITEUR SIGNIFIANT "ACN". BSR AW1PG < ON L'ECRIT EN PAGE VIRTUELLE. WORD '1E25 < 'A' ET 'B' RECOIVENT L'ACN. LR B,Y < ON PROTEGE 'B'. LXI 2 DMPDA4: EQU $ SLRD 8 < PREMIER OCTET. BSR AW1PG < WRITE. SLLD 8 < SECOND OCTET. BSR AW1PG < WRITE. LR Y,A < AUX DEUX OCTETS SUIVANTS. JDX DMPDA4 DMPDA2: EQU $ PLR W < RESTAURATIONS... PLR A,B,X,Y < FIN RESTAURATIONS. RSR PAGE SP1: EQU $ < < F I N D E T R A V A I L - O P E R A T I O N S D E F I N < < SI L'ON A FAIT AU MOINS UN DUMP, < ON ENVOIE DELIMITEUR DE FIN < SUR PAGE VIRTUELLE, ET ON L'ECRIT < DELIM DE FIN = '0000 CPZ IPRDM < AU MOINS 1 DUMP ? JE PAR51 < OUI < ENVOYER '0000 LAI 0 BSR AW1PG LAI 0 BSR AW1PG IF ORDI-"S",XWOR%1,,XWOR%1 < < CELA ETANT FAIT, IL NOUS FAUT PRENDRE UNE PRECAUTION. EN SUPPOSANT < QUE NOUS SOYONS EN DUMP DKU MULTIPLE ET QUE NOUS REMPLISSIONS < COMPLETEMENT LA PAGE COURANTE, NOUS PROVOQUERONS UN PLANTAGE DE REST < LORS DE LA RESTAURATION. EN EFFET, CELUI-CI, LORSQU'IL A EXPLOITE < LE DERNIER OCTET D'UNE PAGE VIRTUELLE, DEMANDE LA LECTURE DE LA < PAGE SUIVANTE (CF: REST S/P 'LDC'). EN DKU MULTIPLE, IL TROUVERA < SUR LA DITE PAGE UN CHAINAGE = 0, ALORS QU'IL ATTEND AUTRE CHOSE < (CF: LECTURE PAGE VIRTUELLE DKU DANS REST). < SOLUTION: EN DUMP DKU MULTIPLE, IL SUFFIT D'ENVOYER EN PAGE VIRTUELLE < NON PAS DEUX MAIS TROIS DELIMITEURS '0. LE DERNIER DE CEUX-CI NE SERA < JAMAIS EXPLOITE PAR REST, MAIS DANS LE CAS PRECITE, REST TROUVERA UN < BLOC CORRECTEMENT CHAINE, INUTILE CERTES, MAIS IL EST TOUJOURS < DANGEREUX DE CONTRARIER UN PROGRAMME... < CPZ STDKU < ALORS, ON EST EN MODE DKU MULTIPLE? JE SP11 < OUI, FAISONS NOTRE PETITE CUISINE... LAI 0 < VOICI NOTRE TROISIEME DELIMITEUR. BSR AW1PG < ET VOILA... SP11: EQU $ XWOR%1: VAL 0 < < STORER LE COMPTEUR DE COMPACTAGE < EN COURS LX PCMP LA CCMP STBY &AXTRAV < WRITE DERNIERE PAGE CPZ IPRWPG < Y-A-T-IL DEJA EU 1 WRITE < PAGE VIRTUELL? JNE PAR52 < OUI BSR AWPG < NON,FAIRE UN APPEL PAR52: EQU $ LAI -1 STA IPRWPG < IPRWPG=DERNIER APPEL BSR AWPG < WRITE PAGE VIRTUELLE < LE S/P WPG SE DEBROILLE POUR < NE PAS FAIRE DE WRITE INUTILES PAR51: EQU $ STZ BOX BSR AGESTM < ON RELACHE L'ESPACE < INUTILE RSR IF ORDI-"S",XWOR%,,XWOR% PAGE SP2: EQU $ < < I N I T I A L I S A T I O N D K U : < LA AOPAG2 < DEBUT PAGE VIRTUELLE STA AOPAG AD LPD < FIN DE CETTE PAGE STA AOFPAG STZ N0BDKU < INIT. DU NUMERO DE BLOC RSR XWOR%: VAL 0 PAGE RCUPK: EQU $ < < R E C U P E R A T I O N D E L A C L E D E < < L ' E N R E G I S T R E M E N T E N C O U R S < < < RESULTAT: < 'KN1' ET 'KN2' RECOIVENT (N1,N2). < < < NOTA: < ---- < < EN T1600, ON VA CHERCHER N1 ET N2 PAR UNE SERIE < DE '1E15. EN SOLAR, ON UTILISE LES POSSIBILITES DU < SYSTEME QUI RENVOIE DANS LA 'BOX': < - N1 SUITE A UN OPEN NEW/NEXT/OLD KEY. < - N2 SUITE A UN CLOSE SAVE/RELEASE KEY. < IF ORDI-"T",XWOR%1,,XWOR%1 PSR A,B,X WORD '1E45 < A <--- SYSID ADRI NSPESC,A SBT 0 WORD '1E15 < B <--- A(CONTEXTE UTILISATEUR) LR B,A ADRI '3/2+'39,A WORD '1E15 < B <--- A(UL '2 & '3) LR B,A ANDI 'FF < A=NSP FICHIER SBT 0 RBT 8 WORD '1E15 < B <--- A(CONTEXTE FICHIER) LR B,A ADRI CLEFS+VAR,A < A POINTE N1 PSR A ADRI 1,A < A POINTE SUR N2 WORD '1E15 < B RECOIT N2 STB KN2 PLR A WORD '1E15 < B RECOIT N1 STB KN1 PLR A,B,X RSR XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 < < NOUS SOMMES EN SOLAR; NOUS VENONS DE FAIRE UN OPEN NEXT KEY; < DONC UN '1E35 DONNERA DANS 'B': < - BIT 0 : = 1 N2 EST NON NUL. < = 0 N2 EST NUL. < - BITS 3-15 : N1. < PSR A,B,X < SAUVEGARDES. WORD '1E35 TBT 16+0 < N2 NUL OU PAS ? RBT 16+0 < ON RAZE... STB KN1 < ... AVANT DE STOCKER N1. STZ KN2 < N2 EST NUL A PRIORI. JNC RCUP1 < SI N2 EST BIEN NUL. < < N2 N'ETANT PAS NUL, IL FAUT POUR LE RECUPERER FAIRE UN CLOSE SAVE < KEY, LIRE N2 DANS LA 'BOX', PUIS FAIRE UN OPEN OLD KEY POUR < FAIRE COMME SI RIEN NE S'ETAIT PASSE... < LAD DMCLS < CLOSE SAVE KEY. SVC 0 WORD '1E35 < 'B' RECOIT 'BOX'. STB KN2 < ON A LE N2 DE LA CLE. LAD DMOPOK < OPEN OLD KEY... SVC 0 RCUP1: EQU $ PLR A,B,X < RESTAURATIONS. RSR XWOR%1: VAL 0 PAGE DMPDK: EQU $ < < D U M P D I S Q U E < IF ORDI-"S",XWOR%1,,XWOR%1 PSR W < < EN SOLAR, A PRIORI, ON LIT LE DISQUE A DUMPER EN UTILISANT UNE < ASSIGNATION EXPLICITE. < LAI 3 STBY DMRDK LAI 1 STA PASSEC < PAS DE 1 A PRIORI... DMPDKQ: EQU $ XWOR%1: VAL 0 LAI "3" < DESASSIGNATION UL 3 BSR ADESAS LBY DMASDK+1 STZ DMASDK+1 STBY DMASDK+1 LAD DMASDK < DECONNEXION UL 3 SVC 0 IF ORDI-"S",XWOR%1,,XWOR%1 LA DMRDK < IL FAUT "RAZER" SYSTEMATIQUEMENT RBT 12 < LE BIT 12 DE LA DEMANDE DK. STA DMRDK < < PROPOSITION DE RECHERCHE : < DMQDKA: EQU $ STZ IRECHE < NON A PRIORI... CPZ ISTAND < EST-CE LE MODE STANDARD ??? JE DMQDKB < OUI, PAS DE RECHERCHE... LAI MRECHE-M < NON, BSR AQREP < VEUT-ON UNE RECHERCHE ??? CPI "N" JE DMQDKC < VERS LE PAS DES ADRESSES... CPI "O" JNE DMQDKA < ??!!?!? IC IRECHE < OUI : LAI MCHAIN-M BSR AENVOI LAD DRECHE SVC 0 < ENTREE DE LA CHAINE RECHERCHEE... LAI '7F STA MASKRE <POUR L'ASCI, ON IGNORE LA PARITE... LXI 0 LBY &ARECHE < (A)=PREMIER CARACTERE DE LA CHAINE : CPI '04 < EST-ELLE VIDE ??? JE DMPDKX < OUI... CPI '0D < EST-ELLE VIDE ?? JNE DMPDK2 < NON... DMPDKX: EQU $ < OUI, ENTREE HEXA-DECIMALE : LAI MCHAIX-M BSR AENVOI LAD DRECHX SVC 0 LA DRECHX+1 BSR ACONVH < CONVERSION BINAIRE DES 4 CARACTERES : JNE DMPDKX < ERREUR, ON REDEMANDE... LXI 0 < OK : STA &ARECHE < ET ON MET LES 4 CHIFFRES HEXA-DECIMAUX < EN TETE DU BUFFER, LXI 2 LAI '04 STBY &ARECHE < SUIVI D'UNE FIN DE MESSAGE... LAI 'FF STA MASKRE < POUR L'HEXA, ON PREND LES 8 BITS... DMPDK2: EQU $ < < ENTREE DU PAS DES ADRESSES DISQUES : < DMQDKC: EQU $ LAI MPASEC-M BSR AENVOI < ENOI DE L'INVITATION : LAD DMASNS SVC 0 < ENTREE DU PAS, LA DMASNS+1 BSR ACONVH < CONVERSION BINAIRE : JNE DMQDKC < FAUTE DE SYNTAXE... JALE DMQDKC < LE PAS DOIT ETRE POSITIF STRICTEMENT... STA PASSEC < OK... DMQDKB: EQU $ XWOR%1: VAL 0 < < PROPOSITION DE DEBUG DES BUFFERS DK < DMPDKG: EQU $ STZ IDEBUG < PAS DE DEBUG A PRIORI CPZ ISTAND < MODE STANDARD ? JE DMPDKH < ALORS PAS DE DEBUG DK. LAI MDEBUG-M BSR AQREP < INVITATION ET REPONSE CPI "N" JE DMPDKH < PAS DE DEBUG DEMANDE CPI "O" JNE DMPDKG < REPONSE NON RECONNUE IC IDEBUG < DEBUG DEMANDE < < PROPOSITION D'UN NUMERO DE DISQUE < DMPDKH: EQU $ LAI MQDK-M BSR AQREP < QUESTION, REPONSE: AU RETOUR LE < NUMERO DE DK DEMANDE EST DANS 'A'. STBY DMIDK1+1 < POUR EDITION EVENTUELLE CPI "3" < DK3 ? JE DMPDK3 < EN T1600 ET EN SOLAR, < ON A QUANTA(DK3)=1 CPI "2" < DK2 ? IF ORDI-"T",XWOR%1,,XWOR%1 JNE DMPDKH < T1600 REPONSE NON RECONNUE XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 JE DMPDKK CPI "1" JE DMPDKK < VERS LE QUANTA POUR DK1... CPI "A" < SOLARD DKA (FIXE) ? JE DMPDK3 CPI "B" JNE DMPDKH < SOLAR REPONSE NON RECONNUE JMP DMPDKJ < QUANTA=3 OBLIGATOIRE... DMPDK0: EQU $ XWOR%1: VAL 0 < < DK2 (T1600-SOLAR) OU DKB-DK1 (SOLAR) : QUANTA=F(ORDINATEUR) : < IF ORDI-"S",XWOR%1,,XWOR%1 < < ON DONNE LE CHOIX DU QUANTA SUR DK1 ET DK2 SOLAR : < DMPDKK: EQU $ PSR A < OUI, SAUVER LA REPONSE... DMPDKE: EQU $ LB DMRDK < DEMANDE DE READ DK LAI MQDK2-M < DEMANDE DU QUANTA BSR AQREP < QUESTION ET REPONSE CPI QUANTA='FA00('00FF < C'EST LE Q UTILISE ? JE DMPDKF < OUI CPI "1" < QUANTA 1 ? JNE DMPDKE < REPONSE NON RECONNUE SBT 16+12 < QUANTA 1 : IL FAUT POSITIONNER < LE BIT 12 DE LA DEMANDE. DMPDKF: EQU $ STB DMRDK < PREMIER MOT DE LA DEMANDE PLR A < RESTAURATION REPONSE (DK I) TBT 16+12 JC DMPDK3 < PUISQU'ON A UN QUANTA 1. DMPDKJ: EQU $ LRM B < SOLAR ET QUANTA = 3 WORD QUANTA*128*2 JMP DMPDK4 XWOR%1: VAL 0 DMPDK3: EQU $ < < QUANTA=1 (T1600 DK2-DK3 ; SOLAR DK3-DKA) < LBI 128 ADR B,B DMPDK4: EQU $ STB DMRDK+2 < LONGUEUR OCTETS DEMANDE DK IF ORDI-"S",XWOR%1,,XWOR%1 LBI NSPDKA < POUR CALCUL DU NSPDKX CPI "A" JL DMPDK1 < DK2 OU DK3 DEMANDE JE $+2 < B=NSPDKA ADRI -1,B < B=NSPDKB LR B,A ADRI +'30-NSPDK1+1,A DMPDK1: EQU $ XWOR%1: VAL 0 ADRI -'30+NSPDK1-1,A < NSPDKI SWBR A,B LBY DMASDK+1 SLLD 8 STA DMASDK+1 IF ORDI-"S",XWOR%1,,XWOR%1 LA DMASDK+1 ANDI 'FF CPI NSPDK1 < EST-CE DK1 (DKU, ASSIGNATION IMPLICITE). JNE DMPDKR < DK1 (DKU), ON UTILISERA UNE ASSIGNAION IMPLICITE, CE QUI EVITERA DES < PROBLEMES D'HABILITATION ET DE PROTECTION. LAI '8A STBY DMRDK JMP DMPDK5 DMPDKR: EQU $ XWOR%1: VAL 0 LAD DMASDK < CONNEXION UL 3 <--> NSPDKI SVC 0 JE DMPDK5 LAI MIMP-M < CONNEXION IMPOSSIBLE BSR AENVOI < ON PREVIENT IF ORDI-"T",XWOR%1,,XWOR%1 JMP DMPDK < ET ON BOUCLE XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 JMP DMPDKQ < ET ON BOUCLE. XWOR%1: VAL 0 < < PROPOSITION ADRESSE SECTEUR < DMPDK5: EQU $ LAI MAS-M BSR AENVOI < ENVOI DEMANDE LAD DMASNS < DEMANDE ADRESSE SVC 0 LA DMASNS+1 < A=ADRESSE OCTET ADRESSE SECTEUR BSR ACONVH < CONVERSION DANS A JNE DMPDK5 < ADRESSE INCORRECTE STA DMRDK+3 < STORE ADRESSE SECTEUR DANS LA DEMANDE < < PROPOSITION NOMBRE DE SECTEURS < DMPDK6: EQU $ LAI MNS-M BSR AENVOI < ENVOI DEMANDE LAD DMASNS < DEMANDE NOMBRE DE SECTEURS SVC 0 LA DMASNS+1 < A=ADRESSE OCTET COMPTE DE SECTEURS BSR ACONVH < CONVERSION JNE DMPDK6 < NOMBRE INCORRECT JAE DMPDK6 < NOMBRE INACCEPTABLE SARD 16 DV PASSEC < ON TIENT COMPTE DU PAS... STA NBSECT < STORE NOMBRE DE SECTEURS < < ASSIGNATION EVENTUELLE DE L'UL 'B < CPZ IPRDM < PREMIER DUMP ? JNE DMPDK7 < NON IC IPRDM < OUI, BASCULEMENT BSR AULB < ET ASSIGNATION DE L'UL 'B < ET TOUT CE QUI S'EN SUIT < (IMPLANTATIONS ETC..) DMPDK7: EQU $ < < DUMP DISQUE PROPREMENT DIT < LAI '1B < CTRL-SHIFT-K WORD '1EA5 < REMPLACE ALT-MODE LA DMRDK+2 < TAILLE OCTET BUFFER DISQUE STA BOX < POUR LE S/P GESTM BSR AGESTM < AJUSTEMENT MEMOIRE < IF ORDI-"S",XWOR%1,,XWOR%1 < EN SOLAR, IL FAUT ICI, SI ET SEULEMENT SI ON FAIT UN DUMP < SUR DKU EN MODE MULTIPLE, FAIRE LE DUMP DE LA DATE ET DE L'ACN < AVANT DE FAIRE CELUI DE L'ESPACE DISQUE. < CPZ STDKU JE DMPDKL BSR ADMPDA < DUMP DATE ET ACN. JMP DMPDKP DMPDKL: EQU $ < < DE PLUS, EN SOLAR, ON REGARDE SI L'ACN DE DUMP A CHANGE, < ET SI OUI, ON FAIT UN DUMP DE DATE ET ACN. < CPZ INACN < "NOUVEL" ACN ? JE DMPDKP STZ INACN < RAZ INDICATEUR. BSR ADMPDA < ET DUMP DATE, ACN. DMPDKP: EQU $ XWOR%1: VAL 0 < LAI 'DD BSR AW1PG < WRITE DELIMITEUR DEBUT DISQUE LA DMRDK+2 < TAILLE OCTET BUFFER SLRS 1 < EN MOTS CPI 128 < EST-CE 128 MOTS/SECTEUR ? LAI 1 < OUI A PRIORI JE $+2 ADRI 2,A < QUANTA = 3 BSR AW1PG < WRITE QUANTA LA DMASDK+1 ANDI 'FF < A=NSPDKI BSR AW1PG < WRITE NSPDKI LAD DMRDK+3 < ADRESSE(ADRESSE(1ER SECTEUR)) SLLS 1 < ADRESSE OCTET LXI 2 < 2OCTETS BSR AWNPG < WRITE ADRESSE 1ER SECTEUR LAD NBSECT < ADRESSE(NOMBRE DE SECTEURS) SLLS 1 < ADRESSE OCTETS LXI 2 < 2 OCTETS BSR AWNPG < WRITE COMPTE DE SECTEURS < CPZ TYPDMP < DUMP IMPRIMANTE/OUTPUT ? JNE DMPDK8 LAD DMSPI < SAUTS DE LIGNES SVC 0 LAD DMIDK < IDENTIFICATION DISQUE SVC 0 DMPDK8: EQU $ LX NBSECT < NOMBRE DE SECTEURS DMPDK9: EQU $ PSR X < SAUVEGARDE COUNT LAD DMRDK < READ 1 SECTEUR SVC 0 JE $+2 ACTD < < RECHERCHE ??? < IF ORDI-"S",XWOR%1,,XWOR%1 CPZ IRECHE < UNE RECHERCHE EST-ELLE DEMANDEE ??? JE DMQDKJ < NON... LA DMRDK+1 < OUI, SLRS 1 SBT 0 STA ABUFDK < GENERATION D'UN REALI D'ACCES AU BUFFER < DISQUE COURANT... LXI -1 < (X)=INDEX D'EXPLORATION DU BUFFER... DMQDKL: EQU $ LYI 0 < (Y)=INDEX D'EXPLORATION DE LA CHAINE... DMQDKM: EQU $ ADRI 1,X < INDEX DU CARACTERE SUIVANT DANS LE BUFFER LR X,A CP DMRDK+2 < EST-ON AU BOUT DU BUFFER ??? JGE DMQDKN < OUI, ON IGNORE LE SECTEUR COURANT, CAR < LA CHANE CHERCHEE N'Y FIGURE PAS... XR X,Y LBY &ARECHE < (A)=CARACTERE COURANT CHERCHEE, XR X,Y CPI '04 < FIN DE CHAINE ??? JE DMQDKJ < OUI, ON EDITE LE SECTEUR COURANT... CPI '0D < FIN DE CHAINE ??? JE DMQDKJ < OUI, ON EDITE LE SECTEUR COURANT... LR A,B < (B)=CARACTERE CHERCHE, LBY &ABUFDK AND MASKRE < (A)=CARACTERE COURANT DU BUFFER (AVEC OU < SANS PARITE, SUIVANT ASCI/HEXA...). CPR A,B < ALORS, COINCIDENCE ??? JE DMQDKO < OUI, AU SUIVANT... CPZR Y < NON, EST-CE LE PREMIER DE LA CHAINE ??? JE DMQDKL < OUI... ADRI -1,X < NON, AFIN DE RETESTER LE CARACTERE < COURANT AVEC LE DEBUT DE CHAINE... JMP DMQDKL DMQDKO: EQU $ ADRI 1,Y < AU SUIVANT DANS LA CHAINE... LR Y,A CPI LRECHE < SI EXISTE... JL DMQDKM < ET OUI... DMQDKJ: EQU $ < EDITION DE CE SECTEUR COURANT... XWOR%1: VAL 0 CPZ IDEBUG < DEBUG DEMANDE ? JE DMPDKI < NON. < < DEBUG DEMANDE : ON VA SORTIR SUR L'UL 2 L'ADRESSE DU SECTEUR < EN COURS ET L'ADRESSE DU BUFFER QUI LE CONTIENT, PUIS < REVENIR AU CCI POUR QUE L'UTILISATEUR FASSE SON DEBUG. < LY DMDBG+1 < ADRESSE OCTET A LAQUELLE DOIT ADRI MDBGAS-MDBG*2,Y < ETRE PLACEE L'ADRESSE SECTEUR < EN CLAIR (C-A-D EN ASCI !) LA DMRDK+3 < ADRESSE SECTEUR COURANT BSR ACONVA < CONVERSION EN ASCI ADRI MDBGAB-MDBGAS*2,Y < ADRESSE OCTET A LAQUELLE DOIT < ETRE PLACEE L'ADR BUFFER DK EN CLAIR LA DMRDK+1 SLRS 1 < ADRESSE MOT DU BUFFER DK BSR ACONVA < CONVERSION EN ASCI LAD DMDBG < MESSAGE DE DEBUG SVC 0 LAD DMCCI < RETOUR CCI SVC 0 DMPDKI: EQU $ CPZ TYPDMP < DUMP IMPRIMANTE/OUTPUT ? JNE DMPDKA LAD DMSPI < ESPACEMENTS SVC 0 SVC 0 LA DMRDK+3 < ADRESSE SECTEUR LY DMIAS+1 < ADRESSE OCTET EDITION ADRESSE SECTEUR BSR ACONVA < QUI PLACE L'ADRESSE SECTEUR EN ASCI. LAD DMIAS < EDITION ADRESSE SECTEUR SVC 0 LY DMRDK+1 < ADRESSE OCTET BUFFER A EDITER LX DMRDK+2 < LONGUEUR OCTETS BSR AEDI < EDITION BUFFER < DMPDKA: EQU $ LA DMRDK+1 < ADRESSE OCTET BUFFER LX DMRDK+2 < NOMBRE D'OCTETS BSR AWNPG < WRITE BUFFER EN PAGE VIRTUELLE < DMQDKN: EQU $ LA DMRDK+3 < ADRESSE SECTEUR SUIVANT AD PASSEC STA DMRDK+3 PLR X < RECUPERATION COUNT JDX DMPDK9 < LAI 'FD < DELIMITEUR FIN DE DISQUE BSR AW1PG < WRITE DELIMITEUR FIN DE DISQUE IF ORDI-"S",XWOR%1,,XWOR%1 CPZ STDKU < SI L'ON EST EN DUMP DKU, MODE MULTIPLE JE DMPDKN BSR ASP1 < ON FAIT SEMBLANT D'AVOIR TERMINE BSR ASP2 < LE DUMP ET ON EN RECOMMENCE STZ IPRW1P < UN NOUVEAU. STZ IPRWPG DMPDKN: EQU $ XWOR%1: VAL 0 < < DECONNEXION UL 3 <--> NSPDKI < LBY DMASDK+1 STZ DMASDK+1 STBY DMASDK+1 LAD DMASDK SVC 0 < LAI '7D < ALT-MODE WORD '1EA5 < EST RESTAURE < IF ORDI-"S",XWOR%1,,XWOR%1 PLR W XWOR%1: VAL 0 RSR PAGE CONVH: EQU $ < < CONVERSION EN BINAIRE D'UN NOMBRE HEXADECIMAL SAISI < EN ASCI (PAR EXEMPLE, NUMERO DE SECTEUR) < < ARGUMENTS: < 'A' = ADRESSE OCTET DES 4 CARACTERES ASCI < < RESULTAT: < 'A' = NOMBRE EN BINAIRE, A VALIDER EN FAISANT AU RETOUR: < JE OK OU < JNE ERREUR < PSR B,X,Y,W < SAUVEGARDES LR A,Y < Y = ADRESSE CARACTERE EN COURS LXI 4 < INIT COUNT CONVH1: EQU $ LR X,W < SAUVEGARDE COUNT LR Y,X < INDEX CARACTERE LBY &AXTRAV < CARACTERE CPI "0" JL CONVH3 < ERREUR CPI "9" JLE CONVH2 CPI "A" JL CONVH3 < ERREUR CPI "F" JG CONVH3 < ERREUR ADRI -7,A CONVH2: EQU $ ADRI -'30,A SLLS 12 SCLD 4 < CHIFFRE HEXA DANS 'B' ADRI 1,Y < CARACTERE SUIVANT LR W,X < RESTAURATION COUNT JDX CONVH1 < AU SUIVANT < SLLD 16 < CONVERSION OK JMP CONVH9 < CONVH3: EQU $ LBI 1 < ERREUR CONVH9: EQU $ CPZR B < POUR TEST AU RETOUR. PLR B,X,Y,W < RESTAURATIONS RSR PAGE DESAS: EQU $ < < D E S A S S I G N A T I O N D ' U N E U L < < ARGUMENT: < 'A' (BITS 8-15) = NUMERO D'UL EN ASCI < STBY ASSUL < STORE NUMERO UL LA ASS3 STA ASS1 LAD DMASS SVC 0 RSR PAGE CONVA: EQU $ < < S/P DE CONVERSION D'UN MOT EN ASCI < < ARGUMENT: < A = MOT A TRADUIRE < Y = ADRESSE OCTET DE RANGEMENT DU RESULTAT < PSR A,B,X,Y < SAUVEGARDES < ADRI 3,Y < ADRESSE OCTET DERNIER CHIFFRE PSR A LXI 4 < INIT COUNT CONVA1: EQU $ PLR A SLRD 4 PSR A SLLD 4 ANDI 'F < RECUPERATION CHIFFRE HEXA CPI '9 JLE $+2 ADRI 7,A ADRI '30,A < CARACTERE ASCI PSR X < SVG COUNT LR Y,X < INDEX CHIFFRE EN COURS STBY &AXTRAV ADRI -1,Y < INDEX CHIFFRE SUIVANT PLR X < RECUPERATION COUNT JDX CONVA1 < PLR A < A NE PAS OUBLIER ! PLR A,B,X,Y < RESTAURATIONS RSR PAGE RTCCI: EQU $ < < R E T O U R A U C C I A P R E S D E S A S S I G N T I O N < < D E S U N I T E S L O G I Q U E S 3 E T ' B < LAI "B" BSR ADESAS LAI "3" BSR ADESAS LB DMWDKU+3 < (B)=ADRESSE DE FIN DE DUMP, AFIN DE < POUVOIR LA CONNAITRE FACILEMENT < SOUS 'DEBUG'... LAD DMCCI SVC 0 < F I N D E D U M P ... < (B)=ADRESSE DE FIN, SI DUMP 'DKU'... BR ADEB2 PAGE QREP: EQU $ < < E N V O I Q U E S T I O N E T D E M A N D E R E P O N S E < < LA REPONSE EST DE 1 CARACTERE (PAR EXEMPLE < OUI/NON). < < ARGUMENT: < 'A' = ARGUMENT D'APPEL DU S/P ENVOI POUR < POSER UNE QUESTION. < < RESULTAT: < 'A' ( 8-15 ) = REPONSE. < PSR X < SAUVEGARDE. BSR AENVOI < ENVOI QUESTION LAD DMREP < DEMANDE REPONSE SVC 0 LBY REP < CHARGEMENT REPONSE DANS 'A'. PLR X < RESTAURATION. RSR PAGE CHOIX: EQU $ < < C H O I X D ' U N E O P T I O N E N M O D E < < N O N S T A N D A R D. < < IL S'AGIT DU CHOIX D'UNE OPTION TELLE QUE: < -OUI A PRIORI SI L'ON TRAVAILLE EN MODE STANDARD. < -OUI OU NON SELON LE VOEU DE L'UTILISATEUR < SI L'ON TRAVAILLE EN MODE NON STANDARD. < -NON A PRIORI SI L'ON EST EN DUMP SUR IMPRIMANTE < OU VISU. < < ARGUMENT: 'A' = ARGUMENT D'PPEL AU S/P QREP (MESSAGE DE < PROPOSITION). < < RESULTAT: 'A' = 0 OPTION ACTIVE ("OUI") < 'A' = 1 OPTION INACTIVE ("NON"). < PSR B LR A,B < SAUVER L'ARGUMENT. CPZ TYPDMP JE CHOIX1 < NON A PRIORI POUR IMPRIMANTE/VISU. CPZ ISTAND JE CHOIX0 < OUI A PRIORI SI MODE STANDARD. < < CHOIX DE L'UTILISATEUR. < CHOIX2: EQU $ LR B,A < RECUPERATION DE L'ARGUMENT. BSR AQREP < ENVOI QUESTION ET DEMANDE REPONSE. CPI "O" JE CHOIX0 < OUI. CPI "N" JNE CHOIX2 CHOIX1: EQU $ < NON. LAI 1 JMP CHOIXF CHOIX0: EQU $ < OUI. LAI 0 CHOIXF: EQU $ PLR B RSR RSR < CHXX: EQU $ < < C H O I X D ' U N E O P T I O N < < (CF: S/P 'CHOIX' A QUELQUES VARIANTES PRES). < PSR B LR A,B < SAUVER L'ARGUMENT. CPZ ISTAND JE CHOIX1 < SI MODE STANDARD, NON A PRIORI. JMP CHOIX2 < MODE NON-STANDARD : PROPOSITION. PAGE ENVOI: EQU $ < < E N V O I D ' U N M E S S A G E S T A N D A R D < < S U R L ' O R G A N E D E S O R T I E ( U L 2 ) < < EN ENTREE < < A=DEPLACEMENT MOTS DU MESSAGE A ENVOYER PAR RAPPORT < A M. TOUT MESSAGE EST DELIMITE PAR '00 < < < NOTA: ON A < EN TABLE: M: EQU $+256 < MES1: ASCI "TEXTE..." < WORD 0 < EN COMMON: AM: WORD M < APPEL PAR: LAI MESI-M < BSR AENVOI < PSR A,X AD AM < @ MOT MESSAGE ADR A,A < @ OCT MESSAGE STA DMOUT+1 STZ DMOUT+2 LR A,X ENV1: EQU $ < BOUCLE JUSQU'A DELIM '00 LBY &AXTRAV JAE ENV2 IC DMOUT+2 < LONGUEUR='+1 ADRI 1,X JMP ENV1 ENV2: EQU $ LAD DMOUT SVC 0 PLR A,X RSR PAGE GOSGN: EQU $ < < A C C E S A U S G N : < < < ARGUMENT : < A=NVP D'ACCES AU SGN. < < < RESULTAT : < A=CONDITIONS DE RETOUR DU SGN , < INDICATEURS POSITIONNES SUR ERREUR. < < CPZR X < RACINE DE LONGUEUR NEGATIVE ? JGE GOSGN1 LXI 0 < IL FAUT METTRE RACINE VIDE (CAS DES < SUPPRESSIONS TOTALES). PSR A LAI '04 < EOT. STBY &AXRAC PLR A GOSGN1: EQU $ PSR X < SAVE X COURANT. STBY SCATAL < MISE EN PLACE DU NVP D'ACCES. LR X,A ADRI 1,A STA SCATAL+2 < MISE EN PLACE DE LA LONGUEU < COURANTE. LAD SCATAL SVC 0 < APPEL DU SGN. LR X,A < A=CONDITIONS DE RETOUR. PLR X < RESTAURE X COURANT. RSR PAGE GESTM: EQU $ < < G E S T I O N M E M O I R E ( A J U S T E M E N T ) < < < GESTION MEMOIRE: SE S/P EST APPELE A CHAQUE FOIS QU'ON < S'APPRETE A FAIRE UN DUMP FICHIER OU ITEM. < CE S/P AJUSTE L'ESPACE MEMOIRE: IL FAUT EN EFFET QUE < ADR OCT(NOM+VALEUR)+ BOX TIENNE DANS L'ESPACE MEMOIRE < SANS QUE CELUI-CI SOIT SURDIMENSIONNE. < < NOTA: QUAND IL S'AGIT D'UN FICHIER, LE BUFFER FICHIER A < DUMPER EST EN RECOUVREMENT AVEC LA ZONE LT CELLE-CI ETANT < D'ADRESSE: ADRESSE(NOM-VALEUR) - 1 --> DONC LE BUFFER < FICHIER EST EN RECOUVREMENT AVEC LA ZONE NOM+VALEUR SUR < 127 MOTS;DANS LE S/P TSTFI ON A MIS DANS "BOX" LE NOMBRE < 127*2 < NOTA2:QUAND IL S'AGIT D'UN ITEM, ON A DANS "BOX" LA BOX < OBTENUE PAR '1E35 < LA BOX < BOX, RBT IVALEX < A PRIORI... AD DMLON+1 < +ADR OCT NOM+VAL... ADRI LNOM+'10*2+1,A < LNOM+'1O MOTS NON ATTEIGNABLES SLRS 12 ADRI 1,A SLLS 12 < A=ESPACE NECESSAIRE CP ESPACE < ESPACE ACTUEL CORRECT? JE GESTMF STA ESPACE LAD DMGETM < NON,DEMANDE D'ALLOCATION SVC 0 JE $+2 ACTD GESTMF: EQU $ RSR PAGE W1PG: EQU $ < < W R I T E 1 C A R A C T E R E S U R P A G E V I R T U E L L E < < A V E C C O M P A C T A G E S Y S T E M A T I Q U E < PSR B,X,Y,W < SAUVEGARDES. PSR A < CARACTERE A STOCKER CPZ IPRW1P < PREMIER APPEL? JNE W1PG0 < OUI IC IPRW1P < BASCULEMENT INDIC LAI -1 STA CCMP < INIT COMPT COMPACTAGE BIT 0=1 < SIGNIFIE 1ER APPEL PAGE EN COURS LA AOPAG STA PPG < INIT POINTEUR DE PAGE W1PG0: EQU $ LA CCMP LR A,W < COMPTEUR COMPACTAGE LY PPG < POINTEUR DE PAGE TBT 0 < 1ER APPEL DANS LA PAGE? JNC W1PG1 < < OUI, ALORS RAZ PAGE , ET < REINITIALISATION COMPACTAGE. LA AOFPAG < ADRESSE OCTET FIN DE PAGE. SB AOPAG < A = LONGUEUR OCTET PAGE LR A,X < NOMBRE D'OCTETS PAGE VIRTUELLE. LAI 0 < POUR REINIT A 0. < ON SAIT QU'ICI, PPG = AOPAG. W1PG01: EQU $ PSR X < SAUVEGARDE COUNT LX PPG < ADRESSE OCTET COURANTE. STBY &AXTRAV < RAZ OCTET. IC PPG < AU SUIVANT PLR X < RECUPERATION COUNT. JDX W1PG01 < ET ON BOUCLE... LA AOPAG < REINITIALISATION DU POINTEUR STA PPG < DE PAGE...PAR PRECAUTION. STY PCMP < POINTEUR COMPACTAGE SBR W,W < COUNT COMPACT ADRI 1,Y < PPG+1 BSR ASTC < STORE CAR JMP W1PGF < W1PG1: EQU $ LR Y,A CP AOCRIT < ADR CRITIQUE ATTEINTE? JL W1PG2 < OUI,FORCER LE COMPACTAGE LR W,A LX PCMP STBY &AXTRAV < STORE CCMP SBR W,W < RAZ CCMP PSR W < POUR STC BSR ASTC < STORE CCMP BSR ASTC < STORE CARACTERE EN COURS < ON EST SUR QUE L'ON SORT DE LA < PAGE EN COURS PAR L'UN DES 2 < DERNIERS STC CI-DESSUS==>CCMP(0) < SERA MIS A 1 JMP W1PGF < W1PG2: EQU $ < ADR CRITIQUE NON ENCORE ATTEINTE LR W,A ANDI '7F CPI '7F < CCMP A ATTEINT '7F(128 CA) JE W1RUPT < OUI, RUPTURE DE COMPACTAGE < NON,TEST EGALITE CAR EN COURS# < CAR-1 ETC... LR Y,X ADRI -1,X LBY &AXTRAV < CAR PRECEDENT(CAR-1) PLR B < CAR EN COURS PSR B CPZ ICOMPA < FAUT-IL COMPACTER ??? JNE W1PG3 < NON (UTILE POUR LES DUMPS DE CMS5...). CPR A,B < EGALITE? JNE W1PG3 < OUI LR W,A TBT 8 < COUNT DE CAR REPETITIFS? JNC W1PG4 < OUI, IL SUFFIT D'INCREMENTER CCMP ADRI 1,W PLR A < DEPILER LE CAR INUTILE JMP W1PGF < W1PG4: EQU $ < CE N'EST PAS UN CONT DE CAR REPETI < TIFS (C'EST DONC UN COUNT DE CAR #) JALE W1PG5 < COUNT NON>0 DONC 1 SEUL < CAR DEJA STOCKE ON NE CHERCHE PAS < ENCORE A COMPACTER(ON NE COMPACTE < QU'A PARTIR DE 3 CAR IDENTIQ) < ADRI -1,X < COUNT>O DONC AU MOINS 2 CAR < DEJA STOCKES ON TENTE CMPTAGE LBY &AXTRAV < CAR-2 CPR A,B < EGALITE? JNE W1PG5 < OUI, INTRODUIRE UN COUNT DE COMPACTAGE < REPETITIF LR W,A CPI 1 < SEULEMENT 2 CAR DEJA STOCKES? JG W1PG60 < OUI,FAIRE PPG='-1 ADRI -1,Y JMP W1PG6 W1PG60: EQU $ < NON,IL FAUT FAIRE: ADRI -2,W < CCMP='-2 LR W,A LX PCMP STBY &AXTRAV < STORE CCMP PRECEDENT LR Y,A ADRI -2,A STA PCMP < NOUVEAU POINT DE COMPACT W1PG6: EQU $ < ET MAINTENANT IL SUFFIT DE < DE ... LAI '82 LR A,W < ..REINITIALISER CCMP PLR A < ..DEPILER LE CAR EN COURS(INUTILE) JMP W1PGF < W1PG3: EQU $ < PAS D'EGALITE AVEC CAR-1 LR W,A TBT 8 < CCMP REPETITIF? JNC W1PG5 < OUI,RUPTURE DE COUNT W1RUPT: EQU $ < RUPTURE DE COUNT LX PCMP LR W,A STBY &AXTRAV < STORE CCMP PRECEDENT SBR W,W < RAZ CCMP STY PCMP < POINTEUR DE CMP RECOIT PPG ADRI 1,Y BSR ASTC < STORE CAR EN COURS JMP W1PGF < W1PG5: EQU $ < PAS DE COMPACTAGE ET PAS DE < RUPTURE ADRI 1,W < CCMP='+1 BSR ASTC < STORE CAR EN COURS < < W1PGF: EQU $ < FIN STY PPG < POINTEUR DE PAGE LR W,A STA CCMP < COMPTEUR COMPACTAGE PLR B,X,Y,W < RESTAURATIONS. RSR PAGE STC: EQU $ < < S T O R E 1 O C T E T E N P A G E V I R T U E L L E < < I L S ' A G I T D ' U N ' C O U N T ' O U D ' U N < < C A R A C T E R E < < CE S/P QUI SE VEUT RAPIDE: < -DEPILE LE CAR A STOCKER < -LE STOCKE EN (Y) < -INCREMENTE (Y) ET REGARDE SI ON DEPASSE DE LA PAGE < VIRTUELLE,AUQUEL CAS: < -IL ECRIT LA PAGE ET REINITIALISE PPG, < Y,ET W(=CCMP) < PLR A,X PSR X LR Y,X STBY &AXTRAV < STORE CAR ADRI 1,Y < PPG='+1 LX AOFPAG CPR X,Y < ON DEPASSE? JL STCF < OUI STY PPG < MAJ PPG(POUR EDPG!) BSR AWPG < WRITE PAGE VIRTUELLE LY PPG LAI -1 LR A,W < CCMP BIT 0=1 CE QUI < SIGNIFIE 1ER APPEL PAGE EN COURS < (POUR W1PG) STCF: EQU $ RSR PAGE WNPG: EQU $ < < W R I T E N C A R A C T E R E S E N P A G E V I R T U E L L E < < EN ENTREE A=ADRESSE OCTET 1ER CARACTERE < X=NOMBRE DE CARACTERES A ECRIRE < < NOTA ON UTILISE LE S/P W1PG < PSR A,X,Y XR A,X RBT IVALEX < A PRIORI, AU CAS OU IL S'AGIRAIT D'UN < ITEM D'EXTENSION SUR VOLUME... XR A,X LR A,Y WNPG1: EQU $ PSR X < SVG COUNT LR Y,X LBY &AXTRAV < CHARGEMENT CARACTERE BSR AW1PG < WRITE CARACTERE ADRI 1,Y < AU SUIVANT PLR X < RECUP COUNT JDX WNPG1 < PLR A,X,Y RSR PAGE WPG: EQU $ < < W R I T E U N E P A G E V I R T U E L L E < PSR A,X CPZ IPRWPG < PREMIER/DERNIER/N EME APPEL? JL WPGD < DERNIER JG WPGN < N EME < PREMIER APPEL IC IPRWPG < BASCULEMENT < LA TYPDMP < INITIALISATIONS EN FONCTION < DU TYPE DE DUMP JAL WPG0P < PUNCH JAE WPGN < IMPRIMANTE / OUTPUT CPI 1 JE WPG0F < FICHIER IF ORDI-"S",XWOR%1,,XWOR%1 CPI 2 JNE WPGN < DKU OU MEM. COMMUNE. XWOR%1: VAL 0 < INIT SPECIFIQUES A VISU IF DIALOG,XWOR%1,XWOR%1, LRM A WORD '8B02 < ON DEMANDE TIME OUT = 2 WORD '1EA5 < SUR VISU RECEPTRICE LAI 1 STA DMTMPO+2 < TEMPORISATION 1 SECONDE (AVANT < L'ENVOI D'UN BUFFER) XWOR%1: VAL 0 JMP WPGN WPG0P: EQU $ < INITIALISATIONS SPCIFIQUES AU PUNCH < RAZ BUFFER PUNCH LXI NBCOL LAI 0 WPGP1: EQU $ STA &AXBPM1 JDX WPGP1 STZ NBM11 < NOMBRE MODULO 11 STZ NBMNP < NO CARTE MOD NBPAUS STZ NUMC < NUMERO CARTE EN COURS LA ABP STA PBP < POINTEUR BUFFER PUNCH LAI NBPAUS < NOMBRE DE PAUSE STANDARD A PRIORI. WPG11: EQU $ CPZ ISTAND < MODE STANDARD ? JE WPG12 LAI MNBPAU-M < PROPOSITION TAILLE PAQUET. BSR AENVOI LAD DMNBPA < DEMANDE REPONSE SVC 0 LA DMNBPA+1 < ADRESSE OCTET REPONSE BSR ACONVH < CONVERSION HEXA. JNE WPG11 < REPONSE INCORRECTE. JALE WPG11 < REPONSE INACCEPTABLE. WPG12: EQU $ STA NPAUSE < NOMBRE DE CARTES ENTRE CHAQUE PAUSE. STZ IPCH < PUNCH ACTIF A PRIORI LAI MCART-M < DEMANDE UTILISATEUR BSR AQREP < AU RETOUR LA REPONSE EST DANS 'A'. CPI "S" < ...=SUPPRIMER? JNE $+2 IC IPCH < OUI, PUNCH INACTIF JMP WPGN < WPG0F: EQU $ < INITIALISATIONS SPECIFIQUES A FICHIER LAD DMOPNK < OPEN NEW KEY SVC 0 JE WPGN ACTD WPGN: EQU $ < N EME APPEL BSR AEDPG < EDIT PAGE SUR SUPPORT EXTERNE JMP WPGF WPGD: EQU $ < DERNIER APPEL LA PPG CP AOPAG < EDITION NECESSAIRE? JE WPGD1 < OUI, EDITER LE RESTE BSR AEDPG WPGD1: EQU $ < OPERATIONS DE FIN LIEES < AUX SUPPORTS EXTERNES LA TYPDMP < TYPE DUMP? JAL WPGD2 < PUNCH CPI 1 < FICHIER? JE WPGDH < OUI, FIC H IER IF ORDI-"S",XWOR%1,,XWOR%1 CPI 3 JE WPGDD < DKU XWOR%1: VAL 0 JMP WPGDF WPGD2: EQU $ < PUNCH BSR APCARD < VIDAGE CARTE EN COURS < PUNCHER UNE CARTE "FIN" LAI '70 STA &ABP BSR APCARD JMP WPGDF WPGDH: EQU $ < FIC H IER LAD DMCLSK < CLOSE KEY SVC 0 JE $+2 ACTD WPGDF: EQU $ IF ORDI-"S",XWOR%1,,XWOR%1 JMP WPGF WPGDD: EQU $ < DKU LA DMWDKU+3 < EDITION DU DERNIER BLOC UTILISE LY ADRBL BSR ACONVA LAI MDRBL-M BSR AENVOI XWOR%1: VAL 0 WPGF: EQU $ < FIN WPG LA AOPAG STA PPG < REINIT POINTEUR PAGE PLR A,X RSR PAGE EDPG: EQU $ < < W R I T E P R O P R E M E N T D I T D ' U N E P A G E < < V I R T U E L L E S U R S U P P O R T E X T E R N E < < ( O U " E D I T I O N " P A G E ) < PSR A,B,X,Y < SAUVEGARDES LA TYPDMP < TYPE DUMP? IF ORDI-"S",XWOR%1,,XWOR%1 CPI 4 JE EDPGM < MEMOIRE COMMUNE. XWOR%1: VAL 0 JAL EDPGP < PERFORATEUR ADRI -1,A JAE EDPGH < FIC H IER IF ORDI-"T",XWOR%1,,XWOR%1 JAG EDPGV < LIGNE VISU XWOR%1: VAL 0 IF ORDI-"S",XWOR%1,,XWOR%1 ADRI -1,A JAE EDPGV < LIGNE VISU JAG EDPGD < DKU XWOR%1: VAL 0 JMP EDPGF EDPGP: EQU $ < PERFORATEUR LA PPG SB AOPAG < LONGUEUR A EDITER LR A,X LA AOPAG STA PPG < INIT POINTEUR PAGE EDPG1: EQU $ PSR X < SVG COUNT LX PPG LBY &AXTRAV < CAR EN COURS BSR APC1 < PUNCH 1 CARACTERE IC PPG < AU SUIVANT PLR X < RECUP COUNT JDX EDPG1 JMP EDPGF EDPGH: EQU $ < FIC H IER LAD DMWBLC < WRITE BLOC SVC 0 JE $+2 ACTD JMP EDPGF EDPGV: EQU $ < LIGNE VISU LA PBFI < POUR ECHANGER 'PBFI' ET LX PBV < 'PBV' CAR LE S/P 'EDC' XR A,X < UTILISE 'PBFI' ! STA PBFI STX PBV LA AOPAG STA PPG < REINITIALISATION POINTEUR DE < PAGE SUR DEBUT DE PAGE < XWOR%1: VAL LPAV*2*2 < NOMBRE DE 'DIGITS' DANS 1 PAGE XWOR%2: VAL LBV*2 < NOMBRE DE 'BYTES' DANS LE BUFFER < VISU LXI XWOR%1/XWOR%2 < INIT BOUCLE SUR N ECHANGES VISU < EDPG2: EQU $ LA AOBV STA PBFI < INIT 'PBFI' (CF. CI-DESSUS) PSR X LXI LBV < INIT BOUCLE SUR LE BUFFER VISU < (FORMATAGE BINAIRE-->ASCI) EDPG3: EQU $ PSR X LX PPG < POINTEUR DE PAGE LBY &AXTRAV < LOAD 1 OCTET BSR AEDC < 'EDITION' DE 2 CAR ASCI DANS 'BV' IC PPG < OCTET SUIVANT PLR X JDX EDPG3 IF DIALOG,XWOR%1,XWOR%1, LAD DMTMPO < TEMPO DE 1 SECONDE AVANT ENVOI BUFFER SVC 0 XWOR%1: VAL 0 IF DIALOG,,,XWOR%1 LXI 4 LAI MTMPO-M < MESSAGE DE TEMPO BSR AENVOI JDX $-1 XWOR%1: VAL 0 LAD DMLVI < DEMANDE ECRITURE SUR LIGNE VISU SVC 0 IF DIALOG,,,XWOR%1 EDPGC: EQU $ LAD DMRACK < LECTURE 'ACK' OU 'SYNCHRO' SVC 0 LBY REP < CARACTERE RECU... RBT 8 CPI ACK < EST-CE 'ACK' ? JE EDPGB < OUI, ALLONS ENVOYER LE BUFFER SUIVANT. CPI SYNC < EST-CE UNE RESYNCHRONISATION ? JE $+2 < OUI ACTD LAD DMLVI < ALORS, IL FAUT RENVOYER LE DERNIER BUFFER SVC 0 JMP EDPGC < VERS NOUVELLE ATTENTE 'ACK'. EDPGB: EQU $ XWOR%1: VAL 0 IF DIALOG,XWOR%1,XWOR%1, LAD DMRACK < ON ATTEND 1 CARACTERE AVANT SVC 0 < D'ENVOYER LE BUFFER SUIVANT LBY REP < UN 'ACK' EN L'OCCURRENCE RBT 8 CPI ACK < 'ACK' ? JE EDPG8 CPI '7D < TIME OUT ? JNE EDPG9 < TIME OUT, DONC IL FAUT REFAIRE < L'ENVOI DU DERNIER BUFFER ! LA PPG < POINTEUR DE PAGE ADRI -LBUFV,A < ON LE REMET A JOUR... STA PPG < POUR DEBLOQUER LA VISU RECEPTRICE < AVANT DE LUI RENVOYER LE DERNIER BUFFER, < LE MIEUX EST DE LUI ENVOYER UN < BUFFER PLEIN COMME UN OEUF DE CARACTERES < 'SYNC'; AINSI, LA VISU RECEPTRICE < (QUI EST VRAISSEMBLABLEMENT EN LECTURE) < COMPRENDRA CE QUI LUI ARRIVE... LY AOBV < INDEX BUFFER VISU LXI LBV*2 < COUNT OCTET BUFFER VISU LAI SYNC+'80 < CARACTERE DE SYNCHRO EDPGA: EQU $ XR X,Y < RECUP INDEX ET SVG COUNT STBY &AXTRAV < STORE 'SYNC' XR X,Y < RECUP COUNT ET INDEX ADRI 1,Y < CARACTERE SUIVANT JDX EDPGA LAD DMLVI < ON ENVOIE CE BUFFER... SVC 0 LAD DMTMPO < ET, CETTE FOIS ON TEMPORISE UN PEU SVC 0 < PLUS.... SVC 0 < ... JMP $+1 < REMPLACER EVENTUELLEMENT PAR UN < 'SVC 0' SUPPLEMENTAIRE PLR X < RECUPERATION DU COUNT DE BOUCLE JMP EDPG2 < ET ON REPART. EDPG9: EQU $ < "VRAIE" ERREUR DE SYNCHRO LAI MPBACK-M < CE N'EST PAS 'ACK', ON PREVIENT BSR AENVOI ACTD < ET ON TRAPPE. EDPG8: EQU $ XWOR%1: VAL 0 PLR X JDX EDPG2 < BUFFER SUIVANT < LA PBFI < ON RE-INVERSE LX PBV < LES POINTEURS 'PBV' ET 'PBFI' XR A,X < POUR LES RAISONS QUE L'ON SAIT STA PBFI STX PBV < JMP EDPGF EDPGF: EQU $ < FIN PLR A,B,X,Y < RESTAURATIONS RSR IF ORDI-"S",XWOR%1,,XWOR%1 EDPGM: EQU $ < MEMOIRE COMMUNE. < < L'ALGORITHME D'EMISSION D'UNE PAGE VIRTUELLE EN CDA EST LE SUIVANT: < - TEST VERROU COURANT 'NVC'. < - S'IL EST A 0, IL APPARTIENT A REST, DONC ATTENDRE. < - S'IL EST A 1, IL APPARTIENT A DUMP, DONC ON PEUT FAIRE UN WCDA < APRES QUOI ON LE FAIT PASSER A 0, ON INCREMENTE 'NVC' ETC... < BSR ATESTV < TEST VERROU COURANT 'NVC'. JNE EDPGM1 < VERROU = 1 : ALLONS-Y... < VERROU = 0 : ATTENDRE. LAI 2 < 2 SECONDES DE TEMPORISATION. STA DMTMPO+2 LAD DMTMPO < TEMPORISATION. SVC 0 JMP EDPGM < NOUVELLE TENTATIVE. EDPGM1: EQU $ < VERROU = 1 : ON PEUT FAIRE LE WCDA. LA AOPAG SLRS 1 PSR A < ADRESSE MOT PAGE VIRTUELLE. LA NVC < NUMERO VERROU COURANT. MP LMPM < * NB DE MOTS PAR PAGE. LR B,A AD NBV < + NB DE VERROUS (CAR LES VERROUS SONT < EN TETE DE LA ZONE CDA UTILISEE). AD ADCDA < + ADRESSE DEBUT ZONE CDA UTILISEE. < 'A' = ADRESSE CDA. PLR B < 'B' = ADRESSE PAGE VIRTUELLE. LX LMPM < 'X' = LONGUEUR. WCDA < DEVERROUILLER POUR REST. BSR ARSETV < INCREMENTER NUMERO DE VERROU COURANT 'NVC' MODULO 'NBV'. IC NVC LA NVC CP NBV JL $+2 STZ NVC JMP EDPGF < C'EST FINI. EDPGD: EQU $ < DKU < < PASSAGE AU BLOC SUIVANT < LA DMWDKU+3 < ADRESSE SECTEUR COURANTE. ADRI 1,A < VRAIE ADRESSE SECTEUR COURANTE. LR A,B EOR ADKUF JAL EDPGD2 < AS ET ASF SONT DE SIGNES DIFFERENTS, < DONC C'EST OK COMPTE TENU DES VALIDATIONS < INITIALES. < < ADRESSES AS ET ASF DE MEME SIGNE < LA ADKUF JAL EDPGD4 < < POSITIVES... < SBR B,A JAGE EDPGD2 < OK. JMP EDPGD1 < ERREUR. < < NEGATIVES... < EDPGD4: EQU $ SBR A,B JG EDPGD1 < ERREUR. EDPGD2: EQU $ IC DMWDKU+3 < OUI - INCREMENTER SON NUMERO LA N0BDKU < PLACER SON NUMERO STA &ADPAG0 IC N0BDKU < PASSER AU SUIVANT EDPGD6: EQU $ BSR ACOMP < CODAGE EVENTUEL ET ECRITURE DKU... LBY DMWDKU CPI '8A < QUI EST LA MT1 OU DKU ??? LR X,A < A=CODE D'ERREUR, JNE EDPGD7 < 'MT1'... TBT 3 < 'DKU', EST-CE LA VIOLATION ??? JNC EDPGD5 < NON... JMP EDPGD8 < OUI, IL FAUT AVERTIR !!! EDPGD7: EQU $ CPI '44 < 'MT1', EST-CE LA VIOLATION ??? JNE EDPGD5 < NON... EDPGD8: EQU $ LAI MDKUP-M < OUI, PREVENIR. BSR AENVOI WORD '1E16 < A L'UTILISATEUR DE JOUER... JMP EDPGD6 < ET ON RECOMMENCE. EDPGD5: EQU $ CPZR X < TEST CODE RETOUR... JNE EDPGD3 < MAUVAISE ECRITURE-ESSAYER D'INVALIDER LA DMWDKU+3 < RELIRE LE BLOC POUR VERIFICATION STA DMRDKU+3 LAD DMRDKU SVC 0 JE EDPGF < CA S'EST BIEN PASSE - FIN EDPGD3: EQU $ BSR ADCOMP < ON REDECODE... LAI -2 < INVALIDER CE BLOC STA &ADPAG0 BSR ACOMP < ON RECODE, AFIN QUE 'REST' TROUVE < BIEN LE MOT0 D'INVALIDATION (=-2)... BSR ADCOMP < ET ON REDECODE AFIN D'ITERER L'ECRITURE < CORRECTEMENT SUR LE SECTEUR SUIVANT... JMP EDPGD < ET REESSAYER SUR LE SUIVANT EDPGD1: EQU $ < FIN DE ZONE SUR DKU LAI MERDK-M < SORTIE DU MESSAGE D'ERREUR BSR AENVOI IC DMWDKU+3 < INVALIDER LE DERNIER SECTEUR. LAI -1 STA &ADPAG0 BSR ACOMP < CODAGE EVENTUEL ET ECRITURE DKU... JE $+2 ACTD STZ BOX < RELACHER LA MEMOIRE BSR AGESTM LA APILM1 < RESTAURER LA PILE LR A,K BR ARTCCI < ET FIN PAGE < < < C O D A G E D K U : < < COMP: EQU $ CPZ ICLEF < Y-A-T'IL CODAGE ??? JE COMP2 < NON... < < OUI, CODAGE : < PSR Y LA DMWDKU+1 SLRS 1 SBT 0 STA ABUF < GENERATION D'UN RELAI D'ACCES A LA PAGE < VIRTUELLE COURANTE... LX DMWDKU+2 < X=NOMBRE D'OCTETS A CODER... COMP1: EQU $ ADRI -1,X LBY &ABUF < A=OCTET COURANT A CODER : SLRD 4 < DECONCATENATION... PSR X LR A,X LBY &ACLEF < CODAGE DES 4 PREMIERS BITS... SLLS 4 LR A,Y LAI 0 SLLD 4 LR A,X LBY &ACLEF < CODAGE DES 4 DERNIERS BITS... ORR Y,A PLR X STBY &ABUF < ET MISE A JOUR DE LA PAGE VIRTUELLE... CPZR X < EST-CE FINI ??? JG COMP1 < NON... PLR Y < OUI... COMP2: EQU $ LAD DMWDKU SVC 0 < ECRITURE DE LA PAGE CODEE... RSR PAGE < < < R E D E C O D A G E S I E R R E U R : < < DCOMP: EQU $ PSR A,X,Y LX DMWDKU+2 < X=NOMBRE D'OCTETS A CODER... KOMP1: EQU $ ADRI -1,X LBY &ABUF < A=OCTET COURANT A CODER : SLRD 4 < DECONCATENATION... PSR X LR A,X LBY &ACLEFB < DECODAGE DES 4 PREMIERS BITS... SLLS 4 LR A,Y LAI 0 SLLD 4 LR A,X LBY &ACLEFB < DECODAGE DES 4 DERNIERS BITS... ORR Y,A PLR X STBY &ABUF < ET MISE A JOUR DE LA PAGE VIRTUELLE... CPZR X < EST-CE FINI ??? JG KOMP1 < NON... PLR A,X,Y RSR XWOR%1: VAL 0 PAGE PC1: EQU $ < < P R E P A R A T I O N P U N C H D E 1 O C T E T < < ON RANGE CET OCTET DANS LE BUFFER DE PUNCH < SACHANT QU'ON PLACE 11 BITS UTILES PAR COLONNE. < < ARGUMENT: < 'A' (BITS 8-15) = OCTET A PUNCHER < PSR A < CAR EN COURS LR A,Y < SVG CAR EN COURS LR A,B < IDEM LX NBM11 < INDEX SUR MSK1,SHF1 LBY &AXMSK1 < MASQUE 1 ANDR A,Y LBY &AXSHF1 < SHIFT1 LR A,X LR Y,A SCRS 0,X < SHIFT 1 LX PBP OR &AXTRAV < MAJ MOT EN COURS BUFF PUNCH STA &AXTRAV LX NBM11 < INDEX SUI MSK1 SHF2 LA SUI < INDICATEURS MOT SUIVANT TBT 0,X < PASSER AU SUIVANT? JNC PC12 IC PBP < OUI LA PBP CP ACHECK < ON DEPASSE? JL PC12 BSR APCARD < OUI,PUNCH CARTE PC12: EQU $ LBY &AXMSK1 < ON PREND L'INVERSE DE MSK1: CMR A,A ANDR A,B < ON APPLIQUE CE MSK LBY &AXSHF2 < SHIFT 2 LR A,X LR B,A SCRS 0,X LX PBP OR &AXTRAV STA &AXTRAV < IC NBM11 < +1 SUR NB MODULO 11 (ON TRAVAILLE < 11 OCTETS PAR 11 OCTETS) LA NBM11 CPI 11 JL PC11 STZ NBM11 < RAZ NB MODULO 11 IC PBP < MOT SUIVANT BUFFER PUNCH LA PBP CP ACHECK < ON DEPASSE? JL PC11 BSR APCARD < OUI,PUNCH CARD PC11: EQU $ PLR A RSR PAGE PCARD: EQU $ < < P U N C H C A R T E < < CE S/P INTRODUIT LA NUMEROTATION ET LE CHECKSUM < ET PUNCHE LA CARTE. IL GERE LES PAUSES ET L'INHIBITION/ < ACTIVATION DU PUNCH. < PSR A,B,X,W IC NUMC < NUMERO DE CARTE (1 A 9999) LA NUMC CP DIXMIL < ON ATTEINT 10000 CARTES? JL PCARD5 LAI 1 STA NUMC < OUI,ON REPASSE A 1 PCARD5: EQU $ LXI 0 LB NUMC PCARD2: EQU $ < BOUCLE DE CONVERSION DU NUMERO < DE CARTE LAI 0 DV DIX JNV $+2 ACTD PSR B < ON ENPILE LE RESTE ADRI 1,X < COUNT JAE PCARD1 < QUTIENT NUL? < SI NON, ON CONTINUE XR A,B JMP PCARD2 < PCARD1: EQU $ < STOCKAGE DU NUMERO DANS < BUFFER PUNCH LA ABPF NGR X,Y ADR A,Y < ADRESSE 1ER MOT DE STOCKAGE < PCARD3: EQU $ < STOCKAGE PLR A PSR X LR A,X LAI 0 SBT 2,X LR Y,X STA &AXTRAV ADRI 1,Y PLR X JDX PCARD3 < AU SUIVANT < < < < CALCUL DU CHECK < LXI NBCOL LAI 0 < INIT CHECK PCARD4: EQU $ < ON BOUCLE NBCOL(80) FOIS EOR &AXBPM1 JDX PCARD4 ANDI 'FFE0 < POUR NETTOYER BITS 11-15 < DU CHECK STA &ACHECK < STORE CHECK < < PUNCH PROPREMENT DIT, AVEC RAZ DU BUFFER DE PUNCH < AU FUR ET A MESURE PUISQU'ON Y EST < LXI NBCOL*2 STX DMPCH+2 LY ABP LR Y,W ADR Y,Y LAD DMPCH < DEMANDE PUNCH POUR SVC STY DMPCH+1 < ADR OCT MOT EN COURS CPZ IPCH < SSI PUNCH ACTIF JNE PCD3 < PUNCH INACTIF... SVC 0 PCD3: EQU $ LXI NBCOL PCD4: EQU $ STZ 0,W < RAZ DU BUFFER... ADRI 1,W JDX PCD4 LAD DMTMPO < TEMPORISATION CPZ IPCH < SSI PUNCH ACTIF JNE $+2 SVC 0 < REINIT PBP LA ABP STA PBP < < INCREMENTATION NBMNP IC NBMNP LA NBMNP CP NPAUSE < FAUT-IL FAIRE UNE PAUSE ? JL PCD2 STZ NBMNP < OUI, RAZ STZ IPCH < PUNCH ACTIF A PRIORI LAI MCART-M < INVITATION UTILISATEUR BSR AQREP < QUESTION, REPONSE... CPI "S" < ...SIGNIFIE SUPPRESSION? JNE $+2 IC IPCH < OUI,PUNCH DEVIENT INACTIF PCD2: EQU $ < PLR A,B,X,W RSR IF ORDI-"S",XWOR%1,,XWOR%1 PAGE DVAS: EQU $ < < LECTURE ET VERIFICATION ADRESSE DKU < < PARAM : A = ADRESSE DU MESSAGE < RESUL : A = ADRESSE DKU < PSR W LR A,W < PROTEGER L'ADRESSE DU MESSAGE DVAS1: EQU $ LR W,A < RESTAURER L'ADRESSE DU MESSAGE BSR AENVOI < L'ENVOYER LAD DMASNS < LIRE LA REPONSE SVC 0 LA DMASNS+1 < LA CONVERTIR BSR ACONVH JNE DVAS1 < NOMBRE INCORRECT LR A,B < VERIFIER LA COMPATIBILITE EOR ADKU1 < AVEC LE 1ER BLOC POSSIBLE JAGE DVAS2 CPZR B JGE DVAS1 JMP DVAS3 DVAS2: EQU $ LBY DMWDKU CPI '8A JNE DVAS3 < LA VERIFICATION QUI SUIT N'A LIEU QUE < POUR 'DKU'... < (ET NON PAS POUR 'MT1') LR B,A CP ADKU1 JL DVAS1 DVAS3: EQU $ LR B,A < ET AVEC LE DERNIER EOR ADKU2 JAGE DVAS4 CPZ ADKU2 JGE DVAS1 JMP DVAS5 DVAS4: EQU $ LA ADKU2 CPR B,A JL DVAS1 DVAS5: EQU $ LR B,A < RESULTAT PLR W RSR PAGE SETV: EQU $ < < S E T V E R R O U C O U R A N T ' N V C ' E N C D A. < PSR A,B,X LRM B < ADRESSE DE LA VALEUR DE SET. WORD VSET SRSET: EQU $ LA NVC < NUMERO VERROU COURANT. AD ADCDA < ADRESSE CDA VERROU COURANT. LXI 1 < LONGUEUR. WCDA PLR A,B,X RSR RSETV: EQU $ < < R E S E T V E R R O U C O U R A N T ' N V C ' E N C D A. < PSR A,B,X LRM B < ADRESSE DE LA VALEUR DE RESET. WORD VRSET JMP SRSET < VERS LE WCDA. TESTV: EQU $ < < T E S T V E R R O U C O U R A N T ' N V C ' E N C D A. < PSR A,B,X,W LRM B < ADRESSE DE STOCKAGE DE LA VALEUR LUE. WORD VTEST LR B,W < POUR TEST ULTERIEUR. LA NVC < NUMERO VERROU VOURANT. AD ADCDA < ADRESSE DU VERROU EN CDA. LXI 1 < LONGUEUR. RCDA CPZ 0,W < POUR TEST EN RETOUR. PLR A,B,X,W RSR VSET: WORD 1 < VALEUR DU SET. VRSET: WORD 0 < VALEUR DU RESET. VTEST: DZS 1 < VALEUR A TESTER. XWOR%1: VAL 0 FIN: EQU $ < FIN DU PROGRAMME TOTO: VAL FIN-ZERO*2 PAG0: EQU ZERO+TOTO PAG2: EQU ZERO+TOTO+2 LST NDS END