NMPROC: VAL "KA" < NOM DU PROCESSEUR.
IDP "KA - RELEASE 01/06/1979"
IDP "JOHN F. COLONNA"
EOT #SIP DEF PROCESSEUR#
PROG
WORD CARTE < ADRESSE DE DEPART DU PROCESSEUR.
WORD 0 < POUR FAIRE $=$+1.
PCARTE: EQU $ < P DE LANCEMENT DE 'CARTE A ITEM'
< LORS D'UN APPEL PAR !GE.
< (A NOTER : P='12).
LRP L
BR -2,L < ENTREE DANS LE PROCESSEUR.
PAGE
EOT #SIP DEFINITION ITEM#
LNOM: VAL '26 < NBRE MAX DE CARACTERES D'UN
< NOM D'ITEM.
PAGE
<
<
< L O C A L :
<
<
LOCAL LOCCA
LOC: EQU $
<
< B U F F E R S :
<
BUFFER: WORD 0 < BUFFER D'ENTREE COMMANDES.
BCARTE: DZS 40 < BUFFER DE LECTURE DES CARTES.
MRET: BYTE 1;'6D
M2: BYTE 2;'6D
ASCI "> "
MNOM: BYTE 5;'6D
ASCI "NOM>"
M1: BYTE 9;'6D
ASCI "ERR-ITEM"
M3: BYTE 1;"?"
M4: BYTE 9;'6D
ASCI "ERR-ASGN"
M7: BYTE 0;'0D < A T T E N T I O N : FAIT
< PARTIE DU MESSAGE M5.
M5: BYTE '40;'0D;'0A;0 < POUR FAIRE UN SAUT DE PAGE.
M6: BYTE " ";'0D < POUR LIBERATION DU DERNIER LF.
<
< C O N S T A N T E S :
<
RI: WORD 0 < RI=0 : COMMANDE 'R' ,
< RI=-1 : COMMANDE 'I'.
NCP: WORD NBCAR*NBLIG < NBRE DE CARACTERES MAX
< DANS L'ITEM.
FINP: ASCI "*/" < INDICATEUR DE FIN D'ITEM.
IPLUS: ASCI "*+" < POUR TESTER LES DEMANDES DE
< CREATION D'ITEM (VIA 'GI').
NOM: EQU $ < ZONE DESTINEE A RECEVOIR LE
< NOM D'UN ITEM LORS DE 'S'.
DO NBCAR-2/2
ASCI " "
ILOAD: ASCI "IL" < POUR GENERER UN 'IL' AUTOMATIQUE
< DE L'ITEM LORS DE LA COMMANDE 'S'
PVKA: ASCI " AK;"
NGE: ASCI "GE" < NOM DE LA BRANCHE DE
< L'OVERLAY !GE.
NGI: ASCI "GI" < NOM DE LA BRANCHE 'GI'.
ISGE: ASCI "ISGE" < COMMANDES A DESTINATION DE
< 'GI' POUR FAIRE 'IS'+'GE'.
<
< R E L A I D E S T A B L E S :
<
APILE: WORD PILE-1 < POUR INITIALISER LE REGISTRE K.
AIC: WORD ZERO+PILE-LTNI+LTN,X
< RELAI VERS L'ITEM COURANT.
< (ITEM1).
SAIC: WORD ZERO+PILE-LTNI+LTN,X
< POUR REINITIALISER 'AIC' A
< CHAQUE RETOUR DU CCI (A
< CAUSE DE LA COMMANDE 'S').
XAI2: WORD ZERO+PILE-LTNI-LTNI+LTN,X
AI2: WORD ZERO+PILE-LTNI-LTNI+LTN
< ADRESSE DE L'ITEM2.
ATCOD: WORD TCOD,X < RELAI VERS LA TABLE DE CODAGE
< DES CODES ASCI EN CODES CARTE.
ANOM: WORD NOM,X < RELAI VERS LE NOM DE L'ITEM.
APVKA: WORD PVKA,X
DEBLIG: WORD 0 < RELAI DE DEBUT DE LIGNE.
ACARTE: WORD LCARTE < LISTE DES CARTES A PUNCHER 'S'.
LCARTE: EQU $
WORD CARTKA,X < CARTE 'KA '.
ACARTR: WORD CARTR,X < CARTE 'R '.
AIPLUS: WORD IPLUS,X < CARTE '*+<NOM>;'.
ACARTI: WORD CARTI,X < CARTE 'I '.
WORD 0 < FIN DE LISTE.
<
< R E L A I S D E S R O U T I N E S :
<
ASVC: WORD RSVC < ROUTINE D'EXECUTION DES SVC.
ASVCI: WORD RSVCI < EXECUTION DES SVC DANS LE
< CAS OU LA COMMANDE N'EST PAS 'I'.
AOVL: WORD OVL < CHARGEMENT DES OVERLAYS.
AMESS: WORD MESS < EMISSION D'UN MESSAGE.
ACHKI: WORD CHKI < VALIDATION DU TYPE-ITEM.
AE23: WORD E23 < RETOUR DES FONCTIONS.
AGOGE: WORD GOGE < ADRESSE DE RETOUR A 'GE'/'GI'.
<
< D E M A N D E S A C M S 4 :
<
DEMIN: WORD '0101 < LECTURE AVEC ECHO SUR LA VISU.
WORD BUFFER-ZERO*2 < @OCTET DU BUFFER.
WORD 1 < LECTURE 1 CARACTERE.
DEMNOM: WORD '0101 < LECTURE AVEC ECHO DU NOM
< DE L'ITEM DANS 'S'.
WORD NOM-ZERO*2
WORD LNOM-1 < ON LIT 1 CARACTERE DE MOINS QUE
< LE MAX POUR S'EVITER DES
< PROBLEMES DELICATS....
DEMOUT: WORD '0202 < ECRITURE SUR LA VISU.
WORD 0 < @OCTET DU MESSAGE.
WORD 0 < LONGUEUR OCTETS DU MESSAGE.
DERASE: WORD '0205 < EFFACEMENT DE L'ECRAN.
DEMCA: WORD '0A00 < DEMANDE DE LECTURE SUR NVP=10.
WORD BCARTE-ZERO*2 < @OCTET DU BUFFER CARTE.
WORD 80 < ON EST OBLIGE DE LIRE UNE CARTE
< ENTIERE (80 CARACTERES).
DEMPCH: WORD '0B02 < DEMANDE D'ECRITURE SUR NVP=11.
< (CAS CU1 ET PERFO).
WORD BUFFER-ZERO*2 < @OCTET DU BUFFER.
WORD 2 < ON ENVOIE UN MOT.
DEMPRN: WORD '0B02 < DEMANDE D'ECRITURE
< SUR NVP=11 (CAS LP1).
WORD 0 < @OCTET DU BUFFER.
WORD 0 < COMPTE OCTETS.
DEMSGN: WORD '0402 < DEMANDE AU SGN , INITIALISE EN
< STORE , AFIN DE GENERER LORS
< DE !LOAD LA BRANCHE 'CA '.
WORD BRANCH-ZERO*2
WORD ZERO-BRANCH+PILE-LTNI-LTNI*2
WORD -1 < LA VALEUR SUIT LE NOM.
DEMCCI: WORD '0001 < RETOUR AU CCI.
SLEEP: WORD '0005 < DEMANDE DE MISE EN SOMMEIL.
WORD 0
WORD 4 < 4 SECONDES DE TEMPORISATION.
PAGE
TCOD: EQU $-'20+1
EOT #SIP CODAGE PUNCH#
PAGE
<
<
< C A R T E S A P U N C H E R S O U S ' S ' :
<
<
CARTKA: EQU $
ASCI "KA"
DO NBCAR-2/2
ASCI " "
CARTR: EQU $
ASCI "R "
DO NBCAR-2/2
ASCI " "
CARTI: EQU $
ASCI "I "
DO NBCAR-2/2
ASCI " "
PAGE
<
<
< E X E C U T I O N D E S S V C :
<
<
< ARGUMENT :
< A=@DEMANDE A CMS4.
<
<
< RESULTAT :
< A=CONDITIONS DE RETOUR DE CMS4 ,
< INDICATEURS POSITIONNES EN FONCTION DE CTRL-X-OFF.
<
<
PROG
<
<
< E X E C U T I O N C O N D I T I O N N E L L E D E S S V C
<
<
< FONCTION :
< CETTE ROUTINE N'EXECUTE LE SVC QUE
< SI LA COMMANDE COURANTE N'EST PAS 'I'.
<
<
RSVCI: EQU $
CPZ RI < DISCRIMINATION DE 'I' ...
JNE E600 < C'EST 'I' : SVC IGNORE ...
< NOTA : RI=-1<0 , DONC UN
< TEST EN RETOUR SUR LES CONDITIONS
< SERA TOUJOURS NEGATIF , PUISQU'
< ON FAIT DES JGE (TEST DE (A)
< PAR RAPPORT A '13).
<
<
< E X E C U T O N I N C O N D I T I O N N E L L E :
<
<
RSVC: EQU $
PSR X < SAVE X.
SVC 0 < ENVOI DE LA DEMANDE (A) A CMS4.
LR X,A < A=CONDITIONS DE RETOUR DE CMS4.
PLR X < RESTAURE X.
CPI '13 < POSITIONNEMENT DES INDICATEURS
< EN FONCTION D'UN EVENTUEL
< CTRL-X-OFF DANS LE CAS DES VISUS.
E600: EQU $
RSR
PAGE
<
<
< E N V O I M E S S A G E :
<
<
< FONCTION :
< CETTE ROUTINE PREPARE DEMOUT ,
< ET ENSUITE ENVOIE LE MESSAGE
< DONNE EN ARGUMENT ; ELLE IGNORE
< LES CTRL-X-OFF.
<
<
< ARGUMENT :
< A=@MESSAGE (LE 1ER OCTET D'UN MESSAGE
< EN DONNE LA LONGUEUR).
<
<
MESS: EQU $
LR A,C < C=@MESSAGE.
ADR A,A
ADRI 1,A < A=@OCTET DE MESSAGE A ENVOYER.
STA DEMOUT+1 < MISE EN PLACE DE L'@OCTET
< DU BUFFER DANS DEMOUT.
LBY 0,C < A=LONGUEUR DU MESSAGE.
STA DEMOUT+2 < MISE EN PLACE DU COMPTE OCTETS
< DE DEMOUT.
LAD DEMOUT
BSR ASVC < ENVOI DU MESSAGE.
RSR
PAGE
<
<
< V A L I D A T I O N T Y P E I T E M :
<
<
< RESULTAT :
< LES INDICATEURS SONT POSITIONNES EN
< FONCTION DE LA RENCONTRE DU
< TYPE 'D'/'I'/'T'.
<
<
< DETRUIT A,X.
<
<
CHKI: EQU $
LXI IINDIC-LTN*2
LBY &AIC < A=TYPE DE L'ITEM COURANT.
CPI "I" < EST-CE UN FILM DIGITAL ???
JE CHKI1 < OUI , OK.
ORI '10 < ON RAJOUTE LE BIT11 QUI
< DIFFERENCIE 'D' DE 'T'.
CPI "T" < L'ITEM COURANT A-T'IL LE TYPE
< 'TEXTE' ???
CHKI1: EQU $
RSR
PAGE
<
<
< L I S T A G E I T E M C O U R A N T :
<
<
< FONCTION :
< CE MODULE PERMET DE LISTER SUR
< LP1 LE CONTENU DE L'ITEM COURANT.
<
<
LIST: EQU $
<
< VALIDATION DE L'ITEM COURANT :
<
BSR ACHKI < VALIDATION TYPE ITEM ('T'/'D').
JNE E24 < NON , ERREUR : RETOUR A !GE.
<
< PREPARATION DU LISTAGE :
<
LAI M7-ZERO*2+1
STA DEMPRN+1 < MISE EN PLACE DE L'@OCTET DU
< MESSAGE DE SAUT DE PAGE.
LAI 4
STA DEMPRN+2 < 3 OCTETS POUR FAIRE LE SAUT.
< (+1 POUR FERMER LA LIGNE
< PRECEDENTE EVENTUELLE PAR R/C)
LAD DEMPRN
BSR ASVC < ENVOI DU SAUT DE PAGE.
JANE E22 < ERREUR : RETOUR A CCI.
< UTILISATION DES REGISTRES :
< X=NBRE DE LIGNES ENCORE A IMPRIMER ,
< B=@OCTET DE LA LIGNE COURANTE ,
< Y=2 (POUR ENVOYER RC+LF).
LXI NBLIG < X=NBRE DE LIGNES A IMPRIMER.
LA AIC
SLLS 1 < A=@OCTET DE LA 1ERE LIGNE.
LR A,B < B=@OCTET DES LIGNES DE L'ITEM.
LYI 2 < Y=2 (POUR RC+LF).
<
< IMPRESSION D'UNE LIGNE :
<
E70: EQU $
LAI NBCAR
STA DEMPRN+2 < MISE EN PLACE DU NBRE DE CARAC-
< TERES CONTENUS DANS UNE LIGNE.
STB DEMPRN+1 < MISE EN PLACE DE L'@OCTET DE
< LA LIGNE COURANTE.
LAD DEMPRN
BSR ASVC < IMPRESSION DE LA LIGNE.
JANE E22 < ERREUR : RETOUR A CCI.
LAI M5-ZERO*2+1
STA DEMPRN+1 < MISE EN PLACE DE L'@OCTET
< DU MESSAGE RC+LF.
STY DEMPRN+2 < POUR ENVOI DE 2 CARACTERES.
LAD DEMPRN
BSR ASVC < ENVOI DE RC+LF.
JANE E22 < ERREUR : RETOUR A CCI.
<
< PASSAGE A LA LIGNE SUIVANTE :
<
ADRI NBCAR,B < PROGRESSION DE L'@OCTET DE
< LA LIGNE COURANTE.
JDX E70 < SUIVANTE ....
LAI M6-ZERO*2
STA DEMPRN+1 < MESSAGE DE LIBERATION DE LP1
< PUISQU'ON A TERMINE PAR UN
< LF SEUL.
LAD DEMPRN
BSR ASVC < FERMETURE DE LP1.
JANE E22 < ERREUR : RETOUR A CCI.
BR AE23 < VERS LE RETOUR DES FONCTIONS.
PAGE
<
<
< P R O C E S S E U R D E S E R V I C E S I T E M :
<
<
< FONCTION :
< CE PROCESSEUR PERMET UN CERTAIN
< NOMBRE DE FONCTIONS DE SERVICE SUR
< LES ITEMS :
< CARTE A ITEM (SOUS :SYS) : NVP=10 ,
< ITEM A CARTE : NVP=11 ,
< LISTE ITEM (SOUS :SYS) : NVP=11.
<
<
< NOTA IMPORATNT :
< IL S'AGIT D'ITEM DE TYPE 'TEXTE' ....
<
<
< LISTE DES COMMANDES :
< P PUNCH ITEM COURANT SUR NVP=11 ,
< S PUNCH UNE CARTE DU TYPE *+<NOM>;
< PUIS FAIT UN 'IL'<NOM> AUTOMATIQUE
< A L'AIDE DE 'GI'.
< R READ ITEM COURANT SUR NVP=10 ,
< I IDEM A 'R' AVEC DE PLUS UN 'IS'
< AUTOMATIQUE ET RETOUR A 'GE' ,
< L LISTE ITEM COURANT SUR NVP=11 ,
< W RETOUR A CCI ,
< F RETOUR A !GE.
<
<
< FIN D'ITEM :
< POUR LA PERFORATION , ET L'ENTREE
< CARTES , ON PEUT INDIQUER LA FIN
< DE L'ITEM COURANT PAR LES CARACTERES
< '*/' EN DEBUT DE LA DERNIERE LIGNE ....
<
<
< CREATION D'ITEM :
< ON A LA POSSIBLITE DE CREER DES
< NOMS D'ITEM , EN METTANT COMME 1ERE
< CARTE , LA CARTE SUIVANTE :
< *+...<INDIFFERENT>...;
< LA CREATION DE L'ITEM DONT LE NOM
< SUIT '*+' , SE FAIT EN TRANSLATANT
< CETTE CARTE DANS L'ITEM2 , ET EN
< APPELANT 'GI' , QUI LORSQU'IL AURA
< TERMINE SON TRAVAIL FERA UN RETOUR
< A 'KA' SI LE ';' ETAIT SUIVI DE 2
< 'SPACE' ; SINON RETOUR A ???? (SUIVANT
< CE QUI SUIVAIT ';'...).
<
<
<
<
< I N I T I A L I S A T I O N D U P R O C E S S E U R :
<
<
< FONCTION :
< CETTE ENTREE EST UTILSEE SUITE
< A UN APPEL PAR !GE.
<
<
WORD LOC+'80 < INITIALISATION DE LA BASE L.
WORD BRANCH < INITIALISATION DE LA BASE W.
CARTE: EQU $
LRP K
ADRI -1,K
PLR L,W < INITIALISATION DE L,W.
LB APILE
LR B,K < INITIALISATION DE K.
<
< I N I T I A L I S A T I O N D E ' C A ' :
<
<
< RAZ DE L'EN-TETE DE L'ITEM2 :
< (AINSI , IL N'Y A PLUS D'ITEM2 COURANT !!!)
<
LXI -LTN
RZ2: EQU $
STZ &XAI2 < RAZ DE L'EN-TETE DE L'ITEM2.
JIX RZ2
<
< INITIALISATION DE 'KA' :
<
LAI 6
STBY DEMSGN < LA DEMANDE AU SGN EST MISE EN
< MODE 'LOAD SOUS :SYS'.
LA NGE
STA 0,W < LE NOM DE LA BRANCHE D'OVERLAY
< A APPELER EST 'GE '.
<
< I N T E R R O G A T I O N U T I L I S A T E U R :
<
E40: EQU $
LAD M2
BSR AMESS < ENVOI D'UN MESSAGE D'INVITATION.
LAD DEMIN
BSR ASVC < LECTURE DE LA REPONSE DE
< L'UTILISATEUR SUR 1 CARACTERES.
<
< ANALYSE DES DESIRS (C'EST FREUDIEN...) :
<
LBY BUFFER < A=COMMANDE UTILISATEUR.
CPI "P"
JE PUNCH < DEMANDE DE PUNCH L'ITEM COURANT.
CPI "S"
JE SAVE < DEMANDE DE CREATION D'UNE
< CARTE *+<NOM>;.
CPI "L"
JE LIST < DEMANDE DE LISTE ITEM COURANT.
CPI "F"
JE GOGE < DEMANDE RETOUR A !GE.
CPI "W"
JE GOCCI < DEMANDE DE RETOUR A CCI.
STZ RI < RI=0 : COMMANDE 'R' A PRIORI.
LXI 0 < INDEX D'ACCES AU 1ER CARACTERE.
< (DE CARTR ET DE CARTI).
CPBY &ACARTR
JE READ < DEMANDE DE LECTURE DE L'ITEM
< COURANT SUR CR1.
< (NVP=10).
CPBY &ACARTI
JE ITEM < DEMANDE DE READ AVEC 'IS'
< AUTOMATIQUE ET RETOUR A 'GE'.
<
< CAS DES COMMANDES NON RECONNUES.
<
E41: EQU $
LAD M3
BSR AMESS < ENVOI D'UN MESSAGE D'ERREUR.
JMP E40 < VERS L'INTERROGATION.
<
< R E T O U R D E S E X E C U T I O N S :
<
E21: EQU $
E23: EQU $
LAD DERASE
BSR ASVC < EFFACEMENT DE L'ECRAN.
JMP E40 < VERS L'INTERROGATION UTILISATEUR.
<
< R E T O U R A ! G E :
<
GOGE: EQU $
LAD DEMSGN
BSR AOVL < DEMANDE DE CHARGEMENT DE LA
< BRANCHE D'OVERLAY 'GE ' AU SGN
<
< RETOUR EN ERREUR : SI ON ARRIVE ICI
< C'EST QUE LE CHARGEMENT DE !GE N'A
< PU SE FAIRE , ON VA DONC RENDRE
< LA MAIN AU CCI :
<
< R E T O U R A U C C I :
<
GOCCI: EQU $
LAD DEMCCI
BSR ASVC < RETOUR AU CCI.
LA SAIC < RESTAURATION DE AIC A PRIORI AU
STA AIC < RETOUR DU CCI PAR !GO , A CAUSE
< DE LA COMMANDE 'S'.
JMP E40 < VERS L'INTERROGATION DE
< L'UTILISATEUR DANS LE CAS
< D'UN !GO.
<
< E R R E U R S D ' A S S I G N A T I O N :
<
E22: EQU $
LAD M4
BSR AMESS < ENVOI D'UN MESSAGE D'ERREUR.
JMP GOCCI < PUIS VERS UN RETOUR AU CCI ,
< AVEC PEUT-ETRE UN RETOUR PAR
< !GO LORSQUE LES !ASSIGN AURONT
< ETE FAITS.
<
< I T E M E N E R R E U R :
<
E20: EQU $
E24: EQU $
LAD M1
BSR AMESS < ENVOI D'UN MESSAGE D'ERREUR.
JMP GOGE < VERS UN RETOUR A !GE.
PAGE
<
<
< P U N C H < N O M > D ' I T E M :
<
<
< FONCTION :
< CE MODULE PUNCHE UNE CARTE
< *+<NOM>; , PUIS FAIT UN 'IL'
< DU <NOM> AUTOMATIQUE A L'AIDE DE 'GI'.
<
<
SAVE: EQU $
LAD MNOM
BSR AMESS < ENVOI D'UN MESSAGE DEMANDANT
< LE <NOM> DE L'ITEM.
LAD DEMNOM
BSR ASVC < ENTREE DU <NOM> DE L'ITEM.
LAD MRET
BSR AMESS < RETOUR A LA LIGNE DU CURSEUR.
<
< RECHERCHE DU DERNIER CARACTERE DE <NOM> :
<
LXI 0 < INDEX DU <NOM>.
E500: EQU $
LBY &ANOM < ACCES A UN CARACTERE DU <NOM>.
CPI '04 < EST-CE 'EOT' ???
JE E501 < OUI , ON A TROUVE LA FIN DE <NOM>
CPI '0D < EST-CE R/C ???
JE E501 < OUI , ON A TROUVE LA FIN DE <NOM>
ADRI 1,X < NON , PASSAGE CARACTERE SUIVANT.
LR X,A < VALIDATION DE L'INDEX DE <NOM>.
CPI LNOM-1 < EST-ON EN PRESENCE D'UN <NOM>
< DE LONGUEUR MAX -1 (-1 POUR SE
< SIMPLIFIER LA VIE...).
JL E500 < NON , ON PEUT POURSUIVRE.
<
< MISE EN PLACE DE L'INDICATEUR DE FIN DE <NOM> :
<
E501: EQU $
LR X,Y < Y=INDEX+1 DU DERNIER CARACTERE
< DE <NOM>.
LXI 3 < 3 CARACTERES A RAJOUTER
< DERRIERE <NOM>.
E502: EQU $
LBY &APVKA < PARCOURS DE PVKA A REBROUSSE POIL
XR X,Y < X=INDEX DE <NOM>.
STBY &ANOM < MISE EN PLACE DE ';KA' DERRIERE
< LE <NOM>.
ADRI 1,X < PROGRESSION DE L'INDEX DE <NOM>.
XR X,Y < X=INDEX DE PVKA.
JDX E502 < AU SUIVANT ...
LAD LCARTE
STA ACARTE < ON N'EST JAMAIS ASSEZ PRUDENT !!!
<
< PREPARATION DU PUNCH DE CHACUNE DES 4 CARTES :
<
E801: EQU $
LA &ACARTE < RECUPERATION DE L'ADRESSE DE
< LA CARTE A PUNCHER.
JAE E800 < ON A FINI DE PUNCHER ...
STA AIC < AINSI LE MODULE DE PUNCH
< CROIRA QUE LA ZONE 'IPLUS'
< EST L'ITEM COURANT (!!!!).
LBI 0 < B=0 AFIN DE DISTINGUER 'PUNCH'
< DE 'SAVE' ; EN FAIT , IL
< N'Y A QU'UNE CARTE A PUNCHER.
JMP E503 < VERS LE PUNCH....
PAGE
<
<
< P U N C H I T E M C O U R A N T :
<
<
< FONCTION :
< CE MODULE PUNCHE L'ITEM COURANT
< A RAISON D'UNE CARTE PAR LIGNE
< DE VISU . LES 6 CARACTERES DE FIN DE
< CARTE SONT MIS A 'SPACE' . ON PEUT
< ARRETER LE PUNCH PAR UN CTRL-X-OFF ,
< CAR SIMULTANEMENT L'ITEM EST
< VISUALISE.
<
<
PUNCH: EQU $
<
< VALIDATION DE L'ITEM :
<
BSR ACHKI < VALIDATION TYPE ITEM ('T'/'D').
JNE E24 < NON , ERREUR : RETOUR A !GE.
<
< PREPARATION DU PUNCH :
<
LAD DERASE
BSR ASVC < EFFACEMENT DE L'ECRAN EN VUE
< DE LA VISUALISATION DE L'ITEM.
LBI NBLIG < B=NBRE DE CARTES A PUNCHER.
E503: EQU $ < ENTRY 'SAVE' (AVEC B=0).
LXI 0 < INDEX COURANT DE L'ITEM.
LA AIC
SLLS 1 < A=@OCTET DE L'ITEM.
STA DEMOUT+1 < INITIALISATION DE L'@OCTET
< DU BUFFER DE DEMOUT SUR LE
< 1ER OCTET DE L'ITEM COURANT.
LAI 1
STA DEMOUT+2 < LA LIGNE EST VISUALISEE
< CARACTERE PAR CARACTERE ...
<
< ENVOI D'UNE LIGNE :
<
E10: EQU $
LA DEMOUT+1 < @OCTET DU DEBUT DE LIGNE.
SLRS 1 < A=@MOT DU DEBUT DE LIGNE.
STA DEBLIG < RELAI VERS LE DEBUT DE LA LIGNE.
LYI NBCAR < Y=NBRE DE CARACTERES PAR LIGNE.
<
< ENVOI D'UN CARACTERE :
<
E11: EQU $
LBY &AIC < A=CARACTERE COURANT (X).
ANDI '7F < LORS DU PUNCH ON IGNORE LES
< MISES EN PAGE EVENTUELLES
< DU TYPE UP/LINE (CF. EDIT2).
CPI '20 < EST-CE UN CARACTERE ???
JL E20 < NON , ERREUR : L'ITEM N'EST PAS
< UN TEXTE , OU BIEN EST COMPACTE.
CPI '5F < EST-CE UN CODE MINUSCULE ???
JLE E12 < NON , OK.
LAI "?" < DANS LE CAS OU LE CODE N'EST PAS
< RECONNU , ON LE REMPLACE PAR '?'.
E12: EQU $
PSR X < SAVE L'INDEX COURANT DE L'ITEM.
LR A,X < X=CARACTERE A CODER.
LA &ATCOD < A=VALEUR EN CODE CARTE DU
< CODE ASCI (X).
STA BUFFER < LE CODE CARTE EST MIS DANS
< LE BUFFER DE PUNCH.
PLR X < RESTAURE L'INDEX COURANT.
LAD DEMPCH
BSR ASVC < PUNCH 1 CARACTERE.
JANE E22 < ERREUR D'ASSIGNATION , VERS
< UN RETOUR AU CCI.
<
< VISUALISATION DU CARACTERE PUNCHE :
<
LAD DEMOUT
BSR ASVC < VISUALISATION DU CARACTERE(X).
JGE E21 < ABORT DU PUNCH LORSQU'UN
< CTRL-X-OFF EST FRAPPE.
<
< PASSAGE AU CARACTERE SUIVANT :
<
IC DEMOUT+1 < PROGRESSION DE L'@OCTET
< DU BUFFER DE VISUALISATION.
ADRI 1,X < INDEX DU CARACTERE SUIVANT.
ADRI -1,Y < DECOMPTE DES CARACTERES
< SUR UNE LIGNE.
CPZR Y
JNE E11 < LA LIGNE COURANTE N'A PAS ENCORE
< ETE PUNCHEE EN ENTIER.
<
< CAS OU UNE LIGNE ENTIERE A ETE ENVOYEE :
< ON COMPLETE LA CARTE POUR FAIRE LES
< 80 COLONNES ; LA COMPLETION SE
< FAIT AVEC 6 CARACTERES 'SPACE' :
<
LYI 80-NBCAR < Y=NBRE DE 'SPACE' A ENVOYERR.
STZ BUFFER < LE CODE CARTE DU 'SPACE' EST 0000
E13: EQU $
LAD DEMPCH
BSR ASVC < PUNCH UN 'SPACE'.
ADRI -1,Y < DECOMPTE DES 'SPACE' ENCORE
< A PUNCHER.
CPZR Y
JNE E13 < IL RESTE ENCORE DES 'SPACE'.
<
< TEMPORISATION DE LA PERFORATION :
< EN EFFET LE SYSTEME FONCTIONNANT
< SANS INTERRUPTION , IL
< FAUT FAIRE UNE TEMPORISATION
< PROGRAMMEE :
<
LAD SLEEP
BSR ASVC < L'UTILISATEUR EST MIS EN ATTENTE
< POUR 4 SECONDES , TEMPS SUFFISANT
< POUR UNE CARTE PLEINE.
<
< TEST DE L'INDICATEUR DE FIN :
<
LA &DEBLIG < RECUPERATION DES 2 PREMIERS
< CARACTERES DE LA LIGNE.
CP FINP < EST-CE L'INDICATEUR DE FIN ???
JE E100 < OUI , ON ARRETE ICI .....
<
< PASSAGE A LA LIGNE SUIVANTE :
<
ADRI -1,B < DECOMPTE DES LIGNES RESTANT
< A PUNCHER.
CPZR B
JG E10 < ALLONS PUNCHER LA CARTE SUIVANTE.
JL E504 < DANS LE CAS OU B<0 , C'EST QU'ON
< EST EN PRESENCE DE 'SAVE' ;
< ALLONS DONC APPELER 'GI'.
E100: EQU $
BR AE23 < VERS LE RETOUR DES FONCTIONS.
<
< F I N D E P U N C H 1 C A R T E S O U S ' S ' :
<
E504: EQU $
IC ACARTE < PASSAGE A LA CARTE SUIVANTE.
JMP E801 < SI ELLE EXISTE.
<
< F I N D E ' S ' :
<
E800: EQU $
LAD IPLUS < A=EMETTEUR=@'*+<NOM>;KA'.
LB AI2 < B=RECEPTEUR=@CORPS(ITEM2).
LXI NBCAR/2 < X=NBRE DE MOTS A DEPLACER.
MOVE < MISE EN PLACE DANS L'ITEM2
< D'1NE DEMANDE PORTANT SUR <NOM>.
LA ILOAD
STA &AI2 < LA DEMANDE ARGUMENT A 'GI' ,
< EST 'IL<NOM>;KA'.
JMP E505 < VERS L'APPEL DE 'GI'.
PAGE
<
<
< C R E A T I O N D ' U N I T E M
< A P A R T I R D ' U N D E C K D E C A R T E S :
<
<
< FONCTION :
< CE MODULE PERMET DE CREER UN ITEM
< A PARTIR D'UN DECK DE CARTES.
< POUR 'R' , LES CARTES SONT VISUALISEES
< AU FUR ET A MESURE DE LEUR
< LECTURE ; CE QUI PERMET D'ARRETER
< CELLE-CI PAR UN CTRL-X-OFF ...
< ON DISTINGUE 2 ENTREES :
< 1- 'R' : READ : L'ITEM EST LU A
< PARTIR DE NVP=10 ET C'EST TOUT (KA
< GARDE LA MAIN) ,
< RI=0
< 2- 'I' : ITEM : L'ITEM EST LUU A PARTIR
< DE NVP=10 , ET LE CONTROLE EST RENDU
< IMMEDIATEMENT A 'GI' POUR FAIRE
< UN 'IS' AUTOMATIQUE SUIVI D'UN RETOUR
< A 'GE'.
< RI=-1.
<
<
ITEM: EQU $
DC RI < RI=-1 : COMMANDE 'I'.
READ: EQU $
<
< PREPARATION DE LA LECTURE :
<
LAD DERASE
BSR ASVCI < EFFACEMENT DE L'ECRAN SI 'R'.
LAI BCARTE-ZERO*2
STA DEMOUT+1 < @OCTET BUFFER DE VISUALISATION.
LAI NBCAR < NBRE DE CARACTERES PAR LIGNE.
STA DEMOUT+2 < MISE EN PLACE DU COMPTE OCTETS
< DE VISUALISATION DES CARTES.
LXI NBLIG < NBRE MAX DE CARTES A LIRE.
LB AIC < B=@MOT DE LA LIGNE COURANTE.
RBT 0+16 < RAZ DU BIT D'INDEX.
<
< LECTURE D'UNE CARTE :
<
E30: EQU $
LAD DEMCA
BSR ASVC < LECTURE 1 CARTE.
JANE E22 < ERREUR D'ASSIGNATION , VERS UN
< RETOUR AU CCI.
<
< CREATION DE LA LIGNE COURANTE
< A PARTIR DE LA CARTE LUE :
<
LAD BCARTE < A=@EMETTEUR=@BUFFER DE LECTURE
< DES CARTES ,
< B=@RECEPTEUR=@LIGNE COURANTE.
LR X,Y < SAVE X DANS Y.
LXI NBCAR/2 < X=NBRE DE MOTS A DEPLACER.
MOVE < CREATION DE LA LIGNE COURANTE.
LR Y,X < RESTAURE X.
<
< VISUALISATION DE LA LIGNE COURANTE :
<
LAD DEMOUT
BSR ASVCI < VISUALISATION CARTE LUE SI 'R'.
JGE E105 < ARRET POUR CTRL-X-OFF : LA
< DERNIERE CARTE LUE SERA REMISE
< A 'SPACE'.
<
< PASSAGE A LA LIGNE SUIVANTE :
<
ADRI NBCAR/2,B < PROGRESSION DE L'@MOT DE LA
< LIGNE COURANTE.
<
< TEST DE FIN D'ENTREE :
<
LA BCARTE < ACCES AUX 2 PREMIERS CARACTERES
< DU BUFFER D'ENTREE.
CP FINP < EST-CE L'INDICATEUR DE FIN ???
JE E101 < OUI , ON ARRETE LA ....
CP IPLUS < EST-CE UNE DEMANDE CREATION ITEM???
JE E200 < PEUT-ETRE ...
E201: EQU $ < RETOUR DES FAUSSES CREATION
< D'ITEM.
JDX E30 < PASSAGE A LA CARTE SUIVANTE.
<
< MISE A JOUR DE L'EN-TETE DE L'ITEM COURANT :
<
E102: EQU $
LXI IINDIC-LTN*2
LAI "T"
STBY &AIC < L'ITEM COURANT RECOIT LE
< TYPE 'TEXTE'.
LXI LRITEM-LTN
LA NCP
STA &AIC < LA LONGUEUR REELLE DU CORPS
< DE L'ITEM EST DE 35 LIGNES ....
CPZ RI < DISCRIMINATION 'I'/'R' ???
JNE E206 < CAS DE LA COMMANDE 'I' (RI=-1).
<
< CAS DE LA COMMANDE 'R' :
<
BR AE23 < VERS LE RETOUR DES FONCTIONS.
<
< CAS DE LA COMMANDE 'I' :
<
E206: EQU $
LAD DERASE
BSR ASVCI < EFFACEMENT DE L'ECRAN SI 'R'.
LAD ISGE < A=@EMETTEUR D'UN MESSAGE DESTINE
< A 'GI' POUR FAIRE UN 'IS'
< AUTOMATIQUE ET RETOUR A 'GE'.
LXI 4/2 < X=NBRE DE MOTS A DEPLACER.
JMP E205 < VERS LA PREPARATION DU RETOUR
< A'GI'.
<
< MISE A 'SPACE' DES DERNIERES LIGNES DE L'ITEM :
<
E101: EQU $
JDX E105 < SORTIE IMMEDIATE AU CAS OU
< L'INDICATEUR DE FIN SE TROUVAIT
< SUR LA DERNIERE LIGNE ....
JMP E102 < OK , '*/' SUR LA DERNIERE LIGNE.
E105: EQU $ < CAS OU IL Y A AU MOINS UNE
< LIGNE A METTRE A 'SPACE'.
LAI '20
SBT 2 < A='SPACE''SPACE'.
ADRI -1,B < B=@DE LA 1ERE LIGNE A METTRE
< A 'SPACE' -1 (POUR INDEXER
< PAR RAPPORT A 1).
<
< BOUCLE DE MISE A 'SPACE' DES LIGNES :
<
E104: EQU $
SBT 0+16 < BIT D'INDEX.
STB DEBLIG < DEBLIG=RELAI VERS LA
< LIGNE COURANTE.
LR X,Y < SAVE X DANS Y.
LXI NBCAR/2 < X=NBRE DE MOTS A METRE A 'SPACE'.
<
< BOUCLE DE MISE A 'SPACE' D'UNE LIGNE :
<
E103: EQU $
STA &DEBLIG
JDX E103
LR Y,X < RESTAURE X.
ADRI NBCAR/2,B < PASSAGE A LA LIGNE SUIVANTE.
JDX E104 < PASSAGE A LA LIGNE SUIVANTE.
JMP E102 < C'EST FINI ...
<
<
< C R E A T I O N N O M D ' I T E M :
<
<
E200: EQU $
LR X,A
CPI NBLIG < EST-CE LA 1ERE CARTE QUE
< L'ON LIT ???
JNE E201 < NON , CE N'EST DONC PAS UNE C
< CREATION DE NOM D'ITEM.
<
< CAS D'UNE 1ERE CARTE AVEC '*+' EN TETE :
<
LYI 2 < INDEX 1ER CARACTERE SUIVANT '*+'.
LXI NBCAR-2-2 < NBRE DE CARACTERES A TESTER
< SUR LA CRATE COURANTE.
<
< RECHERCHE D'UN ';' SUR LA CARTE :
<
E202: EQU $
XR X,Y < X=INDEX CARACTERE SUR LA CARTE.
LBY &AIC < A=CARACTERE COURANT.
ADRI 1,X < PASSAGE AU CARACTERE SUIVANT.
CPI ";" < EST-CE ';' (CARACTERE UTILISE
< COMME <EOT> PAR 'GI'.
JE E203 < OUI , C'EST BON.
XR X,Y < NON , POURSUIVONS LA RECHERCHE.
JDX E202 < CARACTERE SUIVANT ....
<
< CAS OU L'ON N'A PAS TROUVE DE ';' SUR LES PREMIERS CARACTERES :
<
LXI NBLIG-1 < RE-INITIALISATION DE X AVEC
< APSSAGE A LA CARTE SUIVANTE.
JMP E30 < VERS LA LECTURE DE LA CARTE
< SUIVANTE ('*+' IGNORE...).
<
< CAS OU ON A TROUVE UN ';' :
<
E203: EQU $
LBY &AIC < ACCES AU CARATERE SUIVANT.
CPI " " < EST-CE UN 'SPACE' ???
JNE E204 < NON , ON NE FAIT RIEN.
ADRI 1,X < OUI , PASSAGE AU CARACTERE
< SUIVANT.
LBY &AIC < ACCES CARACTERE SUIVANT.
CPI " " < EST-CE UN 'SPACE' ???
JNE E204 < NON , ON NE FAIT RIEN.
<
< CAS OU ON A TROUVE '; ' :
<
LAI "A"
STBY &AIC
ADRI -1,X
LAI "K"
STBY &AIC < ON GENERE ';KA' A LA PLACE
< DE '; ' RENCONTRE.
<
< GENERATION DE L'ITEM2 :
<
E204: EQU $
LR B,A
ADRI -NBCAR/2,A < A=@CORPS DE L'ITEM1.
LXI NBCAR/2 < X=NBRE DE MOTS A DEPLACER.
E205: EQU $ < ENTRY POUR LA COMMANDE 'I'.
LB AI2 < B=@CORPS DE L'ITEM2.
MOVE < GENERATION ITEM2.
<
< PREPRARTION DE L'APPEL DE 'GI' :
<
LAI "I"
STBY &AI2 < MISE DE 'I+' EN TETE DE L'ITEM2.
< (A LA PLACE DE '*+').
< (DANS LE CAS DE 'ISGE' LE 'I'
< RESTE UN 'I' ....).
<
< APPEL DE 'GI' :
<
E505: EQU $ < ENTRY POUR FIN DE 'SAVE'.
<
< MISE EN PLACE DU TYPE 'TEXTE' :
<
LXI IINDIC-LTN*2
LAI "T"
STBY &XAI2 < LE TYPE 'T' EST MIS POUR 'GI'
< QUI VALIDE L'ITEM2.
LA NGI
STA 0,W < LE NOM DE LA BRANCHE 'GI' EST
< MIS EN TETE DE LA BRANCHE
< DE L'OVERLAY.
BR AGOGE < VERS LE CHARGEMENT (ID. A 'GE').
PAGE
<
<
< V A L I D A T I O N I M P L A N T A T I O N :
<
<
X12: EQU ZERO+PILE-LTNI-LTNI < @ITEM2.
X10: VAL X12-$
ZEROV: EQU ZERO+X10 < ERREUR D'ASSEMBLAGE SI LE
< PROCESSEUR RECOUVRE L'ITEM2.
DZS X10+1
EOT #SIP GEN PROCESSEUR#
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.