EXT GENLC TABLE ZERO: EQU $ < < INTERFACE AVEC CMS4 < DZS '10 WORD DEB < < POINT D'ENTREE < WORD DEBUT PROG DEB: EQU $ LRP L BR -1,L < < < E N - T E T E D E L ' I T E M : < < LHITEM: VAL 80 < NBRE DE MOTS OCCUPES PAR < L'EN-TETE D'UN ITEM. HITEM: EQU $ < EN-TETE D'UN ITEM. NOMCI: DZS 3 < NOM CODE SUR 6 CARACTERES. BYTE '04;'C9 < <EON> DE FIN DE NOM , ET < INDICATEURS TYPE-ITEM : 'I'+'80. LRITEM: WORD 0 < LONGUEUR REELLE DE L'ITEM EN < OCTETS (0 INITIALEMENT). IINDIC: BYTE "T";0 < INDICATEURS DIVERS ET VARIES < OCTET0=NATURE DE L'ITEM (='00 , < SI L'ITEM EST VIDE) : < OCTET0='T' POUR 'TYPE-TEXTE'. X1: VAL 'C FAMILI: EQU HITEM+X1 < OCCUPATION DES 16 PERES POSSIBLES < D'UN ITEM. X1: VAL 'D PERIS: EQU HITEM+X1 < LISTE DES 16 PERES POSSIBLES < D'UN ITEM. XNOM: VAL '3D < DEPLACEMENT DE <NOM> DANS ITEM NOMI: EQU HITEM+XNOM < NOM DE L'ITEM. X1: VAL '4F TOPI: EQU HITEM+X1 < TOP DE L'EN-TETE DE L'ITEM. DZS TOPI-IINDIC < $<--TOPI+1. < < < R E L A I S D ' A C C E S : < < ANOMCI: WORD NOMCI,X ANOMI: WORD NOMI,X < < < C O R P S D E L ' I T E M : < < NBCAR: VAL 74 < NBRE DE CARACTERES/LIGNE. NBLIG: VAL 35 < NBRE DE LIGNES/PAGE. LITEM: VAL NBCAR*NBLIG < NBRE DE CARACTERES MAX OCCUPES < PAR LE CORPS DE L'ITEM. CITEM: DZS LITEM/2 < CORPS DE L'ITEM PROPREMENT DIT. X2: VAL CITEM-HITEM LTNI: VAL $-HITEM < LONGUEUR TOTALE MAXIMALE EN < MOTS DE L'ITEM (EN-TETE+CORPS). COMMON COM: EQU $ DZS 1 < POUR FLOTTANT CCI: WORD 1 < RETOUR CCI KSTORE: DZS 20 < PILE K REL: WORD CITEM,X < RELAI CORPS ITEM DEBITE: ASCI "KGXWYW D 12AB " < EN-TETE ITEM FINSEQ: ASCI " MIC; OAB MOC; " < FIN DE SEQUENCE LIST: EQU $ < PARAM POUR GENLC FCT: DZS 1 < FONCTION AD: DZS 1 < @ GENERATION RHO: DZS 1 < RAYON NB: DZS 1 < NB SEGMENTS RAYON: WORD 200 < RAYON DIST: WORD 300 < DISTANCE YEUX NBSEG: WORD 80 < NB DE SEGMENTS NBPV: WORD 10 < NB DE POINTS DE VUE SP: WORD GENLC < RELAI SP AITEM: WORD HITEM < RELAI DEBUT ITEM F3: DZS 1 < FCT COMPRESSION NOM ANOMC: WORD NOMCI,X < RELAI NOM COMPACTE NOMCP2: WORD NOMCI+2 < DERNIER MOT NOM COMPACTE AGTCAR: WORD GETCAR < SP LECTURE 1 CARAC LNOM: VAL '26 < LONGUEUR NOM ANOM: WORD NOMI,X < RELAI NOM SYMBOLIQUE CODE: WORD CODAGE < SP DE CODAGE NOM ALITEM: WORD LRITEM < RELAI LG ITEM LMITEM: WORD LITEM/2 < LG ITEM EN MOTS FINITE: WORD HITEM+LTNI,X < RELAI FIN ITEM NOMITE: BYTE '6D;"N" < POUR DEMANDER NOM ITEM ASCI "OM =" DEMNOM: WORD '0202 < DEMANDE NOM WORD NOMITE-ZERO*2 WORD 6 LECNOM: WORD '0101 < LECTURE NOM WORD NOMI-ZERO*2 WORD LNOM DEMGEN: WORD '8402 < GENERATION ITEM WORD HITEM-ZERO*2 WORD LTNI*2 WORD -1 DIX: WORD 10 BID: WORD 0 < POUR LECTURE MESS: WORD SPMESS < SORTIE MESSAGE LECN: WORD SPLECN < LECTURE NOMBRE LECF: WORD SPLECF < LECTURE NOM FONCTION DEMSEG: BYTE 13;'6D < NB SEGMENTS ASCI "NB SEGMENTS=" DEMRAY: BYTE 7;'6D < RAYON ASCI "RAYON=" DEMFIG: BYTE 8;'6D < FIGURE ASCI "FIGURE=" DEMNBP: BYTE 11;'6D < NB PT VUE ASCI "NB PT VUE=" DEMDIS: BYTE 11;'6D < DISTANCE YEUX ASCI "DIST YEUX=" DEMOUT: WORD '0202 < SORTIE MESSAGE DZS 2 LECCH: WORD '0101 < LECTURE REPONSE WORD BID-ZERO*2+1 WORD 1 WORD COM+'80 PROG DEBUT: EQU $ LRP C < INIT. BASE LA -1,C LR A,C LAD KSTORE-1 LR A,K LX LMITEM < MISE A BLANC ITEM NGR X LAI '20 SBT 2 STA &FINITE JIX $-1 LXI 0 < EN-TETE LAD &REL LR A,B LAD DEBITE LXI 15 MOVE LAD DEMSEG < NB SEGMENTS BSR LECN STA NBSEG LAD DEMRAY < RAYON BSR LECN STA RAYON LAD DEMFIG < 1ERE FIGURE BSR LECF STA FCT LXI 15 LAD &REL STA AD LA RAYON STA RHO LA NBSEG STA NB LAD LIST BSR SP LB AD < OAB LAD FINSEQ LXI 8 MOVE LAD DEMFIG < 2EME FIGURE BSR LECF STA FCT LA AD ADRI 8,A STA AD LA NBSEG STA NB LAD LIST BSR SP LB AD < OAB LAD FINSEQ LXI 8 MOVE LAD DEMNBP < NB PT VUE BSR LECN STA NBPV LAD DEMDIS < DIST. YEUX BSR LECN STA DIST LA AD ADRI 8,A STA AD LAI -1 STA FCT LA DIST STA RHO LA NBPV STA NB LAD LIST BSR SP LB AD < OAB LAD FINSEQ LXI 8 MOVE LA LMITEM SLLS 1 STA &ALITEM LAD DEMNOM < GENERER SVC 0 LAD LECNOM SVC 0 BSR CODE LAD DEMGEN SVC 0 LAD CCI SVC 0 JMP $-1 < < SORTIE DE MESSAGE < SPMESS: EQU $ LR A,Y LR A,W ADR A,A ADRI 1,A STA DEMOUT+1 LBY 0,W STA DEMOUT+2 LAD DEMOUT SVC 0 RSR < < LECTURE D'UN NOMBRE < SPLECN: EQU $ BSR MESS LAI 0 LR A,W LECN1: EQU $ LAD LECCH SVC 0 LA BID CPI '0D JE LECN2 CPI '04 JE LECN2 ADRI -'30,A JAL LECN3 CPI 9 JG LECN3 XR A,W MP DIX ADR B,W JMP LECN1 LECN2: EQU $ LR W,A JAE LECN3 RSR LECN3: EQU $ LR Y,A JMP SPLECN < < LECTURE NOM FIGURE < SPLECF: EQU $ BSR MESS LAD LECCH SVC 0 LBI 0 LA BID CPI "L" JE LECF1 ADRI 1,B CPI "C" JE LECF1 ADRI 1,B CPI "I" JE LECF1 LR Y,A JMP SPLECF LECF1: EQU $ LR B,A RSR < < < C O D A G E < N O M > E N < N O M C > : < < < FONCTION : < CETTE ROUTINE CODE SUR 6 CARACTERES < <NOMC> LES 'N' CARACTERES <NOM> < D'UN NOEUD. < CECI EST FAIT SUIVANT UN SUPERBE < ALGORITHME DE COMPACTAGE PAS MAL < UNIVOQUE ... < < < ARGUMENT : < W=@NOEUD. < < < RESULTAT : < X=0 (OK). < < CODAGE: EQU $ < < INITIALISATION DU CODEUR : < STZ F3 < RAZ DE LA FONCTION F3. LYI 3 < 2*3 CARACTERES A METTRE A BLANC. LXI 0 < INDEX DE MISE A BLANC. LAI '20 SBT 2 < A='SPACE''SPACE'. E1: EQU $ STA &ANOMC < MISE DE <NOMC> A 'SPACE'. ADRI 1,X < INDEX DE RAZ. CPR X,Y JNE E1 < NEXT .... LXI -1 < X=INDEX CARACTERE. < =F1=LONGUEUR DU MOT ENTRE. LBI 0 < B=F2. < < UTILISATION DES REGISTRES : < < B=F2=EOR(K(I)) : EOR SUR TOUS LES < CARACTERES DE K(4) A K(L). < F2=EOR(K(4),K(5),...,K(L)) , < X=INDEX CARACTERES (IN ET OUT) , < =F1=LONGUEUR COURANTE DU MOT ENTRE (NBRE DE < CARACTERES NON COMPRIS 'EOT') , < F3=CF. F2 , MAIS A CHAQUE EOR , LE < RESULTAT INTERMEDIAIRE EST DECALE < CIRCULAIREMENT. < < < RECUPERATION DES 3 PREMIERS CARACTERES : < BSR AGTCAR < A=K(1). JE E2 < MOT VIDE , C'EST FINI. STBY &ANOMC < STORE : C(1)=K(1). BSR AGTCAR < A=K(2). JE E2 < LE MOT N' A QU'UNE LETTRE. STBY &ANOMC < C(2)=K(2). BSR AGTCAR < A=K(3). JE E2 < LE MOT N'A QUE 2 LETTRES. STBY &ANOMC < C(3)=K(3). < < CODAGE DES CARACTERES K(4),...,K(L) : < E3: EQU $ BSR AGTCAR < A=K(I) , I=4,...,L. < (L DESIGNANT LA LONGUER DU < MOT A CODER). JE E4 < ARRET DU CODAGE SUR 'EOT'. ADR X,A < LE CARACTERE COURANT (A) EST < 'PONDERE' PAR SA POSITION (X) < DANS LE MOT. < K(I)=K(I)+I. EORR A,B < CALCUL DE F2 : < F2=EOR(F2,K(I)). ADR A,B < F2=F2+K(I). EOR F3 < CALCUL DE F3 : < A=EOR(F3,K(I)). SCLS 1 < DECALAGE CIRCULAIRE. STA F3 < F3=SCLS(EOR(F3,K(I)),1). JMP E3 < CODAGE DU CARACTERE SUIVANT. < < MISE SOUS FORME ASCI DES FONCTIONS F2 & F3 : < E4: EQU $ LBY F3 < A=OCTET0(F3). AD F3 < A=F3+OCTET0(F3). ANDI '7F < A=OCTET0(F3)+OCTET1(F3). < (SUR 7 BITS). CPI "Z" JLE E5 ADRI -'30,A < F3 EST MIS SOUS LA FORME D'UN < CODE INFERIEUR AU 'Z'. E5: EQU $ CPI " " JG E6 ADRI '30,A < F3 EST DONC ENTRE LE 'Z' < (COMPRIS) ET LE 'SPACE' (NON < COMPRIS). E6: EQU $ < ON A ICI : < A=F3=CARACTERE ASCI DE '!' (='21) A 'Z' (='5A) ; < L'AMBIGUITE EST DONC POUR F3 DE '5A-'21. XR A,B < B=F3 , A=F2 A METTRE EN FORME. ANDI '7F < MISE SUR 7 BITS. CPI "Z" JLE E7 ADRI -'30,A < ON RAMENE F2 A UN CODE INFERIEUR < A CELUI DU 'Z'. E7: EQU $ CPI "0" JGE E8 ADRI '20,A < ON TENTE DE RAMENER F2 APRES < LE CODE DU '0' (ZERO). JMP E7 < POURSUIVONS LA TENTATIVE .... E8: EQU $ < ON A ICI : < A=F2=CARACTERE ASCI ALLANT DU '0' (COMPRIS) < AU 'Z' (COMPRIS) ; L'AMBIGUITE DE F2 EST DONC < DE '30-'5A : < AMBIGUITE(F2)<AMBIGUITE(F3). SWBR A,A ORR B,A < A=F2.F3. STA &NOMCP2 < STORE : C(5)=F2 , C(6)=F3. < < CODAGE DE LA LONGUEUR DU MOT : < E2: EQU $ < ON A ICI : < X=LONGUEUR DU MOT ENTRE (NON COMPRIS 'EOT'). LR X,A ADRI '30,A < ON MET LA LONGUEUR SOUS FORME < D'UN CARACTERE ASCI QUI NOUS < DONNE F1 DONT L'AMBIGUITE EST < DE '30-.... , MAIS INFERIEUR A < CELLE DE F2 , ET DONC A CELLE < DE F3 A FORTIORI. LXI 3 < INDEX DE C(4). STBY &ANOMC < STORE : C(4)=F1. LXI 6 < INDEX DE C(7). LAI '04 < 'EON' DE FIN DE NOM CODE. STBY &ANOMC < STORE : C(7)='EON'. LXI 0 < RETOUR OK. RSR < < < A C C E S A U N C A R A C T E R E : < < < FONCTION : < CETTE ROUTINE FAIT PROGRESSER L'INDEX < CARACTERE COURANT (X) , LA LONGUEUR COURANTE < DU MOT (X) ET ACCEDE LE CARACTERE COURANT , < APRES INCREMENTATION DE X ; ENFIN < ELLE DIT SI LE CARACTERE ACCEDE EST < OU N'EST PAS 'EOT'. < < < NOTA : < UNE REPONSE EQUIVALENTE EST DONNEE < DANS LE CAS OU LA LONGUEUR COURANTE < ATTEINTE EST LA LONGUEUR MAX QUE < PEUT ATTEINDRE UN <NOM>. < < GETCAR: EQU $ ADRI 1,X < PROGRESSION DE L'INDEX CARACTERE < COURANT (AVANT ACCES !!!!). < ET PROGRESSION DE LA LONGUEUR < COURANTE. LR X,A < ACCES A LA LONGUEUR COURANTE. CPI LNOM < EST-ON AU BOUT DU <NOM> SANS < AVOIR RENCONTRE D''EOT' ??? JE E140 < OUI , ON FAIT COMME SI.... LBY &ANOM < A=K(X). CPI '04 < EST-CE 'EOT' ???? E140: EQU $ RSR END