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
Copyright © Jean-François COLONNA, 2022-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.