<*********************************************************************** <* * <* * <* CE PROGRAMME PERMET DE COPIER OU D'EDITER DES * <* FICHIERS CARTES SUR DISQUE. * <* * <* LES COMMANDES SONT: * <* +LP : BASCULE L'UNITE DE SORTIE (VISU <--> LP1) * <* +BM : BASCULE L'UNITE DE SORTIE (VISU <--> MT1) * <* +CL : CHANGEMENT DU CARACTERE CLOCHE D'ERREUR... <* +CO 'N1' (N-M) 'N2' (P) : COPIER LE FICHIER N1 (DE N A M) * <* SUR LE FICHIER N2 (APRES P) * <* +ED 'N1' : EDITER LE FICHIER N1 * <* +FC 'N1''N2' : ENREGISTREMENT DE MODIFICATIONS PORTANT <* SUR LE FICHIER 'N1' DANS LE FICHIER 'N2' ; <* CE FICHIER 'N2' EST ENSUITE EXECUTABLE <* SOUS 'FI' POUR MODIFIER 'N1'... <* +KO 'N1' : COMPARER LE FICHIER N1 AU FICHIER DE TRAVAIL * <* +LI 'N1' (N-M) : LISTER LE FICHIER N1 (DE N A M) * <* +LN 'N1' (N-M) : IDEM AVEC NUMEROTATION * <* +PU 'N1' (N-M) : PUNCHER LE FICHIER N1 (DE N A M) * <* +PN 'N1' (N-M) : IDEM AVEC NUMEROTATION * <* +PC 'N1' : PUNCHER LE FICHIER N1 EN COMPACTE * <* CS(CARACTERE(N)) :LA CARTE COMPRENANT LE CARACTERE EN COLONNE N SERA <* CONSIDEREE PAR RL COMME LA SUITE DE LA CARTE <* PRECEDANTE.RL NE FERA LA RECHERCHE QUE SUR DES <* PREMIERES CARTES QUI SERONT ALORS EDITEES AVEC LEURS <* CARTES SUITE.N NON SPECIFIE SERA PRIS A 1. <* UNE REPONSE VIDE RETABLIT LE MODE NORMAL. <* +RL 'N1' (N-M) 'CH1','CH2',...,'CHN' AVEC <* 'CHI'='CHI1''CHI2'...'CHIM' <* LA VIRGULE "," ETANT L'OPERATEUR <* "OR", ET LA CONCATENATION, L'OPERA- <* TEUR "AND" ; CECI N'EST PAS UNE GROSSE <* CONTRAINTE, CAR "OR" ET "AND" SONT <* DISTRIBUTIFS L'UN PAR RAPPORT A L'AUTRE, <* ET TOUTE EXPRESSION LOGIQUE PEUT SE RAMENER <* A UNE SOMME ("OR") DE PRODUIT ("AND"). 'RL' <* PROCEDE A UNE RECHERCHE DE CHAINES DANS LE <* FICHIER 'N1' ENTRE LES LIGNES N ET M. <* ENFIN LORSQU'UNE CHAINE EST SUIVIE <* DU SIGNE "-", C'EST ALORS SON ABSENCE <* QUI EST RECHERCHEE ; "\" SERA UTILISE <* LORSQUE L'ON DESIRERA RECHERCHER "'"... <* +RC <MEME SYNTAXE> : FONCTION IDENTIQUE, MAIS AVEC <* COMPTAGE UNIQUEMENT. <* +DF 'N1' : DETRUIRE LE FICHIER N1 * <* +:F : FIN DE TRAITEMENT * <* +MF 'XX' : MODIFICATION DU ":F" PAR LES 2 PREMIERS * <* CARACTERES DE "XX" * <* +MC N : ARRETER LE PUNCH COMPACTE TOUTES LES (N) <* CARTES (128 IMPLICITEMENT). <* +JE N : DONNE LE NOMBRE D'ESPACES SITUES AU DEBUT DU <* MESSAGE A LAISSER INTACT ('JUSTD'). <* +JM N : DONNE LE NOMBRE D'ESPACES MANQUANT AU DELA DU <* QUEL ON NE FAIT RIEN ('JUSTM'). <* +JI N : DONNE LE NOMBRE DE CARACTERES A NE PAS TESTER <* AU DEBUT DU MESSAGE ('JUSTF'). <* +JP N : NOMBRE DE LIGNES PAR PAGE SUR 'NVPL' (0=PAS DE <* SAUT DE PAGE). <* +NJ : REINITIALISE LES PARAMETRES CI-DESSUS, TEL QUE <* LE LISTAGE NE JUSTIFIE PAS A DROITE... <* +MA N : PERMET DE RAZER L'ECRAN, PASSE EN 'ESC-8' SUR UN 4014, <* DESSINE LA MARGE DROITE (80 CARACTERES), PUIS FAIT <* HOME... <* +FI 'N1' (N-M) : EXECUTE LES DIRECTIVES D'EDITS * <* CONTENU DANS LE FICHIER N1 (DE N A M) * IF ORDI-"S",XWOR%,,XWOR% <* +Q1 : QUANTA=1 A L'ECRITURE DES FICHIERS. <* +Q3 : QUANTA=3 A L'ECRITURE DES FICHIERS. <* +AL<CARACTERE> : LE ALT-MODE EST REMPLACE PAR LE <* CARACTERE DONNE EN ARGUMENT ; UNE <* REPONSE VIDE RETABLIT LE ALT-MODE. XWOR%: VAL 0 <* +< : EDITION D'UN COMMENTAIRE. <* * <* SOUS "ED", LES COMMANDES SONT : * <* *MA : VOIR '+MA'... <* *CR : BASCULE L'UNITE D'ENTREE SUR CR1, * IF ORDI-"S",XWOR%,,XWOR% <* *C1 : IDENTIQUE A 'CR', <* *C2 : BASCULE SUR CR2. <* *MT : BASCULE SUR MT1. <* *AS : MODE LECTURE 'ASCI' (MODE IMPLICITE), <* *EB : MODE LECTURE 'EBCDIC' (PRATIQUE POUR 'MT1'). <* *CC : RETOUR TEMPORAIRE AU CCI. XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% <* *CS : IDEM ,MAIS RAPIDE EN SYMBOLIQUE * XWOR%: VAL 0 <* *IN N : INSERER CE QUI SUIT APRES LA CARTE N * <* *IF : INSERER A LA FIN DU FICHIER <* *RE N(-M) P : REMPLACER PAR CE QUI SUIT LA(LES) CARTE(S) * <* N (A M) (A PARTIR DE LA COLONNE P) * <* *SU N(-M) : SUPPRIMER LA(ES) CARTE(S) N(A M) * <* *CM : LES SEQUENCES DE CARTES SUIVANTES SONT EN COMPACTE * <* *NO : LES SEQUENCES DE CARTES SUIVANTES SONT NORMALES * <* *ME (N-M) 'CH1' 'CH2' : MODIFIER AVEC ECRASEMENT (DE N A M) * <* LES OCCURENCES DE "CH1" PAR "CH2" * <* *MD (N-M) 'CH1' 'CH2' : IDEM AVEC DEPLACEMENT * <* *NE... IDEM A 'ME', MAIS EN CONSERVANT 'CH1' ET 'CH2' COURANTES, <* *ND... IDEM A 'MD', MAIS EN CONSERVANT 'CH1' ET 'CH2' COURANTES, <* *RR (N-M) : MODIFICATION SUR LA LIGNE (DE N A M) * <* *:F : FIN D'EDITION * <* :F : TERMINE TOUTE SEQUENCE DE CARTES * <* POUR RENTRER LE CARACTERE EOT EN T-S, RENTRER CTL-F * <* * <* TOUT TRAITEMENT PEUT ETRE INTERROMPU PAR UN ALT-MODE * <* * <* * <*********************************************************************** IDP "EDITEUR DE FICHIERS CARTES" IDP "RELEASE 15-3 20/08/80" IDP "J-F COLONNA - B GUERIN - S SOUZEAU" IF ORDI-"T",X100,,X100 IDP "VERSION T1600" QUANTA: VAL 1 X100: VAL 0 IF ORDI-"S",X100,,X100 IDP "VERSION SOLAR" QUANTA: VAL 3 X100: VAL 0 YY7: VAL 1>7 YY8: VAL YY7*2 LBUFVI: VAL 40 < LONGUEUR BUFFER VISU NSPETA: VAL '74 OTODLN: VAL 8 NCHMAX: VAL 4 < NBRE MAX DE CHAINES POUR RL/RC SUR "AND". NOR: VAL 4 < NOMBRE MAX DE "OR" POUR RL/RC. NCARCH: VAL 20 < NBRE + 1 DE CARACTERES < AUTORISES PAR CHAINES PAGE <*********************************************************************** <* * <* NUMEROS D'UNITES UTILES A EDIT. * <* * <*********************************************************************** NVPI: VAL '01 < ENTREE NVPO: VAL '02 < SORTIE NVPC: VAL '07 < LECTEUR NVPL: VAL '07 < IMPRIMANTE NVPF: VAL '08 < FICHIER NVPT: VAL '09 < FICHIER NVPBID: VAL '0B < BIDON NVPFI: VAL '0A < FICHIER FI <*********************************************************************** <* * <* INTERFACE AVEC CMS4. * <* * <*********************************************************************** TABLE ZERO: EQU $ DZS '10 WORD DEBUT <*********************************************************************** <* * <* POINT D'ENTREE DU PROGRAMME. * <* * <*********************************************************************** WORD EDIT PROG DEBUT: EQU $ LRP L BR -1,L <*********************************************************************** <* * <* BUFFERS. * <* * <*********************************************************************** BUFCO: DZS '38 < BUFFER POUR NOM INTERNE BUFNM: EQU BUFCO+6 SGFIN: DZS YY7*QUANTA < BUFFER DE LECTURE DE FICHIER SGFIIN: DZS YY7*QUANTA < BUFFER LECTURE FICHIER FI ENTCFI: DZS LBUFVI+1 < BUFFER DECOMPACTATION FI ENTCOM: DZS LBUFVI+1 < BUFFER DE COMPACTION CARTE ENTBIN: DZS 80 < CARTE EN BINAIRE ETENDU BINAIR: EQU ENTBIN < CARTE EN BINAIRE COMPACTE DZS 10 < MARGE DE SECURITE POUR L'ECLATEMENT < BENSON (A CAUSE DE '6D --> '0D+'0A...). BBENS2: EQU ENTBIN < BUFFER DE RECEPTION DE L'ECLATEMENT < BENSON... A6D: WORD '6D < CRLF POUR LISTE < ET ARRET RECHERCHE BLANC CARTE: DZS LBUFVI*2 < ENTREE COMMANDE ET NON COMPACTEE BUFSOR: EQU CARTE-1 < BUFFER D'ECRITURE SGFOUT: DZS YY7*QUANTA < BUFFER DE SORTIE DE FICHIER PAGE <*********************************************************************** <* * <* TABLE DE CODAGE DES CARACTERES POUR LE PUNCH. * <* * <*********************************************************************** TABCOD: EQU $-'20+1 WORD '2121 < EOT 4(TRANSPOSE EN '1F) WORD '0000 < SPACE 20 WORD '4821 < ! 21 WORD '0061 < " 22 WORD '0421 < # 23 WORD '4421 < $ 24 WORD '2222 < % 25 WORD '8001 < & 26 WORD '0121 < ' 27 WORD '8121 < ( 28 WORD '4121 < ) 29 WORD '4222 < * 2A WORD '80A1 < + 2B WORD '2421 < , 2C WORD '4002 < - 2D WORD '8421 < . 2E WORD '3002 < / 2F WORD '2001 < 0 30 WORD '1001 < 1 31 WORD '0801 < 2 32 WORD '0401 < 3 33 WORD '0201 < 4 34 WORD '0101 < 5 35 WORD '0081 < 6 36 WORD '0041 < 7 37 WORD '0021 < 8 38 WORD '0011 < 9 39 WORD '0821 < : 3A WORD '40A1 < ; 3B WORD '8222 < < 3C WORD '00A1 < = 3D WORD '20A1 < > 3E WORD '2061 < ? 3F WORD '0222 < @ 40 WORD '9002 < A 41 WORD '8802 < B 42 WORD '8402 < C 43 WORD '8202 < D 44 WORD '8102 < E 45 WORD '8082 < F 46 WORD '8042 < G 47 WORD '8022 < H 48 WORD '8012 < I 49 WORD '5002 < J 4A WORD '4802 < K 4B WORD '4402 < L 4C WORD '4202 < M 4D WORD '4102 < N 4E WORD '4082 < O 4F WORD '4042 < P 50 WORD '4022 < Q 51 WORD '4012 < R 52 WORD '2802 < S 53 WORD '2402 < T 54 WORD '2202 < U 55 WORD '2102 < V 56 WORD '2082 < W 57 WORD '2042 < X 58 WORD '2022 < Y 59 WORD '2012 < Z 5A WORD 'C002 < CROC G 5B WORD '6002 < ANTI / 5C WORD 'A002 < CROC D 5D WORD '8062 < CHAPEAU 5E WORD '4062 < SOULIGN 5F FTBCOD: EQU $ PAGE <*********************************************************************** <* * <* MESSAGES D'ERREURS. * <* * <*********************************************************************** MK1: BYTE 11;'6D ASCI "IDENTIQUES" MK2: BYTE 43;'6D ASCI "*************** DIFFERENTS ***************" ERRSEQ: BYTE 19;'6D ASCI "ERREUR DE SEQUENCE" ERRCOM: BYTE 3;'6D ASCI "??" ERRFE: BYTE 38;'6D ASCI "NOM DE FICHIER ERRONNE OU CHAINE VIDE" ERRFC: BYTE 25;'6D ASCI "FICHIER FC PRE-EXISTANT!" ERRFI: BYTE 19;'6D ASCI "FICHIER INEXISTANT" ERRFI2: BYTE 20;'6D ASCI "COMMANDE FI SOUS FI" ERRFI3: BYTE 21;'6D ASCI "FICHIER FI INCOMPLET" ERRFI4: BYTE 23;'6D ASCI "??" DZS 10 ERRLIR: BYTE 49;'6D ASCI "ERREUR DE CHECKSUM OU DE NUMEROTATION : " ERRLI1: DZS 4 < NUMERO DE LIGNE ERRQUO: BYTE 17;'6D ASCI "MANQUE UNE QUOTE" ERRRLC: BYTE 16;'6D ASCI "TROP DE CHAINES" MESRC1: BYTE 23;'6D ASCI "NOMBRE DE LIGNES =" DZS 2 MCHAI1: BYTE 5;'6D ASCI "CH1=" MCHAI2: BYTE 5;'6D ASCI "CH2=" MPLA: BYTE 25;'6D ASCI "MANQUE D'ESPACE DISQUE !" PAGE <*********************************************************************** <* * <* CARTES "!ASSIGN". * <* * <*********************************************************************** MASSNT: ASCI "!ASSIGN " < !ASSIGN NVPT=N, BYTE NVPT='FA00('00FF;"=" ASCI "N," NOMTN: DZS 10 MASSTO: ASCI "!ASSIGN " BYTE NVPT='FA00('00FF;"=" ASCI "O," NOMOT: DZS 10 MASSOT: ASCI "!ASSIGN " < !ASSIGN NVPBID=O, BYTE NVPBID='FA00('00FF;"=" MASSD: ASCI "O," < "O," OU "D-" NOMTO: DZS 10 MASSRT: ASCI "!ASSIGN " < !ASSIGN NVPBID=R BYTE NVPBID='FA00('00FF;"=" BYTE "R";'04 MASSB: ASCI "!ASSIGN " < !ASSIGN X=CU1 BYTE NVPL='FA00('00FF;"=";"C";"U" N0CU: BYTE "1";'04 MASSOF: ASCI "!ASSIGN " < !ASSIGN NVPF=O, BYTE NVPF='FA00('00FF;"=" ASCI "O," NOMFO: DZS 10 MASSNF: ASCI "!ASSIGN " < !ASSIGN NVPF=N, BYTE NVPF='FA00('00FF;"=" ASCI "N," NOMFN: DZS 10 MASSSF: ASCI "!ASSIGN " < !ASSIGN NVPF=S BYTE NVPF='FA00('00FF;"=" BYTE "S";'04 MASSCR: ASCI "!ASSIGN " < !ASSIGN NVPC=CR1 BYTE NVPC='FA00('00FF;"=" MTCR: ASCI "CR" ADCR1: BYTE "1";'04 MASCRS: ASCI "!ASSIGN " < !ASSIGN NVPC=S BYTE NVPC='FA00('00FF;"=" BYTE "S";'04 MASSLP: ASCI "!ASSIGN " < !ASSIGN NVPL=LP1 BYTE NVPL='FA00('00FF;"=" MTLP: ASCI "LP" MTLP1: BYTE "1";'04 MCLF: ASCI "!ASSIGN " BYTE NVPF='FA00('00FF;"=";"S";'04 MCLT: ASCI "!ASSIGN " BYTE NVPT='FA00('00FF;"=";"S";'04 MCLL: ASCI "!ASSIGN " BYTE NVPL='FA00('00FF;"=";"S";'04 MCLC: ASCI "!ASSIGN " BYTE NVPC='FA00('00FF;"=";"S";'04 MCLB: ASCI "!ASSIGN " BYTE NVPBID='FA00('00FF;"=";"S";'04 MASSFI: ASCI "!ASSIGN " < !ASSIGN NVPFI = ,O BYTE NVPFI='FA00('00FF;"=" ASCI "O," NOMFI1: DZS 10 MCLFI: ASCI "!ASSIGN " < !ASSIGN NVPFI=S BYTE NVPFI='FA00('00FF;"=";"S";'04 PAGE <*********************************************************************** <* * <* COMMANDES. * <* * <*********************************************************************** LISCOM: ASCI "IN" ASCI "IF" ASCI "RE" ASCI "RR" ASCI "SU" ASCI "NE" ASCI "ND" ASCI "ME" ASCI "MD" ASCI "CM" ASCI "NO" ASCI "CR" IF ORDI-"S",XWOR%,,XWOR% ASCI "C1" ASCI "C2" ASCI "MT" COMEB: ASCI "EB" COMAS: ASCI "AS" ASCI "CC" XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% ASCI "CS" XWOR%: VAL 0 COMEND: EQU $ ASCI ":F" COMMA: ASCI "MA" COEDIT: EQU $ ASCI "MF" ASCI "MC" ASCI "JE" ASCI "JM" ASCI "JI" ASCI "NJ" ASCI "JP" ASCI "ED" ASCI "FC" ASCI "RL" ASCI "RC" ASCI "LN" ASCI "LI" ASCI "PC" ASCI "PN" ASCI "PU" ASCI "CO" ASCI "LP" ASCI "BM" ASCI "BE" ASCI "CL" ASCI "DF" ASCI "KO" ASCI "FI" IF ORDI-"S",XWOR%,,XWOR% ASCI "Q1" ASCI "Q3" ASCI "AL" ASCI "CS" XWOR%: VAL 0 ASCI "< " FINCOM: EQU $ TABCOM: WORD INSERE < ADRESSE DES COMMANDES WORD IFSERE WORD REMPLA WORD REMINS WORD SUPPRI WORD MODIFI WORD MODIFI WORD MODIFI WORD MODIFI NEUT1: WORD COMPAC WORD NORMAL NEUT2: WORD READER IF ORDI-"S",XWOR%,,XWOR% NEUT3: WORD READE1 NEUT4: WORD READE2 NEUT5: WORD MTAPE WORD MODEE WORD MODEA WORD GOCCI XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% WORD LECTE XWOR%: VAL 0 WORD FIN WORD MARGE WORD MODFIN WORD MODCA WORD JUSTID WORD JUSTIM WORD JUSTIF WORD JUSTIN WORD JUSTIP WORD EDITER WORD FICOM WORD RECHER WORD COMPTE WORD LISTER WORD LISTER NEUT6: WORD PUNCHE NEUT7: WORD PUNCHE NEUT8: WORD PUNCHE WORD COPY NEUT9: WORD PRINLP NEUTA: WORD PRINMT NEUTB: WORD PRINBE WORD CLOCHT WORD DELF WORD KOMP WORD EXECFI IF ORDI-"S",XWOR%,,XWOR% WORD EXEQ1 WORD EXEQ3 WORD MODALT WORD CSUITE XWOR%: VAL 0 WORD EXECOM FINADC: EQU $ NMFICH: DZS 10 < NOM DES FICHIERS NOMTIC: DZS 10 NOMFI: DZS 10 < ZONE PROPRE A FI MESRC2: DZS 2 < NOMBRE A EDITER (<10000) CHAI1: DZS 40 < CHAINE RECHERCHEE POUR 'ME' ET 'MD'. BYTE '04;0 CHAI2: DZS 40 < CHAINE DE REMPLACEMENT POUR 'ME'/'MD'. BYTE '04;0 LARGRL: VAL NCHMAX*NCARCH/2+1 < LONGUEUR SAUVEGARDE CHAINES SOUS "AND". ARGRL: EQU $ < SAUVEGARDE DES ARGUMENTS RL/RC. DO NOR DZS LARGRL < UNE ZONE PAR "OR" POSSIBLE. PAGE <*********************************************************************** <* * <* COMMON. * <* * <*********************************************************************** COMMON DEBCOM: EQU $ < DEBUT DU COMMON RETCCI: WORD 1 < RETOUR MONITEUR SSEDIT: DZS 1 < SOUS-EDIT COMNOR: DZS 1 < INDICATEUR COMPACTE-NORMAL NOCAR: DZS 1 < N0 CARTE EN EDIT PAFIRC:: VAL -1 < INDICATEUR DE 'FIRCAR' VIDE... FIRCAR: WORD PAFIRC < PREMIERE CARTE RENCONTREE LORS D'UNE < COMMANDE "LN", "LI",... ET SURTOUT "RL". LASCAR: WORD 0 < DE MEME DERNIERE CARTE... CR1: DZS 1 < LECTEUR LP1: DZS 1 < IMPRIMANTE MODIF: DZS 1 < PAS DE MODIF. EFFECTUEE LSRE: DZS 1 < INDICATEUR DE RECHERCHE REBM: DZS 1 < INDICATEUR DE CHAINE NBCHA: DZS 1 < NOMBRE DE CHAINES LLCH1: WORD 0 < LONGUEUR CHAINE 1 POUR 'ME'/'MD'. LLCH2: WORD 0 < LONGUEUR CHAINE 2 POUR 'ME'/'MD'. DPF: ASCI ":F" < RETOUR AU ":F" LSPF: DZS 1 < LISTE OU PERFORATION LISNO: DZS 1 < LISTE AVEC NUMEROTATION BATCH: WORD 1 < ENTREE EN BATCH N: DZS 1 M: DZS 1 P: DZS 1 < P UTILP: DZS 1 < UTILISATION DE P DIX: WORD 10 < POUR LA CONVERSION DES NOMBRES SETFFF: WORD '7FFF < VALEUR POUR M ET P SI ABSENTS NOLIST: DZS 4 < NUMEROTATION DES CARTES PLACT: DZS 1 < PLACE DANS SGFOUT INDIN: DZS 1 < INDEX IN TNOM: ASCI "??ED" IDESC: BYTE 0;'04 PUCCOM: DZS 1 < PUNCH COMPACTE NOCCP: DZS 1 < NO CARTE COMPACTEE CHEKSM: DZS 1 < CHECKSUM POUR PUNCH COMPACTE CRLF: BYTE '6D;"+" < CRLF CRLFPL: BYTE '6D;"+" < CRLF-PLUS CRLFET: BYTE '6D;"*" < CRLF-ETOILE CRLFSU: BYTE '6D;">" < CRLF SUP BLANC: WORD '2020 < BLANCS DEUXPT: WORD '0820 < CODE PUNCH : CARACF: WORD '8080 < CODE PUNCH F RETOUR: WORD '0D20 < RETOUR A LA LIGNE B6D: BYTE '6D;0 < POUR ENVOYER '6D... SAUVX: DZS 1 < ZONE SAUVEGARDE POUR RL/RC LUTBUF: WORD YY8*QUANTA-2 < LONGUEUR UTILE BUFFER FICHIER PAGE <*********************************************************************** <* * <* OPEN, CLOSE, READ, WRITE SUR FICHIERS. * <* * <*********************************************************************** OPENOT: BYTE NVPT;'05 < OPEN OLD FICHIER TRAVAIL. WORD 2 WORD 0 OPENTN: BYTE NVPT;'04 < OPEN NVPT NEW WORD 2 WORD 0 OPENFO: BYTE NVPF;'05 < OPEN NVPF OLD WORD 2 WORD 0 OPENFN: BYTE NVPF;'04 < OPEN NVPF NEW WORD 2 WORD 0 READF: BYTE NVPF;'08 < LECTURE SUR NVPF WORD 0 WORD YY8*QUANTA READOT: BYTE NVPT;'08 < LECTURE FICHIER DE TRAVAIL. WORD SGFOUT-ZERO*2 WORD YY8*QUANTA WRITET: BYTE NVPT;'02 < ECRITURE SUR NVPT WORD 0 WORD YY8*QUANTA LECENT: BYTE NVPI;'01 < LECTURE COMMANDE ET NORMAL WORD CARTE-ZERO*2 WORD LBUFVI*2 LCHAI1: BYTE NVPI;'01 < LECTURE DE LA CHAINE RECHERCHEE. WORD CHAI1-ZERO*2 WORD 80 LCHAI2: BYTE NVPI;'01 < LECTURE DE LA CHAINE DE REMPLACEMENT. WORD CHAI2-ZERO*2 WORD 80 LECCOM: BYTE NVPI;'08 < LECTURE EN COMPACTE WORD ENTBIN-ZERO*2 WORD 160 LECPPC: BYTE NVPI;'01 < LECTURE D'UN CARACTERE WORD SGFOUT-ZERO*2 < POUR LE PUNCH COMPACTE WORD 1 ECRERR: BYTE NVPO;'02 < ECRITURE ERREURS SUR NVPO DZS 2 WRITEO: BYTE NVPO;'02 < ECRITURE SUR NVPO WORD BUFSOR-ZERO*2+1 WORD LBUFVI*2+1 ECCRLF: BYTE NVPO;'02 < DEMANDE D'UNE COMMANDE WORD CRLF-ZERO*2 WORD 2 DEM6D: BYTE NVPO;'02 < SORTIE D'UN '6D... WORD B6D-ZERO*2 WORD 1 DEMDFT: WORD '8302 < DELETE DE NVPT WORD NOMTO-ZERO*2 WORD 38 < LG MAX WORD -1 CCII: WORD '0002 < CCI INTERPRETATIF WORD 0 WORD 80 LECVIS: BYTE NVPI;'0A < BOTCH OU VISU WORD 0 WORD 1 DEMPCH: BYTE NVPL;'02 < PUNCH DE UN CARACTERE DZS 1 WORD 2 SLEEP: WORD '0005 < TEMPORISATION PUNCH 4 SECONDES ENFILE: WORD 0 < FIN DE FICHIER DZS 1 DEMSGF: WORD '0008 < DEMANDE NOM INTERNE WORD BUFCO-ZERO*2 WORD '38*2 WORD 0 DEMCOP: WORD '8402 < STORE D'UN NOM WORD BUFNM-ZERO*2 WORD '38-6*2 WORD -1 ABUFNM: WORD BUFNM LGENT: DZS 1 < POUR COMMANDE CS PAGE <*********************************************************************** <* * <* RELAIS. * <* * <*********************************************************************** DELT: WORD SPDELT < SP DE DELETE FILE NVPT RNOM: WORD SPRNOM < SP DE RELEVE D'UN NOM DE FICHIER RCAR: WORD SPRCAR < SP DE RELEVE D'UNE CHAINE DE CAR DEP: WORD SPDEP < SP DE DEPLACEMENT SUR UNE LIGNE MOVT: WORD SPMOVT < SP DE MOVE NOM DANS ASSIGN NVPT MOVF: WORD SPMOVF < SP DE MOVE NOM DANS ASSIGN NVPF OPTN: WORD SPOPTN < SP DE OPEN NVPT NEW OPTO: WORD SPOPTO < SP DE OPEN NVPT OLD OPFO: WORD SPOPFO < SP DE OPEN NVPF OLD OPFN: WORD SPOPFN < SP DE OPEN NVPF NEW OPFX: WORD SPOPFX < SP DE OPEN NVPF OLD OU NEW DECO: WORD SPDECO < SP DE DECOMPACTION COMP: WORD SPCOMP < SP DE COMPACTION AWRITE: WORD WRITE < SP D'ECRITURE SGF. PLCO: WORD SPPLCO < SP DE PLACEMENT D'UN CARAC. COMP. AMINUS: WORD MINUS < TRAITEMENT DES MINUSCULES... LIST: WORD SPLIST < SP DE LISTE D'UNE CARTE PERF: WORD SPPERF < SP DE PUNCH D'UNE CARTE RECN: WORD SPRECN < SP DE RECOPIE JUSQU'A N SUNM: WORD SPSUNM < SP DE SUPPRESSION DE N A M AJOU: WORD SPAJOU < SP D'AJOUT APRES CARTE COURANTE AJCK: WORD SPAJCK < SP DE CHECKSUM POUR COMPACTE RENI: WORD SPRENI < SP DE LIBERATION LECTEUR LINM: WORD SPLINM < SP LECTURE N ET M SI PRESENTS RCOP: WORD SPRCOP < SP DE RECOPIE DE W CARTES RLIR: WORD SPRLIR < SP DE LECTURE JUSQU'A N POSB: WORD SPPOSB < SP POSIT. @ BUFFERS RELN: WORD SPRELN < SP DE RELEVE DE N RE1N: WORD SPRE1N < IDEM POUR INSERER RELM: WORD SPRELM < SP DE RELEVE DE M LECF: WORD SPLECF < SP DE LECTURE SUR NVPF (ERREUR) RLCT: WORD SPRLCT < SP DE LECTURE SUR SGF ECRT: WORD SPECRT < SP D'ECRITURE SUR NVPT ININ: WORD SPININ < SP D'INITIALISATION NUMEROTATION INCN: WORD SPINCN < SP D'INCREMENTATION NUMEROTATION NOMB: WORD SPNOMB < SP DE RELEVE D'UN NOMBRE AVEC PRISE < PAR DEFAUT DU NOMBRE PRECEDENT... NOMC: WORD SPNOMC < RELEVE D'UN NOMBRE AVEC PRISE DE 0 < PAR DEFAUT... LECB: WORD SPLECB < SP DE LECTURE UN BYTE NMPC: WORD SPNMPC < SP DE NUMEROTATION ET PUNCH PUPC: WORD SPPUPC < OBLIGE LE PUNCH EXFI: WORD SPEXFI < SP D'EXECUTION DE FI PUPU: WORD PUPUCO < PUNCH SANS NUMEROTATION ASPCCI: WORD SPCCI < SP APPEL CCI INTERPRETATIF MERR: WORD MSGERR < SP DE TRAITEMENT D'ERREURS APRINT: WORD PRINT < EDITION D'UN MESSAGE. AFINMD: WORD FINMOD < FIN DU EDIT ADCOM: WORD COMMAN < AD. DE RELEVE D'UNE COMMANDE ADNOLS: WORD NOLIST,X < RELAI VERS NOLIST ABFSGI: WORD SGFIN ABSGII: WORD SGFIN+1,X ABFSGO: WORD SGFOUT ABSGOF: WORD YY7*QUANTA+SGFOUT,X XCHAI1: WORD CHAI1,X XCHAI2: WORD CHAI2,X ABFEN0: WORD CARTE < POINTEURS SUR LES BUFFERS ADBFEN: WORD CARTE+LBUFVI,X ABFECO: WORD ENTCOM ADBFCO: WORD ENTCOM,X ABFSO0: EQU ABFEN0 AA6D: WORD A6D < POUR ECHANGER '6D ET '20... ABFSO1: WORD BUFSOR+1 ABFSO4: WORD BUFSOR+4 ABFSO5: WORD BUFSOR+5 ABINED: WORD ENTBIN ABINEN: WORD ENTBIN+76,X ABINEF: WORD ENTBIN+80,X ABINPC: WORD ENTBIN+40,X ABINAR: WORD BINAIR+57,X ACOD: WORD TABCOD,X AMK1: WORD MK1 AMK2: WORD MK2 ADRSEQ: WORD ERRSEQ < ADRESSE MESSAGES ERREUR ADRCOM: WORD ERRCOM ADRFE: WORD ERRFE ADRFI: WORD ERRFI ADRLIR: WORD ERRLIR ADRLI1: WORD ERRLI1 ADRQUO: WORD ERRQUO ADRRLC: WORD ERRRLC ADRRC1: WORD MESRC1 ACHAI1: WORD MCHAI1 ACHAI2: WORD MCHAI2 AMPLA: WORD MPLA ANOMTO: WORD NOMTO < NOM FICHIER NVPT ANOMTN: WORD NOMTN ANOMOT: WORD NOMOT ANOMFO: WORD NOMFO < NOM FICHIER NVPF ANOMFN: WORD NOMFN AASSNT: WORD MASSNT < MESSAGE AU CCI AASSTO: WORD MASSTO AASSOT: WORD MASSOT AASSRT: WORD MASSRT AASSB: WORD MASSB AASSOF: WORD MASSOF AASSNF: WORD MASSNF AASSSF: WORD MASSSF AASSCR: WORD MASSCR AASCRS: WORD MASCRS AASSLP: WORD MASSLP ACLOSE: WORD CLOSE < S/P DE CLOSE NVPC/NVPL/NVPF/NVPT. ACLL: WORD MCLL ACLC: WORD MCLC ACLF: WORD MCLF ACLT: WORD MCLT ACLB: WORD MCLB AN0CU: WORD N0CU COMNB: VAL FINCOM-LISCOM < NB COMMANDE NBCOM: VAL -COMNB NEDNB: VAL FINCOM-COMEND < NB COMMANDES NON SOUS EDIT NBNED: VAL -NEDNB SEDNB: VAL FINCOM-COEDIT < NB COMMANDES SOUS EDIT NBSED: VAL -SEDNB ALISCO: WORD FINCOM,X < RELAI VERS LES COMMANDES AADCOM: WORD FINADC,X < RELAI VERS LES ADRESSES ACMEND: WORD COMEND ANMFIC: WORD NMFICH,X ANOMFI: WORD NOMFI,X ANMFID: WORD NMFICH ANMTID: WORD NOMTIC ANMTIC: WORD NOMTIC,X ARC2: WORD MESRC2,X ABENS1: WORD 0 < RELAI VERS LE BUFFER EMETTEUR D'ECLATE- < MENT BENSON, ABENS2: WORD BBENS2,X < ET BUFFER RECEPTEUR... ABUFCL: WORD 0 < RELAI DE CLEAR D'UN BUFFER... < < CONSTANTES DE RETOUR A L'ASSEMBLEUR : < ACCCI: WORD '0007 < ADRESSE DE LA FONCTION D'APPEL 'CCI'. ALOAD: WORD '0008 < ENTRY POINT DU MODULE DE CHARGEMENT < DES OVERLAYS (CELUI DE !CALL). AJNE: WORD '0009 < ADRESSE DU 'JNE $' IMPLEMENTE PAR !CALL. ALAI: WORD '000A < ADRESSE DU 'LAI 7', ASVC: WORD '000B < ADRESSE DU 'SVC 0'. LAILAI: WORD '1007 < 'LAI 7', SVCSVC: WORD '1C00 < 'SVC 0', RSRRSR: WORD '1E02 < 'RSR'. DITEM: VAL '000C < ADRESSE DE CHARGEMENT DES PROCESSEURS. NOMA: ASCI "ASSY" < NOM DU MODULE EN RETOUR DE BYTE 0;'04 < L'ASSEMBLEUR; L'OCTET A 0 CONTIEN- < DRA L'<IDESC> DE L'UTILISATEUR. LOADA: WORD '8502 < DEMANDE DE RAPPEL DE L'ASSEMBLEUR. WORD DITEM*2 WORD SIZED < IL SUFFIT DE RECHARGER LA MEME TAILLE < TAILLE QUE 'EDITS', MAIS LEGEREMENT < MAJOREE (PUISQUE CALCULEE A PARTIR < DE 'ZERO'...). WORD -1 PAGE <*********************************************************************** <* * <* LOCAL * <* * <*********************************************************************** LOCAL DEBLOC: EQU $ RIDGE: WORD 1 < VA-T'ON GENERER DES BANDES POUR < TRANSFERER AU RIDGE : < =0 : NON, < #0 : OUI, IL FAUT ALORS RAJOUTER EN < QUEUE DE LIGNE UN <LINE-FEED>, ET < NE PAS CALCULER LA PARITE... OPENFI: BYTE NVPFI;'05 < OPEN NVPFI OLD WORD 2 WORD 0 READFI: BYTE NVPFI;'08 < LECTURE SUR NVPFI WORD 0 WORD YY8*QUANTA ANOMF1: WORD NOMFI1 < RELAI VERS !ASSIGN ANOMFX: WORD NOMFI1,X ABFFII: WORD SGFIIN < RELAI BUFFER LECTURE FICHIER FI ASGFII: WORD SGFIIN+1,X ADECFI: WORD ENTCFI,X < RELAI BUFFER DECOMPACTAGE FICHIER FI AASSFI: WORD MASSFI < RELAI VERS !ASSIGN NVPFI=O, ACLFI: WORD MCLFI < RELAI VERS !ASSIGN NVPFI=S ADRFI2: WORD ERRFI2 < RELAI MESSAGE ERREUR FI ADRFI3: WORD ERRFI3 ADRFI4: WORD ERRFI4 INDFI: WORD 0 < INDICATEUR FI INDIFI: DZS 1 < INDICATEUR FIN DE SECTEUR FICHIER FI ENDFI: WORD 0 < INDICATEUR FIN DE FICHIER FI NCARFI: DZS 1 < NUMERO DE CARTE FI NFI: WORD 0 < N POUR FI MFI: WORD 0 < M POUR FI VATRA1: DZS 1 < VARIABLE DE TRAVAIL (L) VATRA2: DZS 1 < SAUVEGARDE VATRA1 VATRA3: DZS 1 NPREC: WORD 0 < NOMBRE RECONNU PRECEDEMMENT : < - REMIS A 0 PAR CHAQUE APPEL 'SPRNOM', < - MIS A JOUR A CHAQUE APPEL 'SPNOMB'. INDED: WORD 0 < 0 : ON EST SOUS 'ED', < 1 : ON EST SOUS 'FC'. NOMED: WORD "ED" < POUR REMPLACER 'FC' PAR 'ED'. TRAV1: WORD 0 < MOT DE TRAVAIL... AERRFC: WORD ERRFC < "FICHIER FC PRE-EXISTANT!". IF ORDI-"S",XWOR%,,XWOR% XWOR%1: VAL 1 < CONSTANTE DE TEMPORISATION EN < UNITE 2 MICRO-SECONDES. DEMPCK: BYTE NVPL;'02 < DEMANDE DE PUNCH D'UNE CARTE BINAIRE. WORD 0 WORD 80*2 CTPUSY: WORD XWOR%1 < TEMPORISATION PUNCH SYMBOLIQUE. AADCR1: WORD ADCR1 < POUR CHANGER DE LECTEUR DE CARTES. AMTCR: WORD MTCR < POUR COMMUTER MT <--> CR : ACR: ASCI "CR" < CR1 OU CR2, AMT: ASCI "MT" < MT1. ACU: WORD "CU" < CU2. AMTLP: WORD MTLP < POUR COMMUTER MT <--> LP : AMTLP1: WORD MTLP1 ALP: ASCI "LP" < LP1. CARALT: BYTE '7D < CARACTERE ALT-MODE INITIAL (AU CHARGE- < MENT; IL POURRA ENSUITE ETRE CHANGE < EN UTILISANT LA COMMANDE ADEQUATE). TAPEMK: BYTE NVPL;'04 < ECRITURE D'UN TAPE-MARK... ABFSOR: WORD BUFSOR+1,X PCLOSE: ASCI "!CLOSE" BYTE '04;0 CLOCHE: WORD '07 < CARACTERE D'ERREUR INSERE DANS UN < BUFFER A LA PLACE DE CARACTERES < INCONNUS... ADEM6D: WORD DEM6D XWOR%: VAL 0 NUMCA: WORD YY7 < NOMBRE DE CARTES COMPACTEES ENTRE < CHAQUE PAUSE LORS D'UN 'PC'. TARGRL: EQU $ < CONTEXTES DE CHACUN DES "OR". XARGRL: MOT 0 < RELAI INDEXE COURANT, NCHRL: MOT XARGRL+1 < NOMBRE DE "AND" PAR "OR". DO NOR WORD 0='F800*LARGRL+ARGRL,X;0 MARGRL: WORD 0 < NOMBRE DE "OR" A RECHERCHER, NARGRL: WORD 0 < DECOMPTEUR DE "OR" POUR CHAQUE CARTE. RARGRL: WORD TARGRL < POUR INITIALISER 'W'. NEGATE: WORD 0 < 0=RECHERCHE PRESENCE D'UNE CHAINE, < 1=RECHERCHE ABSENCE D'UNE CHAINE. SAVEX: WORD 0 < SAUVEGARDE DU REGISTRE X DE 'EOT'. JUSTM: WORD 2*LBUFVI < MARGE : S'IL Y A PLUS DE (JUSTM) ESPACES < MANQUANT, ON NE FAIT RIEN... JUSTS: WORD 0 < VARIABLE DE MANOEUVRE... JUSTD: WORD 2*LBUFVI < NOMBRE D'ESPACES A LAISSER INTACTS < EN TETE DE CHAQUE MESSAGE. JUSTF: WORD -2*LBUFVI < DONNE L'INDEX DU DERNIER CARACTERE A < TESTER : 2*LBUFVI<=JUSTF<=-1. JUSTP: WORD 0 < 0=PAS DE SAUT DE PAGE, < N=N LIGNES PAR PAGE. KJUSTP: WORD 0 < DECOMPTEUR DES LIGNES PAR PAGE. BUFP: BYTE '0D;'40 < POUR FAIRE LE SAUT DE PAGE... DEMP: BYTE NVPL;'02 < LE SAUT DE PAGE N'EXISTE QUE SUR 'NVPL'. WORD BUFP-ZERO*2 WORD 2 ACOMMA: WORD COMMA ACOMEB: WORD COMEB ACOMAS: WORD COMAS DERASE: BYTE NVPO;'05 < EFFACEMENT DE L'ECRAN. BHOME: BYTE '60;0 DHOME: BYTE NVPO;'02 < ENVOI HOME DU CURSEUR. WORD BHOME-ZERO*2 WORD 1 DOG: BYTE NVPO;'03 < MISE EN GRAPHIQUE. DCG: BYTE NVPO;'04 < RETOUR EN ALPHANUMERIQUE. XWOR%2: VAL 108 XWOR%3: VAL 14 XWOR%1: VAL 2*LBUFVI+1*XWOR%2/XWOR%3 C108: WORD XWOR%2 < POUR LA LARGEUR C14: WORD XWOR%3 < TOTALE D'UN CARACTERE. BUFG: WORD 767;XWOR%1 WORD 0;XWOR%1 DWG: BYTE NVPO;'0A < TRACE DE LA MARGE DROITE. WORD BUFG-ZERO*2 WORD 4*2 DESC: BYTE NVPO;'07 < MISE EN 'ESC;'. BYTE '1B;";";'04;0 IF ORDI-"S",XWOR%,,XWOR% AMASSD: WORD MASSD < POUR METTRE "O," OU "D-" : XASSO: ASCI "O," XASSD: ASCI "D-" CARSUI: WORD 0 COLSUI: WORD 0 FLASUI: WORD 0 < < TRANSCODEAGE EBCDIC --> ASCI : < FIRSTE:: VAL '40 < PREMIER CARACTERE EBCDIC RECONNU. MODE: WORD 0 < MODE=0 : LECTURE ASCI, < =1 : LECTURE EBCDIC --> ASCI. ATRANS: WORD TRANS,X < RELAI VERS LA TABLE DE TRANSCODAGE : XWOR%1: VAL FIRSTE/2 TRANS: EQU $-XWOR%1 UNDEFA:: VAL '00 < CARACTERE ASCI UNDEFINI... ASCI " ABCDEFGHI" BYTE UNDEFA;".";"<";"(";"+";UNDEFA UNDEFE:: VAL $-TRANS*2-1 < CARACTERE EBCDIC UNDEFINI... ASCI "&JKLMNOPQR!$*)" BYTE ";";UNDEFA ASCI "-/STUVWXYZ" BYTE UNDEFA;",";'25;UNDEFA ASCI ">?0123456789:#" BYTE '40;"'";"=";'22 LASTE:: VAL $-TRANS*2-1 < DERNIER CARACTERE EBCDIC... XWOR%: VAL 0 < < SIMULATION DES LECTURES/ECRITURES 'NVPI'/'NVPO' : < XSIML: WORD 1 < INDEX DU BUFFER DE SIMULATION DE < LECTURE; LE 1ER OCTET CONTIENT LA < DEFINITION DU CARACTERE EQUIVALENT < AU 'R/C'... XSIME: WORD 0 < INDEX DU BUFFER DE SIMULATION < D'ECRITURE. ASIML: WORD 0 < RELAI INDEX BUFFER DE LECTURE. ASIME: WORD 0 < RELAI INDEX BUFFER D'ECRITURE. BSIML: VAL 1 < ADRESSE DU MOT TRANSMETTANT < L'ADRESSE DU BUFFER DE LECTURE. BSIME: VAL 2 < ADRESSE DU MOT TRANSMETTANT < L'ADRESSE DU BUFFER D'ECRITURE. ALSIM: WORD 0 < ADRESSE DU MOT DONNANT LA LONGUEUR < DE CHACUN DES BUFFERS ; SI CETTE < LONGUEUR EST NULLE, ALORS, LES < ENTREES-SORTIES NE SONT PAS SIMULEES. ABUF: WORD 0 < RELAI VERS LE BUFFER D'E/S. SIMLIM: WORD 0 < CARACTERE EQUIVALENT AU 'R/C'. SIMBOX: WORD 0 < POUR SIMULER '1E35... ASPSIM: WORD SPSIM < SOUS-PROGRAMME DE SIMULATION... ASPSMC: WORD SPSIMC < RELAI... ASPBOX: WORD SPBOX < DONNE LE NOMBRE DE CARACTERES LUS. < < NEUTRALISATION DE CERTAINES < COMMANDES EN INTERPRETATIF : < ANEUT1: WORD NEUT1 < "CM", ANEUT2: WORD NEUT2 < "CR", ANEUT3: WORD NEUT3 < "C1", ANEUT4: WORD NEUT4 < "C2", ANEUT5: WORD NEUT5 < "MT", ANEUT6: WORD NEUT6 < "PC", ANEUT7: WORD NEUT7 < "PN", ANEUT8: WORD NEUT8 < "PU", ANEUT9: WORD NEUT9 < "LP", ANEUTA: WORD NEUTA < "BM", ANEUTB: WORD NEUTB < "BE". < < PILE DE TRAVAIL : < KSTORE: DZS 10 < PILE POUR K PAGE <*********************************************************************** <* * <* INITIALISATIONS DU PROGRAMME. * <* * <*********************************************************************** PROG WORD ALTMOD WORD KSTORE-1 WORD DEBCOM+YY7 WORD DEBLOC+YY7 EDIT: EQU $ LRP K < INITIALISATION DE C ET K, PLR A,B,C,L,W LR B,K < DU ALT-MODE WORD '1EB5 LAI '85 < LA DEMANDE 'LOADA' EST MISE STBY LOADA < A PRIORI EN 'LOAD-NAME'. STZ INDED < ON NE SAIT JAMAIS (ALT-MODE...). <*********************************************************************** <* * <* RELEVER IDESC. * <* * <*********************************************************************** WORD '1E45 < ACTD - IDESC ORI '30 STBY IDESC STBY NOMA+2 < MISE A JOUR DU NOM DE L'ASSEMBLEUR LAD TNOM BSR DELT < DESTRUCTION A PRIORI DU FICHIER DE < TRAVAIL... <*********************************************************************** <* * <* BATCH OU TIME-SHARING? * <* * <*********************************************************************** STZ BATCH IC BATCH < BATCH=1 A PRIORI (BATCH). LAD LECVIS < VISU OU CARTE? SVC 0 LR X,A CPI '03 JNE PALCIM DC BATCH < TS : BATCH=-1 ; BATCH : BATCH=0. <*********************************************************************** <* * <* PAS DE LECTEUR/IMPRIMANTE. * <* * <*********************************************************************** PALCIM: EQU $ LAI NVPO STBY ECCRLF < RESTAURATION A PRIORI... LRM A WORD BUFSOR-ZERO*2+1 STA WRITEO+1 STZ CR1 STZ LP1 < < INITIALISATION DES EVENTUELLES SIMULATIONS : < LB &ALSIM CPZR B JLE SIM1 < LA LONGUEUR DES BUFFERS ETANT NEGATIVE < OU NULLE, ON NE SIMULE PAS... EORR W,W < POUR BASER LE 'ZERO' DU PROGRAMME. LA BSIML,W < ADRESSE DU BUFFER DE LECTURE. SBT 0 < INDEXATION... STA ASIML < RELAI DU BUFFER DE LECTURE. LA BSIME,W < ADRESSE DU BUFFER D'ECRITURE. SBT 0 < INDEXATION... STA ASIME < RELAI DU BUFFER D'ECRITURE. LXI 0 LBY &ASIML < ACCES AU 1ER OCTET DU BUFFER DE < LECTURE, STA SIMLIM < IL DONNE L'EQUIVALENT DU 'R/C'. LAI " " SIM2: EQU $ STBY &ASIME < NETTOYAGE DU BUFFER D'ECRITURE. ADRI 1,X ADRI -1,B CPZR B < EST-CE FINI ??? JG SIM2 < NON... LRM A BYTE " ";'0D < (A)=CARTE AU 'CCI' DU TYPE "!GO"... STA PCLOSE < NEUTRALISATION DE "!CLOSE", STA &ACLL < DU CLOSE DE 'NVPL', STA &ACLC < ET DU CLOSE DE 'NVPC'... LA ADCOM < NEUTRALISATION DES COMMANDES : STA &ANEUT1 < "CM", STA &ANEUT2 < "CR", STA &ANEUT3 < "C1", STA &ANEUT4 < "C2", STA &ANEUT5 < "MT", STA &ANEUT6 < "PC", STA &ANEUT7 < "PN", STA &ANEUT8 < "PU", STA &ANEUT9 < "LP", STA &ANEUTA < "BM", STA &ANEUTB < "BE". SIM1: EQU $ LAD PCLOSE BSR ASPCCI < "!CLOSE" GENERAL"... PAGE <*********************************************************************** <* * <* RELEVER UNE COMMANDE. * <* * <*********************************************************************** COMMAN: EQU $ STZ UTILP < PAS D'UTILISATION DE P A PRIORI STZ LSRE < PAS RL OU RC A PRIORI LAI " " < METTRE LA LIGNE A BLANC LXI -LBUFVI*2 STBY &ADBFEN JIX $-1 CPZ INDFI < SOUS FI? JE COMAN1 < NON BSR EXFI < OUI,LIRE UNE LIGNE FICHIER FI CPZ ENDFI < FIN DE FICHIER FI? JE ENTBON < NON LA CRLF CP CRLFPL < = + ? JE COMAN1 < OUI LA CRLFPL < NON ERREUR STA CRLF < RESTAURATION DU + BSR ACLOSE < FERMETURE FICHIERS LA ACLFI BSR ASPCCI < FERMETURE FICHIER FI STZ SSEDIT STZ CR1 LA ADRFI3 BR MERR COMAN1: EQU $ LAD ECCRLF BSR ASPSIM LAI LBUFVI*2 < LG ENTREE NORMALE STA LECENT+2 LAD LECENT < LIRE UNE COMMANDE BSR ASPSIM JE ENTBON LAD RETCCI SVC 0 JMP $-1 ENTBON: EQU $ LA &ABFEN0 < RELEVER LA COMMANDE LXI NBCOM REVCOM: EQU $ CP &ALISCO JE VUCOM JIX REVCOM COMERR: EQU $ LA ADRCOM < COMMANDE INEXISTANTE CPZ INDFI < SOUS FI ? JE COMER1 < NON LA ABFEN0 < OUI LB ADRFI4 ADRI 2,B LXI 10 MOVE LA ADRFI4 COMER1: EQU $ BR MERR VUCOM: EQU $ LYI NBNED <EST-CE UNE COMMANDE AUTORISEE? CPZ SSEDIT JNE SOUSED CPR Y,X JL COMERR BR &AADCOM SOUSED: EQU $ LYI NBSED CPR Y,X JGE COMERR BR &AADCOM PAGE < < < S I M U L A T I O N E V E N T U E L L E < D E S L E C T U R E S / E C R I T U R E S < S U R ' N V P I ' E T ' N V P O ' : < < < ARGUMENTS : < A=ADRESSE DE LA DEMANDE, < DIVERSES INFORMATIONS DE SIMULATION... < < SPSIM: EQU $ CP ADEM6D < EST-CE 'DEM6D' ??? JNE SPSIMD < NON... PSR A LA WRITEO < OUI, ON STA DEM6D < REGENERE SON 'NVP' A PRIORI... PLR A SPSIMD: EQU $ CPZ &ALSIM < SIMULATION ??? JG ASPSI1 < OUI... SPSIMC: EQU $ PSR A,B,W LR A,W < (W)=ADRESSE DE LA DEMANDE COURANTE, LRM A BYTE NVPI;'01 CP 0,W < EST-CE UNE ENTREE ??? JNE SPSIMN < NON... < < CAS DES ENTREES : CLEAR < DU BUFFER ARGUMENT : < PSR X,Y < SAVE... LA 1,W < (A)=ADRESSE-OCTET DU BUFFER, LXI 0 SLRS 1 ADCR X < (X)=INDEX DE CLEAR, SBT 0 STA ABUFCL < ET GENERATION D'UN RELAI D'ACCES... LY 2,W < (Y)=DECOMPTEUR DE CLEAR. LAI " " < (A)=VALEUR DE CLEAR. SPSIMO: EQU $ STBY &ABUFCL < REMISE A BLANC DU BUFFER, ADRI 1,X < PASSAGE AU CARACTERE SUIVANT, ADRI -1,Y CPZR Y JG SPSIMO < S'IL EXISTE... PLR X,Y < RESTAURE... SPSIMN: EQU $ LRM A BYTE NVPL;'0A CP 0,W < EST-CE LA SORTIE 'NVPO' ??? JNE SPSIN1 < NON, RIEN A FAIRE... LA LP1 < OUI : TBT 15 < VISU OU AUTRES ??? JNC SPSIN1 < VISU, RIEN A FAIRE... < < TRAITEMENT SPECIAL DE LA BENSON : < LA &AMTLP < (ON A DEJA TESTE LP1(15)) CP ACU < EST-CE LA BENSON ??? JNE BENS1 < NON, RIEN A FAIRE... LA 1,W LB 2,W PSR A,B < OUI, SAUVEGARDES... LA 1,W < ON VA S'ECLATER... LXI 0 SLRS 1 ADCR X < (X)=INDEX D'EMISSION, LR X,B < (B)=INDEX DU PREMIER CARACTERE... SBT 0 STA ABENS1 < GENERATION DU RELAI D'EMISSION, LA 2,W ADR X,A STA 2,W < INDEX DE FIN... LYI 0 < (Y)=INDEX DE RECEPTION. MOCD:: VAL '00FF < POUR INVERSER LES OCTETS... BENS2: EQU $ LBY &ABENS1 < (A)=OCTET COURANT, XR X,Y CPR Y,B < EST-CE LE PREMIER CARACTERE DU BUFFER ??? JNE BENS3 < NON, DONC LES '6D DOIVENT RESTES < INCHANGES ("M" MINUSCULE)... CPI '6D < OUI, ALORS EST-CE "R/C-L/F" ??? JNE BENS3 < NON... LAI '0D)MOCD < OUI, ON LE CONVERTIT EN UN "R/C", STA &ABENS2 < QUE L'ON ECLATE, ADRI 1,X LAI '0A < PUIS UN "L/F"... BENS3: EQU $ EORI MOCD < ON INVERSE LES BITS... STA &ABENS2 < ET ON ECLATE... ADRI 1,X XR X,Y ADRI 1,X LR X,A CP 2,W < EST-CE FINI ??? JL BENS2 < NON... ADR Y,Y STY 2,W < OUI, ON MODIFIE LE COMPTE D'OCTETS, LA ABENS2 SLLS 1 STA 1,W < ET L'ADRESSE DU BUFFER... LR W,A SVC 0 < EXECUTION DE LA BENSON... PLR A,B < RESTAURATIONS... STB 2,W STA 1,W PLR A,B,W JMP SPSIM2 < VERS LE RETOUR DES 'SVC'... ASPSI1: JMP SPSIM1 < RELAI... BENS1: EQU $ < < OPERATION REELLE : < SPSIN1: EQU $ PLR A,B,W SVC 0 < NON, E/S NORMALE... < < RETOUR DE SPSIM : < SPSIM2: EQU $ CPZ INDED < 'FC' OU 'ED' ??? JE ETI4 < 'ED', RIEN A FAIRE... PSR A,B,X,W < 'FC', LR A,W < ALORS, W=ADRESSE DE LA DEMANDE, LBY 0,W < A='NVP' DE L'ENTREE-SORTIE, CPI NVPI < EST-CE UN ENTREE ??? JNE ETI5 < NON, UNE SORTIE... LA 2,W ADRI 1,A SLRS 1 LR A,X < X=NOMBRE DE MOTS ENTIERS DU MESSAGE. LA 1,W SLRS 1 < A=ADRESSE MOT DU BUFFER, JC $ < E R R E U R... CP ABFEN0 < EST-CE LE BUFFER 'CARTE' ??? JE ETI6 < OUI, C'EST BON... LB ABFEN0 < B=ADRESSE DU RECEPTEUR... MOVE < LE MESSAGE LU EST MIS DANS 'CARTE'. ETI6: EQU $ BSR ASPBOX < B=NOMBRE DE CARACTERES ENTRES... LR B,X ADRI -2*LBUFVI-1,X < X=INDEX DU DERNIER CARACTERE. LAD LCHAI1 CPR A,W < EST-CE L'ENTREE 1ERE CHAINE DE 'MD' ??? JE ETI7 < OUI, ON L'INSERE... LAD LCHAI2 CPR A,W < EST-CE L'ENTREE 2EME CHAINE DE 'MD' ??? JE ETI7 < OUI, ON L'INSERE... LBY &ADBFEN < A=DERNIER CARACTERE... CPI '0D < EST-CE UN 'R/C' ??? JNE ETI5 < NON, LE MESSAGE EST IGNORE... LA &ABFEN0 CP &ACOMMA JE ETI5 < "MA", ETANT UNE COMMANDE DE SERVICE < IMMEDIAT N'EST JAMAIS INSEREE !!! CP &ACOMEB JE ETI5 < DE MEME "EB", CP &ACOMAS JE ETI5 < ET "AS"... CP &ACMEND JE ETI7 < LE CODE DE FIN (:F...) EST TOUJOURS PRIS. LA CRLF < LE CARACTERE D'INVITATION COURANT CP CRLFSU < EST-IL CELUI DES CARTES ??? JE ETI5 < OUI, PAS D'INSERTION, ELLE < SERA FAITE PAR LES S/P DE MISE A JOUR. CP RETOUR JE ETI5 < IDEM... ETI7: EQU $ BSR COMP < OUI, ON MET LA BSR ECRT < COMMANDE DANS LE FICHIER... ETI5: EQU $ PLR A,B,X,W ETI4: EQU $ XR A,X CPI '7D < NE SERAIT-CE PAS EN FAIT UN DOUBLE < ALT-MODE, SUIVI DE "!D" ET "G" ??? JNE ETI20 < NON... LAI 0 < OUI, ON FAIT COMME SI TOUT S'ETAIT < BIEN PASSE... ETI20: EQU $ XR A,X < RESTAURE 'A' ET 'X'... CPZR X < TEST DES CONDITIONS DE RETOUR... RSR < < E/S NON SIMULES : < SPSIMB: EQU $ PLR A,B,Y,W < A=ADRESSE DE LA DEMANDE. BR ASPSMC < VERS L'EXECUTION REELLE... < < SIMULATIONS : < SPSIM1: EQU $ PSR A,B,Y,W LR A,W < W=ADRESSE DE LA DEMANDE... LB 2,W < B=NOMBRE D'OCTETS DEMANDES. LA 1,W SLRS 1 < ADRESSE MOT DU BUFFER, SBT 0 < INDEXATION... STA ABUF < RELAI VERS LE BUFFER REEL. LXI 0 ADCR X < X=INDEX BUFFER REEL. LBY 0,W < A=NVP DEMANDE. CPI NVPO < OUT ??? JE SPSIM3 < C'EST UNE ECRITURE... < < SIMULATION D'UNE LECTURE : < CPI NVPI < IN ??? JNE SPSIMB < NON, ALORS VRAIE E/S... LY XSIML < Y=INDEX DU BUFFER DE LECTURE. SPSIM4: EQU $ LR Y,A < VALIDATION INDEX DE LECTURE... CP &ALSIM JGE SPSIM8 < SIMULATION REFUSEE... XR X,Y LBY &ASIML < SIMULATION LECTURE... XR X,Y STBY &ABUF ADRI 1,X < PROGRESSION ADRI 1,Y < DES INDEX. ADRI -1,B < DECOMPTE DES CARACTERES. CPI '04 < EST-CE UN VRAI 'EOT' ??? JE SPSIM5 < OUI, ON ARRETE... CPI '0D < EST-CE UN VRAI 'R/C' ??? JE SPSIM5 < OUI, ON ARRETE LA... CP SIMLIM < EST-CE L'EQUIVALENT DU 'R/C' ??? JNE SPSIMA < NON... LAI '0D < OUI, ON LE REMPLACE ADRI -1,X < PAR STBY &ABUF < UN VRAI 'R/C', JMP SPSIM5 < ET ON ARRETE LA... SPSIMA: EQU $ CPZR B < A-T'ON FINI ??? JG SPSIM4 < NON, ON CONTINUE... SPSIM5: EQU $ LR Y,A SB XSIML STA SIMBOX < NOMBRE DE CARACTERES "LUS"... STY XSIML < MISE A JOUR DE L'INDEX DE LECTURE. SPSIM7: EQU $ LXI 0 < AFIN D'ASSURER UN RETOUR OK... SPSIM9: EQU $ PLR A,B,Y,W JMP SPSIM2 < ET C'EST FINI... < < SIMULATION D'UNE ECRITURE : < SPSIM3: EQU $ LY XSIME < Y=INDEX DU BUFFER D'ECRITURE. SPSIM6: EQU $ LR Y,A < VALIDATION INDEX D'ECRITURE. CP &ALSIM JGE SPSIM8 < SIMULATION REFUSEE... LBY &ABUF < SIMULATION ECRITURE... XR X,Y STBY &ASIME XR X,Y ADRI 1,X < PROGRESSION ADRI 1,Y < DES INDEX. ADRI -1,B < DECOMPTE DES CARACTERES. CPZR B < EST-CE FINI ??? JG SPSIM6 < NON... STY XSIME < OUI, ON MET A JOUR L'INDEX D'ECRITURE. JMP SPSIM7 < ET ON SORT... < < ERREURS DE SIMULATIONS : < SPSIM8: EQU $ LXI 1 < POUR UN RETOUR EN ERREUR... JMP SPSIM9 < < < E X E C U T I O N D E ' 1 E 3 5 : < < < RESULTAT : < B=NOMBRE DE CARACTERES LUS. < < SPBOX: EQU $ LB SIMBOX < A PRIORI... CPZ &ALSIM < SIMULATION ??? JG SPBOX1 < OUI, (B) EST BON... CPZ INDFI < SOUS 'FI' ??? JNE SPBOX1 < OUI, (B) EST BON... WORD '1E35 < NON, B <-- (BOXESC). SPBOX1: EQU $ RSR PAGE <*********************************************************************** <* * <* COMMANDE DELETE FICHIER. * <* * <*********************************************************************** DELF: EQU $ LXI -2*LBUFVI+2 BSR RNOM < RELEVER LE NOM DU FICHIER, LA ANMFID < A=@ DE SON NOM. BSR DELT < ET DELETE SUR 'NVPBID'. BR ADCOM < VERS LA COMMANDE SUIVANTE... PAGE <*********************************************************************** <* * <* COMMANDE LECTEUR. * <* * <*********************************************************************** IF ORDI-"S",XWOR%,,XWOR% MTAPE: EQU $ LAI "1" STBY &AADCR1 < POUR ATTEINDRE 'MT1'... LA AMT < SELECTION DE "MT"... JMP READET READE2: EQU $ LAI "2" < POUR CR2... JMP READES XWOR%: VAL 0 READER: EQU $ IF ORDI-"S",XWOR%,,XWOR% READE1: EQU READER LAI "1" < POUR CR1... READES: EQU $ STBY &AADCR1 < CHOIX DU LECTEUR... LA ACR < SELECTION DE "CR"... READET: EQU $ STA &AMTCR < SELECTION MT/CR... XWOR%: VAL 0 LBI 80 JMP LECREA LECTE: EQU $ LBI 160 LECREA: EQU $ STB LGENT LA CR1 IBT 15 STA CR1 BR ADCOM <*********************************************************************** <* * <* COMMANDE IMPRIMANTE. * <* * <*********************************************************************** PRINBE: EQU $ LA ACU LBI "2" LYI '0A < FONCTION ECRITURE EN CANAL... JMP PRINTE < VERS "CU2"... PRINMT: EQU $ LA AMT LBI "1" LYI '02 JMP PRINTE < VERS "MT1"... PRINLP: EQU $ LA ALP LBI "1" LYI '02 PRINTE: EQU $ STA &AMTLP < SELECTION "LP1"/"MT1"... LR B,A STBY &AMTLP1 LBY WRITEO < SAUVEGARDE DU 'NVP', STY WRITEO < MISE EN PLACE DE LA FONCTION, STBY WRITEO < ET REMISE DU 'NVP'... STZ LP1 IC LP1 LA ACLL BSR ASPCCI < CLOSE A PRIORI 'NVPL'... BR ADCOM PAGE IF ORDI-"S",XWOR%,,XWOR% < < < S E L E C T I O N A S C I - E B C D I C : < < MODEA: EQU $ STZ MODE < MODE=0 : ASCI... BR ADCOM MODEE: EQU $ STZ MODE IC MODE < MODE=1 : EBCDIC... BR ADCOM XWOR%: VAL 0 PAGE < < < R E T O U R T E M P O R A I R E A U C C I : < < GOCCI: EQU $ LAD RETCCI SVC 0 < N'OUBLIONS PAS QUE L'ON EST SOUS "*"... BR ADCOM < VERS LA COMMANDE SUIVANTE... PAGE <*********************************************************************** <* * <* COMMANDE MODIFICATION :F * <* * <*********************************************************************** MODFIN: EQU $ LXI -2*LBUFVI+2 MODF01: EQU $ LBY &ADBFEN CPI "'" < Y-A-T-IL UNE CHAINE ? JE MODF02 < OUI JIX MODF01 LA DPF < NON,RESTAURATION DU :F JMP MODF4 MODF02: EQU $ LXI -2*LBUFVI+2 BSR RNOM < RELEVE CHAINE CARACTERES LR B,A CPI 2 < AU MOINS 2 CARACTERES ? JGE MODF2 < OUI MODF1: EQU $ LA ADRCOM < NON ERREUR BR MERR MODF2: EQU $ LXI NBCOM LA &ANMFID MODF3: EQU $ CP &ALISCO < COMMANDE DEJA DEFINIE? JE MODF1 < OUI ERREUR JIX MODF3 MODF4: EQU $ STA &ACMEND < SAUVEGARDE CARACTERES DE FIN BR ADCOM PAGE < < < M O D I F I C A T I O N N O M B R E D E < C A R T E S P U N C H E E S ' P C ' : < < MODCA: EQU $ LXI -2*LBUFVI+2-1 < POUR RECHERCHER 'N'. BSR NOMC < RELEVE DU NOMBRE 'N'. JALE MODF1 < ERREUR... STA NUMCA BR ADCOM < VERS LA COMMANDE SUIVANTE... PAGE IF ORDI-"S",XWOR%,,XWOR% < < M O D I F I C A T I O N D U C A R A C T E R E J O U A N T < L E R O L E D E ' A L T - M O D E '. < MODALT: EQU $ LXI -2*LBUFVI+2 < POUR RECHERCHER LE CARACTERE. LBY &ADBFEN < A=CARACTERE ARGUMENT : CPI "Z" < VALIDATION : JG MODF1 < ERREUR... CPI '04 < VIDE ??? JE MODAL2 < OUI : RETABLISSEMENT DU ALT-MODE... CPI '0D < VIDE ??? JNE MODAL1 < NON... MODAL2: EQU $ LAI '7D < RETABLISSEMENT DU ALT-MODE... MODAL1: EQU $ STBY CARALT WORD '1EA5 < 'A' BITS 8-15 EST LE CARACTERE SERVANT < DE ALT-MODE. BR ADCOM < VERS LA COMMANDE SUIVANTE... PAGE < < < M O D I F I C A T I O N D U C A R A C T E R E J O U A N T < L E R O L E D E L A C L O C H E : < < CLOCHT: EQU $ LXI -2*LBUFVI+2 < POUR RECHERCHER LE CARACTERE. LBY &ADBFEN < A=CARACTERE ARGUMENT : CPI "Z" < VALIDATION : JG MODF1 < ERREUR... CPI '04 < VIDE ??? JE CLOCH2 < OUI : RETABLISSEMENT DU CLOCHE... CPI '0D < VIDE ??? JNE CLOCH1 < NON... CLOCH2: EQU $ LAI '07 < RETABLISSEMENT DU CLOCHE... CLOCH1: EQU $ STA CLOCHE BR ADCOM < VERS LA COMMANDE SUIVANTE... XWOR%: VAL 0 PAGE < < INTRODUCTION DE CARTES "SUITE" DANS LA RECHERCHE DE CHAINES < DE CARACTERES < CSUITE: EQU $ LXI -2*LBUFVI+2 < RECHERCHE DU CARACTERE DE CARTE SUITE LBY &ADBFEN CPI '04 JE CSUIT1 < VIDE? CPI '0D JE CSUIT1 < VIDE? CPI "Z" < JG MODF1 < TEST DE VALIDITE CPI " " < DU CARACTERE ENTRE JL MODF1 < JMP CSUIT2 CSUIT1: EQU $ STZ CARSUI < CARSUI=0 :MODE NORMAL JMP CSUIT4 CSUIT2: EQU $ STA CARSUI < CHARGEMENT DU CARACTERE LXI -2*LBUFVI+3-1 < LECTURE DU NUMERO DE COLONNE BSR NOMC < RELEVE DU NOMBRE JAL MODF1 < ERREUR CPI 2*LBUFVI JG MODF1 < ERREUR JAG CSUIT3 ADRI 1,A < MISE A 1 SI COLONNE NON SPECIFIEE CSUIT3: EQU $ ADRI -2*LBUFVI-1,A < STA COLSUI < CHARGEMENT DU NUMERO DE COLONNE CSUIT4: EQU $ BR ADCOM < VERS LA COMMANDE SUIVANTE.. PAGE < < < J U S T I F I C A T I O N : < < JUST: EQU $ < < COMMANDE 'JE' : DEFINIE LE NOMBRE D'ESPACES < A LAISSER INTACTS AU DEBUT DU MESSAGE : < JUSTID: EQU $ LXI -2*LBUFVI+2-1 < POUR RECHERCHER 'N' : BSR NOMC < NOMBRE 'N'. JAL MODF1 < ERREUR !!! CPI 2*LBUFVI JG MODF1 < ERREUR... STA JUSTD BR ADCOM < < COMMANDE 'JM' : DEFINIE LE NOMBRE D'ESPACES MANQUANT < AU DELA DUQUEL ON JUSTIFIE PLUS... < JUSTIM: EQU $ LXI -2*LBUFVI+2-1 BSR NOMC < RELEVE DU NOMBRE 'N'. JAL MODF1 < ERREUR... CPI 2*LBUFVI JG MODF1 < ERREUR... STA JUSTM BR ADCOM < < COMMANDE 'JI' : DEFINIE LE NOMBRE DE CARACTERES < A NE PAS TESTER EN TETE DU MESSAGE : < JUSTIF: EQU $ LXI -2*LBUFVI+2-1 BSR NOMC < RELEVE DU NOMBRE 'N'. JAL MODF1 < ERREUR... CPI 2*LBUFVI JG MODF1 < ERREUR... ADRI -2*LBUFVI,A < EN FAIT C'EST UN INDEX DE BUFFER. STA JUSTF BR ADCOM < < COMMANDE 'NJ' : INITIALISE TEL QU'IL N'Y AIT < PAS DE JUSTIFICATION. < JUSTIN: EQU $ LAI 2*LBUFVI STA JUSTD STA JUSTM NGR A,A STA JUSTF STZ JUSTP < INITAILISATION A PRIORI DU COMPTEUR < DE LIGNES PAR PAGE. BR ADCOM < < COMMANDE 'MA' : < MARGE: EQU $ LXI -2*LBUFVI+2-1 BSR NOMC JAL MODF1 < ERREUR... CPI 2*LBUFVI JG MODF1 < ERREUR... ADRI 1,A < POUR LE ">" DE DEBUT DE LIGNE... MP C108 DV C14 STA BUFG+1 < DANS LE BUFFER STA BUFG+3 < GRAPHIQUE... LAD DERASE BSR ASPSIM < EFFACEMENT DE L'ECRAN. LAD DOG BSR ASPSIM < MISE EN GRAPHIQUE. LAD DWG BSR ASPSIM < TRACE DE LA MARGE DROITE. LAD DCG BSR ASPSIM < RETOUR EN ALPHA-NUMERQUE. LAD DHOME BSR ASPSIM < CURSEUR HOME. LAD DESC BSR ASPSIM < MISE EN 'ESC;'. BR ADCOM < COMMANDE SUIVANTE... < < COMMANDE 'JP' : < JUSTIP: EQU $ LXI -2*LBUFVI+2-1 BSR NOMC STA JUSTP < NOMBRE DE LIGNES PAR PAGE, BR ADCOM < VERS LA COMMANDE SUIVANTE. PAGE IF ORDI-"S",XWOR%,,XWOR% < < < M O D I F I C A T I O N D E Q U A N T A : < < EXEQ1: EQU $ LRM A,B WORD YY8*1-2 < QUANTA=1, WORD YY7*1+SGFOUT,X < QUANTA=1. EXEQ: EQU $ STA LUTBUF < LONGUEUR DU BUFFER DE SORTIE, STB ABSGOF < RELAI VERS LE BUFFER DE SORTIE. BR ADCOM < COMMANDE SUIVANTE... EXEQ3: EQU $ LRM A,B WORD YY8*QUANTA-2 < QUANTA=3. WORD YY7*QUANTA+SGFOUT,X JMP EXEQ XWOR%: VAL 0 PAGE < < < E D I T I O N C O M M E N T A I R E : < < EXECOM: EQU $ BSR ASPBOX < B=LONGUEUR DU COMMENTAIRE... LAD ECCRLF SVC 0 < ENVOI EN-TETE SANS SIMULATION !!! STB ECRERR+2 < LONGUEUR DU MESSAGE... LA LECENT+1 STA ECRERR+1 < ADRESSE DU MESSAGE... LAD ECRERR SVC 0 < ENVOI COMMENTAITRE SANS SIMULATION !!! BR ADCOM < COMMANDE SUIVANTE... PAGE <*********************************************************************** <* * <* COMMANDE D'EXECUTION D'UN FICHIER * <* * <*********************************************************************** EXECFI: EQU $ CPZ INDFI < EST-ON DEJA SOUS FI? JE EXECF1 < NON ON CONTINUE LA ADRFI2 < OUI ERREUR BR MERR EXECF1: EQU $ STZ NCARFI < NOMBRE DE LIGNE LUE = 0 LAI 1 STA INDFI < ON EST SOUS FI LXI -2*LBUFVI+2 BSR RNOM < RELEVER NOM DE FICHIER BSR LINM < RELEVER N ET M LA N STA NFI < SAUVEGARDE DANS NFI LA M STA MFI < SAUVEGARDE DANS MFI LXI 0 EXECF2: EQU $ LBY &ANMFIC < NOM DE FICHIER DANS NMFICH STBY &ANOMFX < NOM DE FICHIER DANS NOMFI ADRI 1,X LR X,A CPI 20 JNE EXECF2 BR ADCOM PAGE <*********************************************************************** <* * <* COMMANDE COPY. * <* * <*********************************************************************** COPY: EQU $ LAD TNOM < DETRUIRE FICHIER TRAVAIL BSR DELT LXI -2*LBUFVI+2 < RELEVER LE NOM DU FICHIER BSR RNOM LR X,Y LA ANMFID < LE SAUVER LB ANMTID LXI 10 MOVE LR Y,X BSR LINM < RELEVER LA SEQUENCE A COPIER BSR RNOM < RELEVER LE 2EME NOM BSR NOMB < NUMERO DE LIGNE OU COPIER CPZ VATRA1 < SI ABSENT,FIN DE FICHIER JE COPY1 LA SETFFF ADRI -1,A COPY1: EQU $ LR A,W BSR POSB < POSIT. @ BUFFERS LA ANMFID < OUVRIR LE 2EME FICHIER BSR MOVF BSR OPFX LAD TNOM < OUVRIR LE FICHIER TRAVAIL BSR MOVT BSR OPTN PSR W < LIRE FICHIER JUSQU'A BONNE LIGNE BSR RCOP LA VATRA1 < SAUVEGARDE VARIABLE DE TRAVAIL STA VATRA2 LA AASSSF < FERMER LE FICHIER BSR ASPCCI LA ANMTID < OUVRIR LE 1ER FICHIER BSR MOVF BSR OPFO JNE ERCOP LA M < NOMBRE DE CARTES A COPIER SB N LR A,W ADRI 1,W BSR RLIR < LIRE JUSQU'A N BSR RCOP < COPIER LES CARTES LA AASSSF < FERMER LE FICHIER BSR ASPCCI LA ANMFID < ROUVRIR LE 2EME FICHIER BSR MOVF BSR OPFO JE COPY3 ERCOP: EQU $ BSR ACLOSE < ERREUR - CLOSE PARTIEL LAD TNOM < DETRUIRE FICHIER TEMPORAIRE BSR DELT LA ADRFI BR MERR COPY3: EQU $ LA VATRA2 < RESTAURATION VARIABLE DE TRAVAIL STA VATRA1 PLR A ADRI 1,A CPZ VATRA1 < EN RESTE-T-IL? JNE COPY2 STA N BSR RLIR LA SETFFF LR A,W BSR RCOP COPY2: EQU $ IC SSEDIT < FAIRE COMME UNE FIN DE EDIT BR AFINMD PAGE < < < E N R E G I S T R E M E N T D E S U P D A T E S < S U R U N F I C H I E R : < < FICOM: EQU $ STZ INDED IC INDED < INDED=1 : COMMANDE 'FC'. JMP ETI1 < PUIS TRAITEMENT IDENTIQUE A 'ED'. <***************************************************************** <* * <* COMMANDE KOMPARER * <* * <***************************************************************** KOMP: EQU $ DC SSEDIT < SSEDIT VAUDRA 2 POUR 'KO', < ET 1 POUR 'ED'... < MAIS JUSQU'A CE QUE LA COMMANDE ENTIERE < AIT ETE ANALYSEE, ON LE MOET A -1 POUR < "KO" AFIN DE RAZER 'SSEDIT' SUR ERREUR !! <*********************************************************************** <* * <* COMMANDE EDITER. * <* * <*********************************************************************** EDITER: EQU $ STZ INDED < INDED=0 : COMMANDE 'ED'. ETI1: EQU $ < TRONC COMMUN 'FC' ET 'ED'. IF ORDI-"S",XWOR%,,XWOR% STZ MODE < MODE=0 : ASCI A PRIORI... XWOR%: VAL 0 LAD TNOM < DETRUIRE LE FICHIER DE TRAVAIL BSR DELT LAD TNOM < PLACER SON NOM DANS LES ASSIGN BSR MOVT BSR OPTN < L'OUVRIR NEW LXI -2*LBUFVI+2 < RELEVER LE NOM DU FICHIER BSR RNOM STX TRAV1 < POUR LE DEUXIEME NOM DE FICHIER < SI L'ON EST SOUS 'FC'. BSR MOVF < LE PLACER DANS LES ASSIGN BSR OPFX < L'OUVRIR OLD OU NEW IC SSEDIT < ON EST SOUS EDIT JG ETI99 < 'ED' OU 'FC'... IC SSEDIT < 'KO' : IC SSEDIT < SSEDIT=2. ETI99: EQU $ LA CRLFET < CARACTERE DE DEMANDE DE COMMANDE STA CRLF STZ NOCAR < METTRE NO DE CARTE A 1 IC NOCAR BSR POSB < POSIT. @ BUFFERS STZ MODIF STZ COMNOR CPZ INDED < 'ED' OU 'FC' ??? JE ETI2 < 'ED'... < < CAS DE 'FC' : INSERTION DE "ED 'FICHIER'" : < IC TRAV1 LX TRAV1 < TRAV1=INDEX DU DEUXIEME NOM DE FICHIER. BSR RNOM < RELEVE DU NOM DE FICHIER D'UPDATES A < CREER, ET MISE DANS 'NMFICH'. LA ANMFID LB ANOMTO LXI 10 MOVE < LE FICHIER D'UPDATES VA SUR NVPBID. LA AASSOT BSR ASPCCI < ESSAYONS DE L'OUVRIR EN OLD... JNE ETI17 < IL N'EXISTE PAS ENCORE, C'EST BON... BSR ACLOSE < IL EXISTE DEJA, ON NE FAIT RIEN... STZ SSEDIT < ET ON STZ INDED < REINITIALISE LA CRLFPL < TOUT STA CRLF < LES INDICATEURS... LA AERRFC BR MERR < ET UN MESSAGE D'ERREUR... ETI17: EQU $ LAI " " ETI13: EQU $ STBY &ADBFEN < ET ON L'EFFACE... ADRI -1,X XR A,X CP TRAV1 < TOUT EFFACE ??? XR A,X JGE ETI13 < NON... LA NOMED STA &ABFEN0 < 'ED' REMPLACE 'FC' DANS LA COMMANDE. BSR COMP < ON COMPACTE, BSR ECRT < ET ON ECRIT... ETI2: EQU $ BR ADCOM PAGE <*********************************************************************** <* * <* COMMANDE LISTER. * <* * <*********************************************************************** LISTER: EQU $ STZ LSPF JMP LSTPCH <*********************************************************************** <* * <* COMMANDE RECHERCHE D'UNE CHAINE DE CARACTERES * <* * <*********************************************************************** RECHER: EQU $ STZ FIRCAR DC FIRCAR < MEMORISONS QUE L'ON N'A PAS ENCORE REN- < CONTRE LA PREMIERE CARTE... STZ LSRE IC LSRE STZ LISNO IC LISNO STZ LSPF JMP NOPUCC <*********************************************************************** <* * <* COMMANDE COMPTER CHAINE DE CARACTERES * <* * <*********************************************************************** COMPTE: EQU $ STZ NBCHA LAI 2 STA LSRE STZ LSPF JMP NOPUCC <*********************************************************************** <* * <* COMMANDE PUNCHER. * <* * <*********************************************************************** PUNCHE: EQU $ STZ LSPF IC LSPF STZ PUCCOM <*********************************************************************** <* * <* LISTE OU PUNCH NUMEROTE OU NON. * <* * <*********************************************************************** LSTPCH: EQU $ STZ LSRE STZ LISNO < NUMEROTATION? ANDI 'FF CPI "N" JNE PASNUM IC LISNO PASNUM: EQU $ CPI "C" < PUNCH COMPACTE? JNE NOPUCC IC PUCCOM NOPUCC: EQU $ LXI -2*LBUFVI+2 < RELEVER LE NOM DU FICHIER BSR RNOM LR X,Y BSR MOVF LR Y,X < RELEVER N ET M S'ILS EXISTENT BSR LINM CPZ LSRE JE PASNZ2 BSR RCAR < RECHERCHE CHAINE CARACTERES PASNZ2: EQU $ BSR OPFO < OUVRIR LE FICHIER JE PASNZ3 BSR ACLOSE < CLOSE PARTIEL LA ADRFI < FICHIER INEXISTANT BR MERR PASNZ3: EQU $ LA ABFSGI < INITIALISATION ADRESSE BUFFER SLLS 1 STA READF+1 CPZ LSPF < LISTE OU PUNCH? JNE VOIPUN STZ KJUSTP < INITIALISATION A PRIORI DU < COMPTEUR DE LIGNES PAR PAGE. LA LP1 < LISTE - SUR IMPRIMANTE? TBT 15 JNC PASNZ1 LA AASSLP < OUI - L'ASSIGNER SI POSSIBLE BSR ASPCCI JE ASOK1 < OK... LA &AMTLP CP AMT < EST-CE "MT1" ??? JNE QADERL < NON... ASOK1: EQU $ LAI NVPL < NUMERO D'UNITE STBY WRITEO JMP PASNZ1 VOIPUN: EQU $ LAI "1" < PUNCH STBY &AN0CU LA AASSB < ESSAI DE !ASSIGN B=CU1 BSR ASPCCI JE ASSICU LAI "2" < ESSAI DE !ASSIGN B=CU2 STBY &AN0CU LA AASSB BSR ASPCCI JNE QADERL ASSICU: EQU $ LA ABFSGO < ADRESSE BUFFER SLLS 1 STA DEMPCH+1 CPZ PUCCOM < PUNCH COMPACTE? JNE QUNCCO < OUI - LE FAIRE LAI 4 < NON - ATTENTE STA SLEEP+2 PASNZ1: EQU $ BSR RLCT < LIRE LE FICHIER JUSQU'A N JANE FINLIS IC NOCAR LA NOCAR CP N JL PASNZ1 BSR ININ < INITIALISER LA NUMEROTATION RELIS: EQU $ BSR DECO < DECOMPACTER CPZ LSRE < LISTE, PUNCH OU RECHERCHE? JE LIS3 LA RARGRL LR A,W < INITIALISATION DE 'W'. LA MARGRL STA NARGRL < INITIALISATION DU DECOMPTEUR. LIS73: EQU $ < ITERATION SUR LES "OR". STZ SAUVX LXI -2*LBUFVI-1 < POSITIONNEMENT DEBUT DE CARTE LIS02: EQU $ STZ NEGATE < "PRESENCE" A PRIORI... STZ REBM LB SAUVX < B=NOMBRE DE CHAINES TRAITEES LIS1: EQU $ < RECHERCHE CHAINE 1 JIX LIS11 CPZ NEGATE < "ABSENCE" ??? JNE LIS3 < OUI, ON LISTE... LX COLSUI < LBY &ADBFEN < CP CARSUI < LA CARTE SUITE SERA LISTEE JNE LIS82 < SI LA CARTE PRECEDANTE VIENT LA FLASUI < D'ETRE LISTEE (FLASUI=1). CPI 1 < JE LIS4 < LIS82: EQU $ STZ FLASUI < RAZ SI LA CARTE N'EST PAS UNE CARTE SUITE DC NARGRL < DECOMPTAGE DES "OR", JE NWCART < RIEN TROUVE, PASSONS A LA CARTE < SUIVANTE... ADRI 2,W < IL RESTE ENCORE AU MOINS UN "OR", JMP LIS73 < ALLONS L'ESSAYER... LIS11: EQU $ LBY &ADBFEN BITPAR:: VAL 8 < BIT DE PARITE... RBT BITPAR < A PRIORI (CAS DES MINUSCULES)... LR A,Y < Y=CARACTERE CARTE COURANT. XR X,B LBY &XARGRL,W TBT 8 < "ABSENCE" ??? JNC LIS81 < "PRESENCE"... RBT 8 < RAZ DU DISCRIMINATEUR SI "ABSENCE"... IC NEGATE < ET MISE EN PLACE INDICATEUR. LIS81: EQU $ CPI "_" JE LIS2 CPR A,Y < CARAC CARTE=CARAC CHAINE I? JE LIS2 < OUI LX SAUVX < NON,REPOSITIONNEMENT DEBUT CHAINE I XR X,B LR X,A SB REBM LR A,X < RESTAURATION X STZ REBM JMP LIS1 LIS2: EQU $ IC REBM ADRI 1,X LBY &XARGRL,W < A=CARAC SUIVANT CHAINE I XR X,B CPI '04 < FIN DE CHAINE I ? JNE LIS1 CPZ NEGATE < "ABSENCE" ??? JNE LIS82 < OUI, "OR" SUIVANT SI LA CHAINE < EST PRESENTE... LA SAUVX ADRI NCARCH,A < NOMBRE DE CHAINES TRAITEES + 1 CP NCHRL,W < = NOMBRE DE CHAINES TOTAL? JE LIS3 < OUI,LISTER LA CARTE STA SAUVX JMP LIS02 LIS3: EQU $ IC NBCHA < COMPTAGE LA LSRE < PAS DE LISTE SI COMPTAGE CPI 2 JE NWCART CPI 1 JE LIS4 CPZ LSPF < LISTE OU PUNCH JNE CESPUN LIS4: EQU $ LA LSRE < CPI 1 < CS QUE POUR RL JNE CSLIST LA CARSUI < DOIT-ON TENIR COMPTE DES CARTES SUITE? JAE CSLIST < NON LX COLSUI < LA CARTE LUE EST-ELLE UNE CPBY &ADBFEN < CARTE SUITE ? JNE CSLIST LA FLASUI < N'EDITER QUE LES CARTES SUITE QUI SONT LA CPI 1 < SUITE DE LA CARTE PRECEDANTE (FLASUI=1) JNE NWCART CSLIST: EQU $ BSR LIST < LISTAGE DE LA CARTE 'NOCAR'... LA NOCAR < (A)=NUMERO DE LA CARTE COURANTE, STA LASCAR < C'EST PROVISOIREMENT LA DERNIERE < RENCONTREE. CPZ FIRCAR < Y-A-T'IL UNE PREMIERE CARTE ??? JGE LIS90 < OUI... STA FIRCAR < NON, C'EST DONC ELLE LA PREMIERE... LIS90: EQU $ LA LSRE CPI 1 JNE NWCART STA FLASUI < FLASUI=1 SI LA CARTE A ETE LISTEE PAR RL JMP NWCART JMP NWCART QUNCCO: JMP PUNCCO < RELAI... QADERL: JMP PADERL < RELAI... CESPUN: EQU $ LXI -40 < DEPLACEMENT DANS LA ZONE LAD &ABINPC < DE PUNCH LR A,B LXI -LBUFVI LAD &ADBFEN LXI 40 MOVE BSR PERF NWCART: EQU $ < CARTE SUIVANTE LA NOCAR < EST-ON RENDU A M? CP M JGE FINLIS BSR INCN < INCREMENTER LA NUMEROTATION IC NOCAR BSR RLCT < RELIRE JAE RELIS FINLIS: EQU $ CPZ LSPF < LISTE? JNE PADERL LAI 2 < ECRIRE LA DERNIERE LIGNE STA WRITEO+2 LAI '0D < METTRE UN R/C SLLS 8 STA &ABFSO1 LAD WRITEO BSR ASPSIM LAI NVPO STBY WRITEO PADERL: EQU $ LA LSRE CPI 2 < SI RC,EDITION DE NBCHA JNE LIS6 LXI 3 LB NBCHA < CODAGE NBCHA POUR EDITION LIS5: EQU $ LAI 0 DV DIX ADRI '30,B XR A,B STBY &ARC2 < &ARC2 NOMBRE EDITABLE JDX LIS5 XR A,B ADRI '30,A STBY &ARC2 LA ARC2 < TRANSMISSION NBCHA POUR EDITION RBT 0 LB ADRRC1 ADRI 10,B LXI 2 MOVE BSR ACLOSE IC LSRE < LSRE=3 (POUR MERR) LA ADRRC1 BR MERR < EDITION NBCHA LIS6: EQU $ STZ FLASUI < RAZ EN FIN DE RL LA ACLF < CLOSE PARTIEL : BSR ASPCCI LA ACLT BSR ASPCCI LA ACLB BSR ASPCCI LA &AMTLP CP AMT < EST-CE "MT1" ??? JE LIS6X < OUI, PAS DE CLOSE... LA ACLL BSR ASPCCI JMP LIS7X LIS6X: EQU $ LAD TAPEMK SVC 0 < ET ON ENVOIE UN "TAPE-MARK"... LIS7X: EQU $ BR ADCOM PAGE <*********************************************************************** <* * <* PUNCH DE CARTES EN COMPACTE. * <* * <*********************************************************************** PUNCCO: EQU $ STZ PUCCOM < PUNCH EFFECTIF LA CRLFSU < POUR LECTURE COMMANDE PUNCH STA CRLF LAI 3 < ATTENTE STA SLEEP+2 LYI -76 < INDEX OUT LXI 0 < INDEX IN STZ NOCCP < NUMEROTATION=0 AUTCB1: EQU $ BSR LECB < LIRE UN BYTE JANE FINLC1 PSR B AUTCB2: EQU $ BSR LECB < LIRE UN DEUXIEME BYTE JANE FINLC2 LR B,A < EST-CE 'FX CPI 'F0 JL PAFIF1 PLR A < OUI - METTRE UN NULL SLLS 8 PSR B BSR NMPC PLR A SLLS 4 < LE PLACER BSR NMPC JMP AUTCB1 PAFIF1: EQU $ PLR A < CALCUL PREMIER MOT SLLD 8 SLRS 8 SLLD 4 SLLS 4 PSR B < LIRE TROISIEME BYTE BSR NMPC BSR LECB JANE FINLC3 LR B,A < EST-CE 'XF? ANDI 'F CPI '0F JE PAFIF3 LR B,A < OU REPETITION ET FIN DE CARTE CPI '80+80 JL PAFIF2 LR Y,A CPI -1 JNE PAFIF2 PAFIF3: EQU $ PLR A < OUI METTRE UN NNULL PSR B BSR NMPC JMP AUTCB2 PAFIF2: EQU $ PLR A < CALCUL DEUXIEME MOT SLRS 12 SLLD 8 SLRS 8 SLLD 12 BSR NMPC JMP AUTCB1 FINLC1: EQU $ LAI 'FF < PLACER 'FF00 SLLS 8 LR Y,X < OBLIGER LE PUNCH STA &ABINEN LAI 0 < RESTE DE LA CARTE A ZERO ADRI 1,X STA &ABINEN JIX $-1 BSR PUPC LXI -80 < PUNCH DE ":F" LA DEUXPT STA &ABINEF ADRI 1,X LA CARACF STA &ABINEF ADRI 1,X STZ &ABINEF JIX $-1 BSR PUPU LA CRLFPL STA CRLF BSR ACLOSE < CLOSE PARTIEL BR ADCOM FINLC2: EQU $ PLR A < PLACER 'XX00,'0000,'FF00 SLLS 8 BSR NMPC LAI 0 BSR NMPC JMP FINLC1 FINLC3: EQU $ PLR A < PLACER 'X000,'FF00 BSR NMPC JMP FINLC1 PAGE <*********************************************************************** <* * <* COMMANDE SUPPRIMER. * <* * <*********************************************************************** SUPPRI: EQU $ LXI -2*LBUFVI+1 IC MODIF < MODIF=1 BSR RELN < RELEVE N BSR RELM < RELEVE M BSR SUNM < SUPPRESSION DE N A M BR ADCOM PAGE <*********************************************************************** <* * <* COMMANDE MODIFIER. * <* * <* ATTENTION: SOUS FI,SI ON VEUT INCLURE DES BLANCS EN FIN DE * <* CH1 OU CH2,ON LES REMPLACE PAR DES SHIFT O. * <* * <*********************************************************************** MODIFI: EQU $ LA &ABFEN0 STZ LSRE < SI ME,LSRE=0 ANDI 'FF CPI "D" JE MOD01 JMP MOD02 MOD01: EQU $ IC LSRE < SI MD,LSRE=1 MOD02: EQU $ LXI -2*LBUFVI+1 IC MODIF < MODIF=1 BSR RELN < RELEVE N BSR RELM < RELEVE M LBY &ABFEN0 CPI "M" < ETAIT-CE "ME"/"MD" ??? JNE MOD61 < NON, ON GARDE DONC LES 2 CHAINES < COURANTES... CPZ INDFI < EST-ON SOUS FI? JE MOD03 < NON BSR EXFI < OUI,LIRE UNE CARTE CPZ ENDFI < FIN DU FICHIER FI? JE MOD021 < NON LA ADRFI3 < OUI,ERREUR BR MERR MOD021: EQU $ LXI -2*LBUFVI-1 LY VATRA2 < Y = LONGUEUR CHAINE1 LBI 0 MOD04: EQU $ ADRI 1,X LBY &ADBFEN < TRANSFERT DE LA CHAINE1 XR X,B STBY &XCHAI1 < DANS LA ZONE ADEQUATE CPR Y,X JE MOD05 ADRI 1,X XR X,B CPI '0D < ETAIT-CE UN 'R/C' ??? JNE MOD04 < NON, AU CARACTERE SUIVANT... STB VATRA2 < OUI, ON ARRETE SUR LUI... MOD05: EQU $ LB VATRA2 < B = LONGUEUR CHAINE1 JMP MOD06 MOD03: EQU $ LA ACHAI1 BSR APRINT LAD LCHAI1 BSR ASPSIM < ENTREE DE LA PREMIERE CHAINE. BSR ASPBOX < B=NOMBRE DE CARACTERES ENTRES. MOD06: EQU $ STB LLCH1 < LONGUEUR DE LA CHAINE 1. LR B,A CPI 1 < EST-ELLE = 1 ??? JG MOD60 < NON... LXI 0 < OUI LBY &XCHAI1 CPI '04 < EST-CE UNEOT JE MOD07 < OUI,ERREUR CPI " " < EST-CE UN BLANC JNE MOD60 < NON,OK MOD07: EQU $ LA ADRFE < OUI, BR MERR < ERREUR... MOD60: EQU $ LR B,X ADRI -1,X LBY &XCHAI1 < DERNIER CARACTERE, CPI '0D < EST-CE UN RETURN ??? JNE MOD62 < NON... LAI '04 < OUI, ON LE STBY &XCHAI1 < REMPLACE PAR UN 'EOT'. MOD62: EQU $ LBY &XCHAI1 CPI '04 < EST-CE UN 'EOT' ??? JNE MOD63 < NON... DC LLCH1 < OUI, ON DECREMENTE LA LONGUEUR. MOD63: EQU $ CPZ INDFI < EST-ON SOUS FI? JE MOD630 < NON BSR EXFI < OUI CPZ ENDFI < FIN DE FICHIER FI? JE MOD634 < NON LA ADRFI3 < OUI,ERREUR BR MERR MOD634: EQU $ LXI -2*LBUFVI-1 LY VATRA2 < Y = LONGUEUR CHAINE2 LBI 0 MOD631: EQU $ ADRI 1,X LBY &ADBFEN < TRANSFERT DE LA CHAINE2 XR X,B STBY &XCHAI2 < DANS LA ZONE ADEQUATE CPR Y,X JE MOD632 ADRI 1,X XR X,B CPI '0D < ETAIT-CE UN 'R/C' ??? JNE MOD631 < NON, AU CARACTERE SUIVANT... STB VATRA2 < OUI, ON ARRETE SUR LUI... MOD632: EQU $ LB VATRA2 < B = LONGUEUR CHAINE2 JMP MOD633 MOD630: EQU $ LA ACHAI2 BSR APRINT LAD LCHAI2 BSR ASPSIM < ENTREE DE LA DEUXIEME CHAINE. BSR ASPBOX < B=NOMBRE DE CARACTERES ENTRES. MOD633: EQU $ STB LLCH2 LR B,X ADRI -1,X LBY &XCHAI2 < DERNIER CARACTERE, CPI '0D < EST-CE UN RETURN ??? JNE MOD64 < NON... LAI '04 < OUI, ON LE STBY &XCHAI2 < REMPLACE PAR UN 'EOT'... MOD64: EQU $ LBY &XCHAI2 CPI '04 < EST-CE UN 'EOT' ??? JNE MOD65 < NON... DC LLCH2 < OUI, ON DECREMENTE LA LONGUEUR. MOD65: EQU $ MOD61: EQU $ CPZ LSRE JNE MOD2 LA LLCH1 CP LLCH2 JLE MOD2 LX LLCH2 MOD1: EQU $ <ALLONGEMENT CHAINE 2 LAI " " STBY &XCHAI2 ADRI 1,X LR X,A CP LLCH1 JL MOD1 LAI '04 STBY &XCHAI2 MOD2: EQU $ BSR RECN < RECOPIE JUSQU'A N MOD3: EQU $ BSR RLCT < LECTURE JANE MOD5 BSR DECO < DECOMPACTAGE STZ REBM LBI 0 LXI -2*LBUFVI-1 MOD31: EQU $ < RECHERCHE CHAINE 1 JIX MOD32 JMP MOD4 < FIN DE LA CARTE MOD32: EQU $ LBY &ADBFEN RBT BITPAR < CAS DES MINUSCULES... XR X,B CPBY &XCHAI1 JE MOD33 < CARAC CARTE = CARAC CHAINE 1 LXI 0 XR X,B LA REBM < RESTAURATION X SBR A,X STZ REBM JMP MOD31 MOD33: EQU $ IC REBM ADRI 1,X LA LLCH1 CP REBM < FIN DE CHAINE 1 ? XR X,B JE MOD34 JMP MOD31 MOD34: EQU $ CPZ LSRE < SI ME,MOD349 JE MOD349 LA LLCH2 < CALCUL DIFFERENCE CHAINES SB LLCH1 LR A,B < DIFFERENCE DANS B LR X,Y JAE MOD348 < DIFFERENCE =0 JAL MOD345 LXI 0 < CAS OU LLCH2> LLCH1 MOD341: EQU $ ADRI -1,X CPR Y,X < IL NE FAUT PAS QUE L'ON REVIENNE PLUS < EN ARRIERE (X) DANS LE BUFFER QUE LA < DERNIERE COINCIDENCE (Y) QUE L'ON A < TROUVE, ET CE A CAUSE DES CHAINES < NE CONTENANT QUE DES " ", QUE L'ON NE < PEUT DISTINGUER DES " " QUE L'ON TESTE < QUAND ON CHERCHE LE DERNIER CARACTERE < NON " " DU BUFFER... JLE MOD34A < ON ARRETE SI (X)<=(Y)... LBY &ADBFEN < RECHERCHE DERNIER CPI " " < CARACTERE # BLANC JE MOD341 MOD34A: EQU $ LR X,A ADR B,A JALE MOD342 NGR B,X < PERTE DES (B+X) DERNIERS CARACTERES MOD342: EQU $ LBY &ADBFEN < DECALAGE DE B CARACTERES ADR B,X < A DROITE STBY &ADBFEN SBR B,X ADRI -1,X CPR X,Y JGE MOD348 JMP MOD342 MOD345: EQU $ < CAS OU LLCH2< LLCH1 ADRI 1,X MOD346: EQU $ < DECALAGE DE B CARACTERES LBY &ADBFEN < A GAUCHE CPZR X < EST-ON EN BOUT DE CARTE ??? JL MOD343 < NON... LAI " " < OUI, ON RAJOUTE DES 'SPACE'... MOD343: EQU $ ADR B,X STBY &ADBFEN SBR B,X JIX MOD346 ADR B,X LA BLANC MOD347: EQU $ < MISE A BLANC DE LA FIN DE LA STBY &ADBFEN < CARTE (CARACTERES B A -1) JIX MOD347 MOD348: EQU $ LR Y,X MOD349: EQU $ DC REBM < REMISE X VALEUR DEBUT LA REBM < DE LA CHAINE 1 SBR A,X LBI 0 STZ REBM MOD35: EQU $ XR X,B < MODIFICATION DE LA CHAINE 1 IC REBM LA LLCH2 CP REBM LBY &XCHAI2 JGE MOD36 XR X,B < FIN MODIFICATION ADRI -1,X LBI 0 STZ REBM JMP MOD31 < RECHERCHE CHAINE 1 MOD36: EQU $ ADRI 1,X XR X,B STBY &ADBFEN < ECRITURE CHAINE 2 JIX MOD35 MOD4: EQU $ CPZ INDED < 'ED' OU 'FC' ??? JNE ETI3 < 'FC' : PAS D'ECRITURE FICHIER... BSR COMP < COMPACTAGE BSR ECRT < ECRITURE ETI3: EQU $ IC NOCAR LA NOCAR CP M < DEPASSE M ? JLE MOD3 < NON MOD5: EQU $ BR ADCOM PAGE <*********************************************************************** <* * <* COMMANDE REMPLACER. * <* * <*********************************************************************** REMPLA: EQU $ LXI -2*LBUFVI+1 IC MODIF < MODIF=1 BSR RELN < RELEVE N BSR RELM < RELEVE M STZ UTILP < DOIT-ON UTILISER P? CPZ BATCH < PAS EN BATCH JNE REMPL2 ADRI -1,X < LE RELEVER BSR NOMC JAE REMPL2 < SI = 0,NE RIEN FAIRE CPI 81 JLE REMPL1 < SI > 81,LE RAMENER LAI 81 < A CETTE VALEUR REMPL1: EQU $ STA P < LE STORER IC UTILP < DIRE QU'ON L'UTILISE STZ LISNO < SANS NUMEROTATION BSR RECN < LIRE JUSQU'A N JMP REMPL3 REMPL2: EQU $ BSR SUNM < SUPPRESSION DE N A M REMPL3: EQU $ BSR AJOU < AJOUTER BR ADCOM PAGE <*********************************************************************** <* * <* COMMANDE REMPLACER-REECRIRE * <* * <*********************************************************************** REMINS: EQU $ CPZ INDFI < EST-ON SOUS 'FI' ??? JNE REMPLA < OUI, ALORS 'RR'=='RE'... STZ LISNO LXI -2*LBUFVI+1 IC MODIF BSR RELN < RELEVE N BSR RELM < RELEVE M BSR RECN < RECOPIE JUSQU'A N LA RETOUR STA CRLF REM1: EQU $ BSR RLCT < LECTURE JAE REM01 LA CRLFET STA CRLF LA ADRSEQ BR MERR REM01: EQU $ BSR DECO < DECOMPACTAGE BSR DEP < TRAITEMENT MODIFICATIONS BSR COMP < COMPACTAGE BSR ECRT < ECRITURE IC NOCAR LA NOCAR CP M JLE REM1 LA CRLFET STA CRLF CPZ INDED < 'EC' OU 'FC' ??? JE ETI9 < 'ED'... LXI -2*LBUFVI < 'FC' : DANS CE CAS, LAI " " < ON MET LA CARTE ETI10: EQU $ STBY &ADBFEN < A BLANC, JIX ETI10 LA &ACMEND < ET ON MET L'EQUIVALENT STA &ABFEN0 < DE ":F" EN TETE... BSR COMP < ET DANS BSR ECRT < LE FICHIER... ETI9: EQU $ BR ADCOM PAGE <*********************************************************************** <* * <* COMMANDE INSERER. * <* * <*********************************************************************** INSERE: EQU $ LXI -2*LBUFVI+1 IC MODIF < MODIF=1 BSR RE1N < RELEVER N BSR RECN < RECOPIE JUSQU'A N BSR AJOU < AJOUTER BR ADCOM PAGE < < < I N S E R T I O N E N F I N D E F I C H I E R : < < IFSERE: EQU $ LXI -2*LBUFVI+1 STX N < N<0 POUR LA FIN DE FICHIER. IC MODIF BSR RECN < POSITIONNEMENT EN FIN DE FICHIER. BSR AJOU < AJOUT... BR ADCOM < VERS LA COMMANDE SUIVANTE. PAGE <*********************************************************************** <* * <* COMMANDE COMPACTE. * <* * <*********************************************************************** COMPAC: EQU $ IC COMNOR BR ADCOM <*********************************************************************** <* * <* COMMANDE NORMAL. * <* * <*********************************************************************** NORMAL: EQU $ STZ COMNOR BR ADCOM PAGE <*********************************************************************** <* * <* COMMANDE FIN. * <* * <*********************************************************************** FIN: EQU $ CPZ SSEDIT < FIN DE EDIT? JE VRAIF2 CPZ MODIF < Y-A-T'IL EU MODIFICATIONS JE ALTMO1 < SIMULER UN ALT-MODE LIREFF: EQU $ LA SSEDIT CPI 2 JE FINMOD < PAS DE RECOPIE POUR 'KO'... CPZ INDED < EST-ON SOUS 'FC' ??? JNE FINMOD < OUI, PAS DE RECOPIE... BSR RLCT < OUI - FINIR LA RECOPIE JANE FINMOD BSR ECRT JMP LIREFF FINMOD: EQU $ LA PLACT < METTRE INDIC FIN SECTEUR CP LUTBUF < SI NON VIDE JE PASDRB NGR A,X LAI 'FF STBY &ABSGOF BSR AWRITE < ECRITURE SGF. <*********************************************************************** <* * <* RECOPIE DE NVPT SUR NVPF. * <* * <*********************************************************************** PASDRB: EQU $ LA SSEDIT CPI 2 JE KOMP1 < VERS LA COMPARAISON DE 'KO'... LAI '1F < CHANGER LE ALT-MODE (CTRL-SHIFT-O). WORD '1EA5 LA AASSSF < CLOSE NVPF BSR ASPCCI CPZ INDED < EST-ON SOUS 'FC' ??? JNE ETI11 < OUI, ON NE DETRUIT PAS 'NVPF'... LA ANOMFO < LE DETRUIRE BSR DELT ETI11: EQU $ IF ORDI-"S",PASDR1,,PASDR1 LAI NSPETA SBT 0 WORD '1E15 LR B,A WORD '1E15 TBT 16+OTODLN < SI LE BIT OTODLN EST A 1 JC PASDR1 < CHANGEMENT DE NOM LA ACLT < SINON RECOPIER LE FICHIER DE BSR ASPCCI < TRAVAIL SUR LE FICHIER LA ABFSGI < POSITIONNEMENT @ BUFFER SLLS 1 STA READF+1 STA WRITET+1 LA ANOMFO < OPEN NEW FICHIER CPZ INDED < EST-ON SOUS 'ED' OU 'FC' ??? JE ETI16 < 'ED'... LA ANMFID < 'FC' : BSR DELT < ON VA DETRUIRE LE FICHIER D'UPDATES... LA ANMFID < PUIS, L'OUVRIR EN NEW... ETI16: EQU $ BSR MOVF BSR OPFN BSR OPTO < OPEN OLD FICHIER DE TRAVAIL LAI NVPT STBY READF < LECTURE SUR NVPT LAI NVPF STBY WRITET < ECRITURE SUR NVPF PASDR4: EQU $ < RECOPIE DE NVPT SUR NVPF LAD READF SVC 0 < LECTURE NVPT JNE PASDR3 CPZ &ABFSGI JL PASDR3 BSR AWRITE < ECRITURE SGF. JMP PASDR4 PASDR3: EQU $ LAI NVPF STBY READF < RESTAURATION LECTURE SUR NVPF LAI NVPT STBY WRITET < RESTAURATION ECRITURE SUR NVPT LA ACLF BSR ASPCCI LAD TNOM BSR DELT JMP PASDR2 PASDR1: EQU $ LA ANOMFO < CHANGER LE NOM CPZ INDED < EST-ON SOUS 'FC' ??? JE ETI12 < NON, 'ED' LE NOM EST CELUI DU < FICHIER EDITE : "ED'N1'"... LA ANMFID < OUI, 'FC' LE NOM EST CELUI DU < FICHIER D'UPDATES' : "FC'N1''N2'"... BSR DELT < QUE L'ON DELETE D'ABORD... LA ANMFID < ET RESTAURE (A)... ETI12: EQU $ LB ABUFNM LXI 10 MOVE LAD DEMCOP SVC 0 LA ANOMTN < DETRUIRE L'ANCIEN LB ANOMTO LXI 10 MOVE LAD DEMDFT SVC 0 PASDR2: EQU $ BSR ACLOSE < CLOSE PARTIEL LBY CARALT < RESTAURER LE ALT-MODE WORD '1EA5 PAGE <*********************************************************************** <* * <* FIN DU EDIT * <* * <*********************************************************************** FINED: EQU $ STZ INDED < REINITIALISATION... LA CRLFPL < REINITIALISATION STA CRLF STZ SSEDIT STZ CR1 BR ADCOM VRAIF2: JMP VRAIFI ALTMO1: JMP ALTMOD < < < C O M P A R A I S O N D U F I C H I E R < A R G U M E N T E T D U F I C H I E R < D E T R A V A I L : < < KOMP1: EQU $ BSR ACLOSE < ON FERME TOUT... LAD TNOM LB ANOMOT LXI 10 MOVE < NOM DU FICHIER DE TRAVAIL. LA AASSTO BSR ASPCCI < OUVERTURE OLD DU FICHIER DE TRAVAIL. LAD OPENOT SVC 0 < OUVERTURE DE LA CLEF 2.0. LX LUTBUF NGR X LAI 'FF STBY &ABSGOF < INITIALISATION DU BUFFER. LA ANMFID BSR MOVF < PREPARATION NOM ARGUMENT. BSR OPFO < OUVERTURE OLD DU FICHIER ARGUMENT. < < COMPARAISON DES 2 FICHIERS : < KOMP5: EQU $ LAD READF SVC 0 < LECTURE FICHIER ARGUMENT. JNE KOMP2 < FIN... CPZ &ABFSGI JL KOMP2 < FIN... LAD READOT SVC 0 < LECTURE FICHIER DE TRAVAIL. JNE KOMP3 < FIN, DONC DIFFERENTS... CPZ &ABFSGO JL KOMP3 < FIN, DONC DIFFERENTS... LX LUTBUF NGR X LYI 0 < 2 INDEXES. KOMP4: EQU $ LBY &ABSGOF XR X,Y CPBY &ABSGII < ALORS ??? XR X,Y JNE KOMP3 < DIFFERENTS... CPI 'FF JE KOMP5 < FIN DE SECTEUR, AU SUIVANT... ADRI 1,Y < CARACTERES JIX KOMP4 < SUIVANTS... KOMP2: EQU $ LAD READOT SVC 0 < FICHIER DE TRAVAIL... JNE KOMP6 < FIN, DONC IDENTIQUES... CPZ &ABFSGO JL KOMP6 < FIN, DONC IDENTIQUES... < < FICHIERS DIFFERENTS : < KOMP3: EQU $ LA AMK2 < A=ADRESSE MESSAGE. JMP KOMP7 < ENVOI DU MESSAGE. < < FICHIERS IDENTIQUES : < KOMP6: EQU $ LA AMK1 < A=ADRESSE MESSAGE. < < ENVOI DU MESSAGE : < KOMP7: EQU $ LR A,W ADR A,A ADRI 1,A STA ECRERR+1 < ADRESSE OCTET DU MESSAGE. LBY 0,W STA ECRERR+2 < LONGUEUR DU MESSAGE. LAD ECRERR SVC 0 < ENVOI DU MESSAGE. BSR ACLOSE < ON FERME TOUT... LAD TNOM BSR DELT < ON DELETE LE FICHIER DE TRAVAIL... JMP FINED < ET C'EST FINI... <*********************************************************************** <* * <* ALT-MODE. * <* * <*********************************************************************** ALTMOD: EQU $ LAD KSTORE-1 < REINITIALISATION LR A,K LA &ALSIM < MAIS NE SEAIT-CE PAS UN DOUBLE ALT-MODE ? CP SVCSVC < SI OUI, (0)='SVC 0'... JNE ETI14 < NON, ALT-MODE SIMPLE... ETI15: EQU $ LAD RETCCI < ET OUI, SVC 0 < RETOUR AU CCI JMP ETI15 < DEFINITIF !!! ETI14: EQU $ IF ORDI-"S",XWOR%,,XWOR% LA XASSO STA &AMASSD < A CAUSE DES ALT-MODES MALHEUREUX... XWOR%: VAL 0 LAI NVPI STBY LECENT STBY LECCOM LAI '02 STA WRITEO < REMISE DE L'ECRITURE NORMALE... < (A CAUSE DE LA BENSON...) LAI NVPO STBY WRITEO STBY ECCRLF LRM A,B WORD BUFSOR-ZERO*2+1 BYTE NVPI;'01 STA WRITEO+1 STB LECENT < LECTURE AVEC ECHO... LAD PCLOSE BSR ASPCCI STZ LP1 LAD TNOM BSR DELT < DELETE FICHIER DE TRAVAIL JMP FINED <*********************************************************************** <* * <* TRAITEMENT DU FICHIER SUIVANT. * <* * <*********************************************************************** VRAIFI: EQU $ CPZ INDFI < EST-ON SOUS FI? JE VRAIF1 < NON STZ INDFI < OUI,CE N'EST PAS LA VRAI FIN LA ACLFI < CLOSE FICHIER FI BSR ASPCCI BR ADCOM VRAIF1: EQU $ STZ LP1 LAD TNOM BSR DELT < DESTRUCTION DU FICHIER DE TRAVAIL... LA &ALAI CP RSRRSR < DOIT-ON RETOURNER A 'ASSYS' ??? JE KOMP11 < OUI... LAI '83 < NON, PROFITONS-EN POUR STBY LOADA < DETRUIRE LE NOM 'ASSYS'<IDESC>... LAI 1 STA &ACCCI LA LAILAI STA &AJNE < A LA SUITE DU 'SVC' D'APPEL LA SVCSVC STA &ALAI < DE L'OVERLAY, ON MET UN RETOUR LA RSRRSR STA &ASVC < AU CCI, ET UN ENTRY 'EDITS'. KOMP11: EQU $ LBI DITEM LAD NOMA LXI 3 MOVE < MISE EN PLACE DE 'ASSY'<IDESC>. LAI 2 LR A,K < MISE EN PLACE D'UNE PILE < SPECIALE OVERLAY... LAI DEBUT-ZERO WORD '1EB5 < RESTAURATION DU 'PRESC'. PSR A < EMPILEMENT (POUR RSR) DE L'ENTRY < DANS L'ASSEMBLEUR. LAD LOADA < A=@DEMANDE DE RAPPEL ASSEMBLEUR. BR ALOAD < RETOUR A L'ASSEMBLEUR... <*********************************************************************** <* * <* CLOSE NVPC/NVPL/NVPF/NVPT. * <* * <*********************************************************************** CLOSE: EQU $ PSR A,X LA ACLL BSR ASPCCI < CLOSE NVPL. LA ACLC BSR ASPCCI < CLOSE NVPC. LA ACLF BSR ASPCCI < CLOSE NVPF. LA ACLT BSR ASPCCI < CLOSE NVPT. LA ACLB BSR ASPCCI < CLOSE NVPBID. PLR A,X RSR PAGE < < < E C R I T U R E S G F : < < WRITE: EQU $ LAD WRITET SVC 0 < ECRITURE SGF... JNE WRITE1 < ERREUR : EN FAIT LE SEUL CAS POSSIBLE < EST LE MANQUE DE PLACE SUR 'DKM'... RSR < OK, RETOUR NORMAL... WRITE1: EQU $ LA AMPLA BSR APRINT < ON LE DIT A L'UTILISATEUR... JMP ALTMOD < ET ON FAIT COMME SI UN ALT-MODE ETAIT < APPARU AFIN DE NE PAS PERDRE LE FICHIER < SOURCE... PAGE <*********************************************************************** <* * <* SP DE DELETE DU FICHIER POINTE PAR NVPBID * <* * <*********************************************************************** SPDELT: EQU $ LB ANOMTO < MOVE NOM LXI 10 MOVE IF ORDI-"T",XWOR%,,XWOR% LA AASSOT < !ASSIGN NVPBID=O, BSR ASPCCI LA AASSRT < !ASSIGN NVPBID=R BSR ASPCCI LAD DEMDFT < DELETE FICHIER NVPT SVC 0 XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LA XASSD STA &AMASSD LA AASSOT < !ASSIGN NVPBID=D- BSR ASPCCI LA XASSO STA &AMASSD < RESTAURE... XWOR%: VAL 0 RSR PAGE <*********************************************************************** <* * <* SP DE RELEVE D'UN NOM DE FICHIER. * <* * <*********************************************************************** SPRNOM: EQU $ STZ NPREC < RAZ DU NOMBRE PRECEDENT... LBY &ADBFEN < CHERCHER LE CARACTERE ' CPI "'" JE VUDNOM CPI " " < SAUTER LES BLANCS JNE NOMR JIX SPRNOM NOMR: EQU $ LA ADRFE < NOM DE FICHIER ERRONNE BR MERR VUDNOM: EQU $ ADRI 1,X < RELEVE L'ADRESSE DE DEBUT LBI 0 AUTQUO: EQU $ LBY &ADBFEN < CHERCHER L'AUTRE CARACTERE ' CPI "'" JE VUFNOM XR X,B < RELEVER LE NOM STBY &ANMFIC ADRI 1,X LR X,A CPI 19 JG NOMR XR X,B JIX AUTQUO JMP NOMR VUFNOM: EQU $ XR X,B LAI '04 < PLACER EOT EN FIN STBY &ANMFIC XR X,B LA ANMFID < RENDRE L'ADRESSE DANS A RSR PAGE < < < T R A I T E M E N T D E S M I N U S C U L E S : < < < ARGUMENT : < (A)=CODE ASCI, OU CODE DE CONTROLE DU COMPACTAGE. < < < RESULTAT : < (A)=CODE DE CONTROLE DU COMPACTAGE, OU < =CODE DE MAJUSCULE (SI MAJUSCULE ARGUMENT, OU < BIEN UNE MINUSCULE ALORS QUE L'IMPRIMANTE EST < ACTIVE), OU < =CODE DE MINUSCULE AVEC LE BIT DE PARITE... < < MINUS: EQU $ TBT BITPAR < EST-CE UN CODE DE COMPACTAGE ??? JC MINUS1 < OUI, RIEN A FAIRE... KMINUS:: VAL '60 < PREMIERE MINUSCULE... KARO:: VAL '40 < CARACTERE "A-ROND"... CPI KMINUS < EST-CE UNE MINUSCULE ??? JL MINUS1 < NON, UNE MAJUSCULE, RIEN A FAIRE... CPZ LP1 < OUI, EST-ON SUR L'IMPRIMANTE ??? JE MINUS2 < NON, LA VISU, OK... < < CAS DE L'IMPRIMANTE : < PSR A LA &AMTLP CP ALP < MAIS EST-CE BIEN L'IMPRIMANTE ??? PLR A JNE MINUS1 < NON, C'EST 'MT1', ON LAISSE LES < MINUSCULES... ADRI -KMINUS+KARO,A < OUI, SUR 'LP1' PAS DE MINUSCULES, ON < PASSE EN MAJUSCULES... JMP MINUS1 < VERS LA SORTIE... < < CAS DE LA VISU : < MINUS2: EQU $ SBT BITPAR < AFIN QUE LA VISU NE PRENNE PAS CE CODE < COMME UNE EXTENSION... < < SORTIE : < MINUS1: EQU $ RSR PAGE <*********************************************************************** <* * <* SP DE RELEVE DE CHAINE DE CARACTERES * <* * <*********************************************************************** SPRCAR: EQU $ STZ MARGRL < INITIALISATION DU IC MARGRL < COMPTAGE DES "OR". PSR W LA RARGRL LR A,W < INITIALISATION DE 'W' SUR LES < CONTEXTES DES "OR". RCAR3: EQU $ STZ NCHRL,W LBY &ADBFEN < CHERCHER LE CARACTERE ' CPI "'" JE VUDNAM CPI " " < SAUTER LES BLANCS JNE NAMR JIX RCAR3 NAMR: EQU $ LA ADRQUO < MANQUE UNE QUOTE BR MERR VUDNAM: EQU $ ADRI 1,X < RELEVE L'ADRESSE DE DEBUT LBI 0 LA NCHRL,W STA SAVEX < AU CAS OU "-" SUIVRAIT... CPI NCHMAX*NCARCH < PLUS QUE NCHMAX CHAINES? JL AUTQUA < NON RCAR2: EQU $ LA ADRRLC BR MERR AUTQUA: EQU $ LBY &ADBFEN < CHERCHER L'AUTRE CARACTERE ' CPI "'" JE VUFNAM CPI "\" < "'" DEMANDE ??? JNE VUFNA5 < NON... LAI "'" < OUI... VUFNA5: EQU $ XR X,B < RELEVER LA CHAINE LY NCHRL,W ADR Y,X STBY &XARGRL,W < STORER LE CARACTERE ADRI 1,X LAI '04 < A PRIORI,FIN DE CHAINE STBY &XARGRL,W SBR Y,X LR X,A CPI NCARCH < A < NBRE CARAC MAX PAR CHAINE? JG NAMR < NON,ERREUR XR X,B JIX AUTQUA JMP NAMR VUFNAM: EQU $ < FIN DE LA CHAINE I LA NCHRL,W ADRI NCARCH,A < INCREMENTER LE NOMBRE STA NCHRL,W < DE CHAINES RELEVEES CPZR B < AU MOINS UN CARACTERE? JNE VUFNA2 < OUI LA ADRFE < NON,ERREUR BR MERR VUFNA2: EQU $ ADRI 1,X VUFNA3: EQU $ LBY &ADBFEN < CHERCHER LE CARACTERE ' CPI "'" JE VUDNAM < RELEVER LA CHAINE I + 1 LBY &ADBFEN < ACCES AU CARACTERE COURANT, CPI "-" < NEGATE ??? JNE VUFNA4 < NON... PSR X LX SAVEX < OUI, X=INDEX DE L'EOT DE FIN... LBY &XARGRL,W SBT 8 < BIT DE PARITE : STBY &XARGRL,W < AFIN DE DISCRIMINER NEGATE... PLR X JMP RCAR1 < VERS LE CARACTERE SUIVANT. VUFNA4: EQU $ CPI "," < EST-CE UN LIMITEUR DE "OR" ??? JNE RCAR1 < NON... IC MARGRL < OUI, COMPTAGE... LA MARGRL < ET VALIDATION, CPI NOR JG RCAR2 < TROP... ADRI 2,W < OK, PASSAGE AU CONTEXTE SUIVANT. ADRI 1,X < PASSAGE AU CARACTERE SUIVANT. JMP RCAR3 RCAR1: EQU $ JIX VUFNA3 STZ NEGATE < CLEAR... PLR W RSR PAGE <*********************************************************************** <* * <* SP DE DEPLACEMENT SUR UNE LIGNE * <* * <*********************************************************************** SPDEP: EQU $ BSR LIST < LISTE CARTE LAD ECCRLF BSR ASPSIM LXI 0 < SAUVEGARDE DE LA CARTE LAD &ADBFEN LR A,B LA ABFEN0 LXI LBUFVI MOVE LAD LECENT BSR ASPSIM LXI -2*LBUFVI LBI 0 REM2: EQU $ LBY &ADBFEN CPI '06 < CTRL-F IGNORE JE REM23 CPI '0A JE REM23 < 'LF' ('CTRL-J') IGNORE... CPI '0B JE REM23 < 'CTRL-K' IGNORE... CPI '09 < CTRL-I ? JNE REM21 ADRI 1,B JMP REM23 REM21: EQU $ CPI '08 < CTRL-H ? JNE REM22 ADRI -1,B CPZR B JGE REM210 LBI 0 REM210: EQU $ JMP REM23 REM22: EQU $ CPI '04 < CTRL-D ? JE REM8 CPI '0D < RETURN ? JE REM8 CPI '20 JGE REM225 LA CLOCHE < ERREUR:BELL REM225: EQU $ XR X,B BSR AMINUS < TRAITEMENT DES MINUSCULES... STBY &ADBFEN ADRI 1,X XR X,B REM23: EQU $ JIX REM2 REM8: EQU $ PSR A LXI 0 < RANGEMENT CARTE ZONE DEBUT LAD &ADBFEN LB ABFEN0 LXI LBUFVI MOVE PLR A CPI '04 JE SPDEP < SI CTRL-D,MEME LIGNE RSR PAGE <*********************************************************************** <* * <* SP D'EXECUTION COMMANDE FI * <* * <*********************************************************************** SPEXFI: EQU $ LA INDFI CPI 1 < 1ERE COMMANDE DU FICHIER FI JNE SPEX1 < NON IC INDFI < OUI,OUVRIR LE FICHIER STZ INDIFI < INITIALISATION DE LA LECTURE LXI 0 LAI 'FF STBY &ASGFII LA ACLFI BSR ASPCCI LA AASSFI < !ASSIGN BSR ASPCCI LAD OPENFI < OPEN FICHIER FI SVC 0 STZ ENDFI < FIN DE FICHIER = FAUX JE SPEX1 LA ACLFI < CLOSE DU FICHIER FI BSR ASPCCI STZ INDFI < FIN DE FI LA ADRFI BR MERR < ERREUR SPEX1: EQU $ < A CE NIVEAU LE FICHIER FI EST OUVERT LA ABFFII < INITIALISATION ADRESSE BUFFER SLLS 1 < EN OCTET STA READFI+1 SPEX2: EQU $ < LECTURE FICHIER CPZ ENDFI < FIN DE FICHIER DEJA TROUVE JNE SPEX3 < OUI LX INDIFI < FIN DE SECTEUR LBY &ASGFII CPI 'FF JNE SPEX21 LAD READFI < OUI RELIRE UN SECTEUR SVC 0 JNE SPEX3 CPZ &ABFFII JL SPEX3 LXI 0 SPEX21: EQU $ LR X,Y < INDEX DEBUT DE CARTE LBI 0 SPEX22: EQU $ LBY &ASGFII < TRANSFERER LE CARACTERE XR X,B STBY &ADECFI ADRI 1,X XR X,B ADRI 1,X CPI 'FE JNE SPEX22 SBR X,Y NGR Y STX INDIFI < SAUVER L'INDEX DANS BUFFER LAI 0 < PAS FIN DE FICHIER FI LR Y,B JMP SPEX31 SPEX3: EQU $ LAI 1 < FIN DE FICHIER FI SPEX31: EQU $ JANE SPEX8 IC NCARFI < NBRE DE CARTES LUES + 1 LA NCARFI CP NFI < INFERIEUR A NFI? JL SPEX2 < OUI,RELIRE UNE CARTE CP MFI < SUPERIEUR A MFI? JG SPEX8 < OUI,FIN DE FICHIER FI < DECOMPACTION DE LA CARTE LXI -LBUFVI < METTRE LA C@ARTE A BLANC LA BLANC STA &ADBFEN JIX $-1 LXI -1 < INDICE IN LBI -2*LBUFVI < INDICE OUT SPEX40: EQU $ ADRI 1,X < FIN DE CARTE LBY &ADECFI CPI 'FE JE SPEX49 TBT 8 < REPETITION/TABULATION? JC SPEX41 XR X,B < NON-PLACER LE CARACTERE STBY &ADBFEN ADRI 1,X XR X,B JMP SPEX40 SPEX41: EQU $ RBT 8 CPI 80 < TABULATION OU REPETITION JGE SPEX42 ADRI -80,A < TABULATION LR A,B JMP SPEX40 SPEX42: EQU $ ADRI -80,A LR A,Y ADRI 1,X < CARACTERE A REPETER LBY &ADECFI XR X,B SPEX43: EQU $ STBY &ADBFEN < LE PLACER ADRI 1,X CPZR Y < EST-CE FINI? JE SPEX44 ADRI -1,Y JMP SPEX43 SPEX44: EQU $ XR X,B JMP SPEX40 SPEX49: EQU $ LXI 0 SPEX5: EQU $ ADRI -1,X LBY &ADBFEN CPI " " JE SPEX5 CPI '04 < EOT ? JNE SPEX6 LAI " " STBY &ADBFEN < EFFACEMENT DE L'EOT ADRI -1,X SPEX6: EQU $ ADRI 2*LBUFVI+1,X STX VATRA2 < LONGUEUR REELLE EN OCTETS STX SIMBOX < A CAUSE DE "<...". ADRI -2*LBUFVI+1,X SPEX61: EQU $ LBY &ADBFEN CPI '5F JNE SPEX62 LA BLANC STBY &ADBFEN ADRI -1,X JMP SPEX61 SPEX62: EQU $ RSR SPEX8: EQU $ IC ENDFI < FIN DE FICHIER FI PSR A,X LA ACLFI < CLOSE DU FICHIER FI BSR ASPCCI STZ INDFI < FIN DE FI PLR A,X JMP SPEX62 PAGE <*********************************************************************** <* * <* SP DE MOVE DU NOM DANS LES ASSIGN DE NVPT. * <* * <*********************************************************************** SPMOVT: EQU $ LB ANOMTN < MOVE DANS ASSIGN NEW LXI 10 MOVE RSR <*********************************************************************** <* * <* SP DE MOVE DU NOM DANS LES ASSIGN DE NVPF. * <* * <*********************************************************************** SPMOVF: EQU $ LB ANOMFO < MOVE DANS ASSIGN OLD LXI 10 MOVE LB ANOMFN < MOVE DANS ASSIGN NEW LXI 10 MOVE RSR PAGE <*********************************************************************** <* * <* SP D'OPEN NVPT NEW. * <* * <*********************************************************************** SPOPTN: EQU $ LA LUTBUF < PLACE DANS SGFOUT STA PLACT LA AASSNT < !ASSIGN BSR ASPCCI LAD DEMSGF < RELEVER LE NOM INTERNE SVC 0 LAD OPENTN < OPEN SVC 0 RSR <*********************************************************************** <* * <* SP D'OPEN NVPT OLD * <* * <*********************************************************************** SPOPTO: EQU $ LAD TNOM LB ANOMOT LXI 10 MOVE LA AASSTO BSR ASPCCI LAD OPENOT SVC 0 RSR PAGE <*********************************************************************** <* * <* SP OPEN NVPF OLD. * <* * <*********************************************************************** SPOPFO: EQU $ STZ INDIN < INITIALISATION DE LA LECTURE LXI 0 LAI 'FF STBY &ABSGII LA AASSOF < !ASSIGN BSR ASPCCI LAD OPENFO < OPEN SVC 0 STZ ENFILE < FIN DE FICHIER=FAUX RSR <*********************************************************************** <* * <* SP OPEN NVPF NEW. * <* * <*********************************************************************** SPOPFN: EQU $ LA AASSNF < !ASSIGN BSR ASPCCI LAD OPENFN < OPEN SVC 0 STZ ENFILE < FIN DE FICHIER=FAUX RSR <*********************************************************************** <* * <* SP OPEN NVPF OLD OU NEW. * <* * <*********************************************************************** SPOPFX: EQU $ BSR OPFO < OPEN OLD JE FOUV BSR OPFN < SINON, OPEN NEW JNE EROPFX FOUV: EQU $ RSR EROPFX: EQU $ BSR ACLOSE < CLOSE PARTIEL LA ADRFE < NOM DE FICHIER ERRONNE BR MERR PAGE <*********************************************************************** <* * <* SP DE DECOMPACTION D'UNE CARTE. * <* * <*********************************************************************** SPDECO: EQU $ LXI -LBUFVI < METTRE LA CARTE A BLANC LA BLANC STA &ADBFEN JIX $-1 LXI -1 < INDICE IN LBI -2*LBUFVI < INDICE OUT AUTDEC: EQU $ ADRI 1,X < FIN DE CARTE LBY &ADBFCO CPI 'FE JE VUFINC TBT 8 < REPETETION/TABULATION? JC TABUL XR X,B < NON - PLACER LE CARACTERE BSR AMINUS < TRAITEMENT DES MINUSCULES... STBY &ADBFEN ADRI 1,X XR X,B JMP AUTDEC TABUL: EQU $ RBT 8 CPI 80 < TABULATION OU REPETITION? JGE REPET ADRI -2*LBUFVI,A < TABULATION LR A,B JMP AUTDEC REPET: EQU $ ADRI -80,A < REPETITION LR A,Y ADRI 1,X < CARACTERE A REPETER LBY &ADBFCO XR X,B REPLEN: EQU $ BSR AMINUS < TRAITEMENT DES MINUSCULES... STBY &ADBFEN < LE PLACER ADRI 1,X CPZR Y < EST-CE FINI? JE FINREP ADRI -1,Y < NON - CONTINUER JMP REPLEN FINREP: EQU $ XR X,B JMP AUTDEC VUFINC: EQU $ RSR PAGE <*********************************************************************** <* * <* SP DE COMPACTAGE D'UNE CARTE. * <* * <*********************************************************************** SPCOMP: EQU $ LXI -LBUFVI*2 RZPAR1: EQU $ LBY &ADBFEN RBT BITPAR < ON NETTOIE A PRIORI LES PARITES (CAS DE < BANDES MAGNETIQUES "EXTERIEURES"). STBY &ADBFEN JIX RZPAR1 LXI 0 < ELIMINER LES BLANCS DE FIN REVBLA: EQU $ ADRI -1,X LBY &ADBFEN CPI " " JE REVBLA ADRI 1,X < METTRE FIN DE CARTE LAI 'FE STBY &ADBFEN LXI -2*LBUFVI < INDEX IN LBI 0 < INDEX OUT AUTCAR: EQU $ LYI 0 < COMPTE DE REPETITION NEWCAR: EQU $ LBY &ADBFEN < CARACTERE PRECEDENT CPI 'FE < FIN DE CARTE? JE FINCAR REVCAR: EQU $ ADRI 1,X < CARACTERE SUIVANT CPBY &ADBFEN JNE CARDIF ADRI 1,Y < MEME JMP REVCAR CARDIF: EQU $ CPZR Y < EST-CE UNE REPETITION? JG REPCAR BSR PLCO < NON - LE PLACER JMP NEWCAR REPCAR: EQU $ CPI " " < TABULATION? JNE PATAB LR X,A < OUI - LA PLACER CPI -2*LBUFVI+80 JLE REPCA1 LAI " " JMP PATAB REPCA1: EQU $ ADRI 2*LBUFVI,A SBT 8 BSR PLCO JMP AUTCAR PATAB: EQU $ XR A,Y < REPETITION CPI 40 < SUPERIEUR A 40? JGE PLUS40 ADRI 80,A < NON - LA PLACER SBT 8 BSR PLCO LR Y,A BSR PLCO JMP AUTCAR PLUS40: EQU $ LR A,W < PLUS DE 40 LAI 119 < PLACER 40 SBT 8 BSR PLCO LR Y,A BSR PLCO LR W,A < PLACER LE RESTE CPI 80 JGE PLUS80 ADRI 40,A SBT 8 BSR PLCO LR Y,A BSR PLCO JMP AUTCAR PLUS80: EQU $ LAI 119 SBT 8 BSR PLCO LR Y,A BSR PLCO LR W,A SBT 8 BSR PLCO LR Y,A BSR PLCO JMP AUTCAR FINCAR: EQU $ BSR PLCO < PLACER 'FE RSR PAGE <*********************************************************************** <* * <* SP DE PLACEMENT D'UN CARACTERE COMPACTE. * <* * <*********************************************************************** SPPLCO: EQU $ XR X,B STBY &ADBFCO ADRI 1,X XR X,B RSR PAGE <*********************************************************************** <* * <* SP DE LISTE D'UNE CARTE * <* * <*********************************************************************** SPLIST: EQU $ CPZ UTILP < SI ON UTILISE P JE LIST11 LX P < PRENDRE LA BONNE LONGUEUR JMP LIST22 LIST11: EQU $ LXI -1 < SINON CALCULER LA LONGUEUR REVBL: EQU $ LBY &ADBFEN CPI " " JNE LGEFF ADRI -1,X JMP REVBL LGEFF: EQU $ STX SAVEX < SAVEX=INDEX DE FIN DE MESSAGE. STZ JUSTS < JUSTS=COMPTEUR D'ESPACES EXISTANTS. LIST56: EQU $ LBY &ADBFEN CPI " " JNE LIST57 IC JUSTS < COMPTAGE DES ESPACES EXISTANTS. LIST57: EQU $ ADRI -1,X LR X,A CP JUSTF < EST-CE FINI ??? JGE LIST56 < NON... LA JUSTS SB JUSTD < ON IGNORE DES ESPACES EN TETE... STA JUSTS LX SAVEX < OUI, RESTAURE X=INDEX DE FIN... ADRI 2*LBUFVI+2,X LIST22: EQU $ STX WRITEO+2 CPZ JUSTS JLE LIST51 < LE MESSAGE NE CONTENANT AUCUN ESPACE, < ON NE PEUT EN RAJOUTER... LAI 2*LBUFVI+1 < OUI : SB WRITEO+2 < A=NOMBRE D'ESPACES A DROITE, JAE LIST51 < RIEN A RAJOUTER, C'EST FINI... CP JUSTM < TROP ??? JG LIST51 < OUI, ON NE FAIT RIEN... LR A,Y < OK, Y=NOMBRE D'ESPACES A RAJOUTER... LIST54: EQU $ LXI -1 < X=INDEX DE BOUT DE BUFFER, AD JUSTS < POUR FAIRE UNE DIVISION ADRI -1,A < PAR EXCES. SARD 16 DV JUSTS STA JUSTS < JUSTS=NOMBRE D'ESPACES A RAJOUTER < PAR ESPACE EXISTANT. LB SAVEX < B=INDEX DE FIN DE MESSAGE. LIST52: EQU $ XR B,X LBY &ADBFEN < A=CARACTERE COURANT DU MESSAGE. XR B,X CPI " " < ESPACE ??? JNE LIST53 < NON, ON RANGE... PSR B LB JUSTS < NOMBRE D'ESPACE A RAJOUTER. LIST59: EQU $ CPZR Y < RESTENT'ILS DES BLANCS ??? JE LIST58 < NON... ADRI -1,Y < OUI, ON LES DECOMPTE... STBY &ADBFEN < ON LE DUPLIQUE... ADRI -1,X ADRI -1,B < ENCORE ??? CPZR B JG LIST59 < OUI... LIST58: EQU $ PLR B LIST53: EQU $ STBY &ADBFEN < RANGEMENT DU CARACTERE COURANT, ADRI -1,X < ET REGRESSION ADRI -1,B < DES INDEX. LR B,A CP JUSTF < EST-CE FINI ??? JGE LIST52 < NON, AU CARACTERE SUIVANT... LAI 2*LBUFVI+1 STA WRITEO+2 < MAJ DE LA DEMANDE... LR A,X < POUR LA LONGUEUR DE LA CARTE. LIST51: EQU $ CPZ LISNO JNE NUMERL LA ABFEN0 < PAS DE NUMEROTATION LB ABFSO1 LXI LBUFVI MOVE LAI " " STA &AA6D < AFIN DE CADRER CORRECTEMENT... LAD DEM6D BSR ASPSIM < ET ON SIMULE LE '6D ECRASE... LA LP1 TBT 15 < "MT1"/"LP1" ??? JNC ECRCAR < NON, LA VISU... LA &AMTLP CP AMT < EST-CE "MT1" ??? JNE ECRCAR < NON... IC WRITEO+1 < OUI, ON ENLEVE LE PREMIER OCTET, < AFIN D'AVOIR DES ARGUMENTS PAIRS... LA WRITEO+2 TBT 15 < LA LONGUEUR EST-ELLE PAIRE ??? JNC ECRKAR < OUI, OK... LR A,X < NON : IC WRITEO+2 < ON LA REND PAIE... LAI " " STBY &ABFSOR < ET ON COMPLETE... ECRKAR: EQU $ CPZ RIDGE < GENERE-T'ON UNE BANDE RIDGE ??? JE ECRCAR < NON... LX WRITEO+2 < OUI, LAI " " STBY &ABFSOR ADRI 1,X LAI '0A STBY &ABFSOR < ON IMPLANTE UN <LINE-FEED> AU BOUT DU < BUFFER (ET UN <SPACE> POUR LA PARITE DE < LA LONGUEUR... IC WRITEO+2 IC WRITEO+2 JMP ECRCAR NUMERL: EQU $ LR X,A < SUPPRIMER 8 CARACTERES DE FIN LGNORM: EQU $ ADRI 8,X STX WRITEO+2 LB ABFSO5 < PLACER LA CARTE LA ABFEN0 LXI LBUFVI MOVE LB ABFSO1 < METTRE LE NUMERO DE CARTE LAD NOLIST+1 LXI 3 MOVE LA BLANC < METTRE 2 BLANC STA &ABFSO4 ECRCAR: EQU $ CPZ JUSTP < SAUT DE PAGE ??? JE ECRCAS < NON... CPZ KJUSTP < OUI, A FAIRE MAINTENANT ??? JNE ECRCAT < NON... LA JUSTP < OUI, STA KJUSTP < REINITIALISATION DU COMPTEUR... LAD DEMP < ET BSR ASPSIM < SAUT DE PAGE... ECRCAT: EQU $ DC KJUSTP < DECOMPTAGE DES LIGNES... ECRCAS: EQU $ < < MISE EN PLACE DU BIT DE PARITE (AU < CAS OU ON GENERERAIT UNE BANDE < MAGNETIQUE "EXTERIEURE") : < LA LP1 < EST-CE LA VISU ??? TBT 15 JNC PPAR3 < OUI, RIEN A FAIRE... LA &AMTLP CP AMT < EST-CE "MT1" ??? JNE PPAR3 < NON, PARITES INUTILES... LA WRITEO+1 PSR A,B,X < SAVE L'ADDRESSE DU BUFFER. LXI 0 < X=INDEX DU BUFFER, SLRS 1 < CONVERSION EN UNE ADRESSE MOT, ADCR X < X=INDEX INITIAL DU BUFFER. LR X,B < SAVE L'INDEX DU PREMIER CARACTERE... SBT 0 STA WRITEO+1 < GENERATION D'UN RELAI TEMPORAIRE VERS < LE BUFFER. PPAR: EQU $ LBY &WRITEO+1 < ACCES A UN CARACTERE : CPR X,B < EST-CE LE PREMIER ??? JNE PPAR4 < NON, ON NE TESTE PAS '6D ("M" MINUS- < CULE)... CPI '6D < EST-ON SUR VISU ??? JE PPAR2 < OUI, ON NE MODIFIE PAR '6D... PPAR4: EQU $ CPZ RIDGE < GENERE-T'ON UNE BANDE RIDGE ??? JNE PPAR1 < OUI, PAS DE PARITE... PTY < CALCUL DE LA PARITE : JNC PPAR1 < PAIRE, SBT BITPAR < IMPAIRE... PPAR1: EQU $ STBY &WRITEO+1 < MISE A JOUR DU BUFFER... PPAR2: EQU $ ADRI 1,X < PROGRESSION DE L'INDEX, LR X,A CP WRITEO+2 < EST-CE FINI ??? JL PPAR < NON... PLR A,B,X < OUI, STA WRITEO+1 < ON RESTAURE... PPAR3: EQU $ < < ENVOI DU BUFFER : < LAD WRITEO < ECRIRE LA LIGNE BSR ASPSIM LRM A WORD BUFSOR-ZERO*2+1 STA WRITEO+1 < ON RESTAURE AU CAS DE "MT1"... LAI '6D STA &AA6D < RESTAURATION DU '6D A PRIORI... RSR PAGE <*********************************************************************** <* * <* SP DE PERFORATION D'UNE CARTE. * <* * <*********************************************************************** SPPERF: EQU $ CPZ LISNO JE PERCAR LXI -4 < PERFO AVEC NUMEROTATION LAD &ABINPC LR A,B LAD NOLIST LXI 4 MOVE PERCAR: EQU $ LXI -80 AUTPC: EQU $ LBY &ABINPC < RELEVER LE CARACTERE ANDI '7F CPI '20 JGE VOISUP CPI '04 < EOT - SPECIAL JNE VUEOT LAI '1F JMP BONCAR VOISUP: EQU $ CPI '5F JLE BONCAR VUEOT: EQU $ LAI "?" < CARACTERE NON RECONNU BONCAR: EQU $ PSR X < PERFORER LE CARACTERE LR A,X LA &ACOD STA &ABFSGO LAD DEMPCH SVC 0 IF ORDI-"S",X102,,X102 LX CTPUSY TEMPO1: EQU $ HALT CPZR X < ATTENTE TERMINEE ??? JNE TEMPO1 < NON, ON ATTEND... X102: VAL 0 PLR X JIX AUTPC < PASSER AU SUIVANT LAD SLEEP < ATTENDRE 4 SECONDES SVC 0 RSR PAGE <*********************************************************************** <* * <* SP DE RECOPIE DE NVPF SUR NVPT JUSQU'A LA CARTE N. * <* * <*********************************************************************** SPRECN: EQU $ LA NOCAR CP N < EST-ON RENDU A N? JNE LIRF RSR < OUI - RETOUR LIRF: EQU $ BSR LECF < NON - RECOPIER UNE CARTE JANE SPRECN < FIN DE FICHIER... CPZ INDED < EST-ON SOUS 'FC' ??? JNE SPRECN < OUI, PAS DE RECOPIE... BSR ECRT JMP SPRECN < PASSER A LA CARTE SUIVANTE PAGE <*********************************************************************** <* * <* SP DE SUPPRESSION DES CARTES N A M. * <* * <*********************************************************************** SPSUNM: EQU $ BSR RECN < RECOPIE JUSQU'A N LIRVID: EQU $ LA NOCAR CP M < EST-ON RENDU A M? JLE PASM RSR < OUI - RETOUR PASM: EQU $ BSR LECF < NON - LIRE UNE CARTE JMP LIRVID < ET PASSER A LA SUIVANTE PAGE <*********************************************************************** <* * <* SP D'AJOUT DE CARTES JUSQU'A ":F". * <* * <*********************************************************************** SPAJOU: EQU $ STZ LISNO < PAS DE NUMEROTATION... CPZ CR1 < ASSIGN CR1? JE PASCR1 LA AASSCR BSR ASPCCI JE PASCR1 IF ORDI-"S",XWOR%,,XWOR% LA &AMTCR CP AMT < SI C'EST 'MT1', ON ACCEPTE L'ERREUR, < AU CAS OU ON AURAIT DEJA 'MT1' PAR < UNE ASSIGNATION ANTERIEURE, SINON, < LA PREMIERE E/S DESSUS FAUTERA... JE PASCR1 < OUI, 'MT1'... XWOR%: VAL 0 RSR PASCR1: EQU $ CPZ COMNOR < COMPACTE OU NORMAL? JNE AJCOM1 < EN FAIT AJCOMP MAIS > YY7 CPZ CR1 < NORMAL - CR1? JE PASCR2 LAI NVPC < OUI - UNITE NVPC STBY LECENT LA LGENT < LG E/S STA LECENT+2 CPZ BATCH < CR ET VISU,PAS D'ECHO JNE PASCR2 LA LECENT RBT 15 STA LECENT LAI NVPBID < DEMANDE BIDON STBY ECCRLF PASCR2: EQU $ LA CRLFSU < NORMAL STA CRLF LA LECENT+1 LB LECENT+2 PSR A,B AJSYMB: EQU $ CPZ UTILP < SI ON TIENT COMPTE DE P JE VOIRP2 LA NOCAR < A-T-ON FINI CP M JG PASLUN < OUI-FIN IC NOCAR < NON-COMPTER LA CARTE BSR RLCT < LA LIRE JANE PASLUN < SI FIN DE FICHIER,RETOUR BSR DECO < LA DECOMPACTER LAI -2*LBUFVI-1 AD P LR A,X NGR A STA LECENT+2 < LONGUEUR A LIRE LA ABFEN0 < MODIFIER L'ADRESSE D'ENTREE SLLS 1 AD P ADRI -1,A STA LECENT+1 LAI " " < MISE A BLANC DE LA FIN DE LIGNE VOIRP1: EQU $ STBY &ADBFEN JIX VOIRP1 BSR LIST < LISTE DU DEBUT DE LA LIGNE JMP VOIRP3 VOIRP2: EQU $ LXI -2*LBUFVI LAI " " ETI8: EQU $ STBY &ADBFEN < MISE DE LA CARTE A BLANC. JIX ETI8 CPZ INDFI < EST-ON SOUS FI? JE VORP21 < NON BSR EXFI < OUI,LIRE UNE CARTE SUR FICHIER FI CPZ ENDFI < FIN DE FICHIER FI? JE VORP20 < NON IC INDFI < CAR RAZER DANS EXFI LA ADRFI3 < OUI ERREUR BR MERR VORP20: EQU $ JMP VOIRP5 VORP21: EQU $ LAD ECCRLF < LIRE UNE CARTE BSR ASPSIM VOIRP3: EQU $ CPZ LECENT+2 < SI LONGUEUR VIDE JLE VOIRP5 LAD LECENT BSR ASPSIM < LECTURE BSR ASPBOX STB VATRA2 < LONGUEUR REELLE EN OCTETS CPZR X JNE PASLUN VOIRP5: EQU $ CPZ UTILP < TEST DE FIN JNE SUITAJ LA &ABFEN0 < EST-CE LA FIN DE SEQUENCE? CP &ACMEND JNE SUITAJ PASLUN: EQU $ LA CRLFET < OUI - RESTAURER ETOILE STA CRLF LAI NVPI < RESTAURER NVPI STBY LECENT LA LECENT < RESTAURER L'ECHO SBT 15 STA LECENT LAI NVPO < RESTAURER NVPO STBY ECCRLF IF ORDI-"S",XWOR%,,XWOR% LA &AMTCR CP AMT < ETAIT-CE 'MT1' ??? JE PRELMT < OUI, DONC IL NE FAUT PAS DESASSIGNER, < AU CAS OU ON LIRAIT ENCORE, AFIN D'EVITER < UN REMBOBINAGE LORS DE LA REASSIGNATION. XWOR%: VAL 0 LA AASCRS < CLOSE LECTEUR BSR ASPCCI IF ORDI-"S",XWOR%,,XWOR% PRELMT: EQU $ XWOR%: VAL 0 PLR A,B STA LECENT+1 STB LECENT+2 RSR < OUI - RETOUR AJCOM1: EQU $ JMP AJCOMP AJSYM1: JMP AJSYMB SUITAJ: EQU $ CPZ UTILP JNE PADEP LB VATRA2 LR B,X ADRI -2*LBUFVI,X LAI " " STBY &ADBFEN JIX $-1 LXI -2*LBUFVI SUIT1: EQU $ LBY &ADBFEN RBT 8 < ELIMINATION DE LA PARITE A PRIRI... IF ORDI-"S",XWOR%,,XWOR% CPZ MODE < Y-A-T'IL UN TRANSCODAGE A FAIRE ??? JE SUIT3 < NON, ASCI... CPI " " < SERAIT-CE 'BLANC' ASCI ??? JE SUIT3 < OUI, ON LE LAISSE... PSR X < OUI : EBCDIC --> ASCI... LXI UNDEFE < A PRIORI UNDEFINI... CPI FIRSTE JL SUIT4 < UNDEFINI... CPI LASTE JG SUIT4 < UNDEFINI... LR A,X < OK, L'INDEX DE TRANSCODAGE EST LE CODE < EBCDIC DU CARACTERE : SUIT4: EQU $ LBY &ATRANS < CE QUI DONNE LE CODE ASCI : PLR X SUIT3: EQU $ XWOR%: VAL 0 PSR A LA &AMTCR CP AMT < EST-ON SUR 'MT1' ??? PLR A JE SUITMT < OUI, ON VA SUPPRIMER TOUS LES 'CTRL-XX', < Y COMPRIS 'RC', 'EOT'... CPI '06 JE SUIT2 CPI '09 JE SUIT2 CPI '08 JE SUIT2 CPI '04 JE SUIT2 CPI '0D JE SUIT2 SUITMT: EQU $ CPI '20 JGE SUIT2 LA CLOCHE < ERREUR : BELL... SUIT2: EQU $ BSR AMINUS < TRAITEMENT DES MINUSCULES... STBY &ADBFEN JIX SUIT1 LR B,X ADRI -2*LBUFVI-1,X LBY &ADBFEN CPI '04 JNE PADEP LAI " " STBY &ADBFEN < ON LE REMPLACE PAR UN BLANC. LA RETOUR STA CRLF BSR DEP LA CRLFSU STA CRLF PADEP: EQU $ CPZ BATCH < SI BATCH, PAS DE EOT JNE PASEOT BSR ASPBOX < RELEVER LA LONGUEUR DE LA CARTE LR B,A CPZ UTILP JE VOIRP4 AD P ADRI -1,A VOIRP4: EQU $ LR A,X ADRI -2*LBUFVI-1,X LBY &ADBFEN < CARTE FINIE PAR EOT? CPI '04 < EOT ??? JE TREOT < OUI, SUPPRIME... CPI '0D < OU RETURN? JNE PASEOT TREOT: EQU $ ADRI -1,X < OUI - L'EFFACER LAI " " < COMPLETER AVEC DES BLANCS REBLAN: EQU $ JIX PLBL PASEOT: EQU $ LXI -2*LBUFVI < ELIMINER LES CTL-H LBI -2*LBUFVI RECTLH: EQU $ LBY &ADBFEN CPI '08 < CTL-H? JNE PACTLH ADRI -1,B < OUI - RECULER LR B,A < VERIFIER LIMITE RECUL CPI -2*LBUFVI JGE AUCTLH LBI -2*LBUFVI JMP AUCTLH PACTLH: EQU $ XR X,B < PAS CTL-H - PLACER LE CARAC. BSR AMINUS < TRAITEMENT DES MINUSCULES... STBY &ADBFEN ADRI 1,X XR X,B AUCTLH: EQU $ JIX RECTLH LR B,X < COMPLETER AVEC DES BLANCS LAI " " STBY &ADBFEN JIX $-1 BSR COMP < COMPACTER ET ECRIRE BSR ECRT JMP AJSYM1 PLBL: EQU $ STBY &ADBFEN JMP REBLAN PAGE <*********************************************************************** <* * <* AJOUT DE CARTES COMPACTEES. * <* * <*********************************************************************** AJCOMP: EQU $ CPZ CR1 < CR1? JE PASCR3 LAI NVPC < OUI - UNITE NVPC STBY LECCOM PASCR3: EQU $ LA BATCH < COMPACTE AUTORISE? OR CR1 JAE NOCOMP NWFIBI: EQU $ STZ NOCCP < NO CARTE=0 LYI 0 < INDEX SUR BINAIR LBI 0 < INDEX SUR ENTCOM LXI -1 < INDEX SUR BINAIR RELCOM: EQU $ ADRI 1,X < CARACTERE SUIVANT CPR Y,X JL PALICM PSR B < LIRE UNE CARTE IC NOCCP RETER1: EQU $ LAD LECCOM SVC 0 JNE PASLUC LXI -76 < INDEX SUR ENTBIN LA &ABINEN < FIN? CP DEUXPT JNE PAFAJC LXI -75 LA &ABINEN CP CARACF JNE PAFAJC PASLUC: EQU $ BSR RENI < LIBERER LE LECTEUR PLR B RSR PAFAJC: EQU $ STZ CHEKSM < INIT CHECKSUM LYI -114 < INDEX SUR BINAIR LXI -75 AUTBNR: EQU $ LA &ABINEN < RELEVER 2 PREMIERS MOTS LR A,B ADRI -1,X LA &ABINEN SLRS 4 < PLACER LES 3 CARACTERES UTILES SLRD 4 XR X,Y BSR AJCK LAI 0 SLLD 8 BSR AJCK LAI 0 SLLD 8 BSR AJCK XR X,Y ADRI 2,X < PASSER AUX DEUX MOTS SUIVANTS JIX AUTBNR LAI 0 < CALCUL NUMEROTATION+CHECKSUM LBI 0 LR A,W LXI -4 RECNMT: EQU $ LA &ABINEF < CARACTERE SUIVANT SCLD 2 PSR X DBT JANE PANULL < COLONNE BLANCHE LXI 0 PANULL: EQU $ LR X,A < LE RAJOUTER SUR LE NOMBRE XR A,W PSR B MP DIX ADR B,W PLR B PLR X JIX RECNMT < CARACTERE SUIVANT LA CHEKSM < SI CHECKSUM=0 , ALORS =1 JANE CHEKNN IC CHEKSM CHEKNN: EQU $ LR B,A < VERIFIER CHECKSUM JAE VERNUM < CHECKSUM=0, PAS DE VERIF. EOR CHEKSM JANE ERNUM VERNUM: EQU $ LR W,A < VERIFIER NUMEROTATION CP NOCCP JNE ERNUM RETERN: EQU $ LXI -114 < INDEX SUR BINAIR PLR B PALICM: EQU $ LBY &ABINAR < TRANSFERER CARACTERE SUIVANT XR X,B STBY &ADBFCO ADRI 1,X XR X,B CPI 'FE < FIN DE CARTE? JL RELCOM CPI 'FF < FIN DE SECTEUR JE NWFIBI PSR X,Y < FIN DE CARTE BSR ECRT < L'ECRIRE PLR X,Y LBI 0 JMP RELCOM ERNUM: EQU $ LR W,A < ERREUR - METTRE LE NUMERO BSR ININ < DE LA CARTE DANS LE MESSAGE LAD NOLIST LB ADRLI1 LXI 4 MOVE LA ADRLIR < SORTIR LE MESSAGE BSR MERR <<<< CPZ BATCH <<<< JNE RETERN LAD RETCCI SVC 0 JMP RETER1 NOCOMP: EQU $ BSR RENI < LIBERER LECTEUR LA ADRCOM BR MERR PAGE <*********************************************************************** <* * <* PLACEMENT D'UN CARACTERE EN LECTURE COMPACTE + CHECKSUM. * <* * <*********************************************************************** SPAJCK: EQU $ JAE AJCK1 < CARACTERE NUL STBY &ABINAR < PLACER EOR CHEKSM < CHECKSUM STA CHEKSM ADRI 1,X AJCK1: EQU $ RSR <*********************************************************************** <* * <* RESTAURER NVPI ET LIBERER LE LECTEUR * <* * <*********************************************************************** SPRENI: EQU $ LAI NVPI < RESTAURER NVPI STBY LECCOM LA AASCRS < LIBERER LECTEUR BSR ASPCCI RSR <*********************************************************************** <* * <* RELEVER DE N ET M S'ILS EXISTENT * <* * <*********************************************************************** SPLINM: EQU $ STZ NOCAR BSR RELN LA VATRA1 PSR A < SAVE L'INDICATEUR DE PRESENCE DE 'N'... BSR RELM LA M < SI M=N, M='7FFF CP N JNE PASLF LA SETFFF STA M PASLF: EQU $ PLR A < RESTAURE : (A)='VATRA1'... CPZ N < 'N' EST-IL NUL ??? JNE PASNZ < NON... CPZ INDFI < OUI, EST-ON SOUS 'FI' ??? JE AUTOF1 < NON, ON FAIT DONC (N)=1. JANE AUTOF1 < OUI, MAIS 'N' ETAIT ABSENT... LA FIRCAR < OUI, ON VA FAIRE : < (N)='FIRCAR', ET < (M)='LASCAR'... JAGE AUTOF2 < OK, IL Y A UNE PREMIERE CARTE... LA ADRSEQ < ERREUR, ELLE N'EXISTE PAS... BR MERR AUTOF2: EQU $ STA N < (N)='FIRCAR', LA LASCAR STA M < (M)='LASCAR'. JMP PASNZ AUTOF1: EQU $ IC N < ON N'EST PAS SOUS 'FI' : (N)=1... PASNZ: EQU $ LA M < (A)='M' ON NE SAIT JAMAIS... RSR PAGE <*********************************************************************** <* * <* RECOPIE DE NVPF SUR NVPT DE W CARTES * <* * <*********************************************************************** SPRCOP: EQU $ STZ VATRA1 RCOP2: EQU $ CPZR W < FIN DE COPIE? JLE RCOP3 BSR RLCT < NON - LIRE JANE RCOP1 < FIN DE FICHIER? BSR ECRT < NON - ECRIRE ADRI -1,W < CARTE SUIVANTE JMP RCOP2 RCOP1: EQU $ IC VATRA1 RCOP3: EQU $ RSR <*********************************************************************** <* * <* LECTURE DE NVPF JUSQU'A N * <* * <*********************************************************************** SPRLIR: EQU $ DC N < RENDU A N? CPZ N JLE RLIR1 BSR RLCT < NON - LIRE JAE SPRLIR RLIR1: EQU $ RSR <*********************************************************************** <* * <* POSITIONNEMENT DES ADRESSES DE BUFFERS * <* * <*********************************************************************** SPPOSB: EQU $ LA ABFSGI < @ BUFFER ENTREE SLLS 1 STA READF+1 LA ABFSGO < @ BUFFER SORTIE SLLS 1 STA WRITET+1 RSR PAGE <*********************************************************************** <* * <* SP DE RELEVE DE N. * <* * <*********************************************************************** SPRE1N: EQU $ BSR NOMB < RELEVER N+1 POUR INSERER ADRI 1,A JMP CPNC SPRELN: EQU $ BSR NOMB < RELEVE LE NOMBRE EN POSITION 2 CPNC: EQU $ CP NOCAR < ERREUR SI NOCAR>N JGE RETN KOMP10: EQU $ LA ADRSEQ BR MERR RETN: EQU $ STA N CPI 1 JE KOMP9 < '0' DEMANDE... LA SSEDIT CPI 2 < SI SUPERIEUR A '0', ON REGARDE < ALORS S'IL S'AGIT DE 'KO' ??? JE KOMP10 < OUI, REFUSE... LA N < RESTAURE 'A'... KOMP9: EQU $ RSR PAGE <*********************************************************************** <* * <* SP DE RELEVE DE M. * <* * <*********************************************************************** SPRELM: EQU $ LBY &ADBFEN < CHERCHER LE TIRET CPI "-" JE RELEVM CPI " " < SAUTER LES BLANCS JNE PASVM JIX SPRELM PASVM: EQU $ LA N < PAS DE TIRET, M=N STA M RSR RELEVM: EQU $ BSR NOMB < RELEVER LE NOMBRE CP N < ERREUR SI N>M JGE RETM LA ADRSEQ BR MERR RETM: EQU $ STA M RSR PAGE <*********************************************************************** <* * <* SP DE LECTURE DU FICHIER NVPF. * <* * <*********************************************************************** SPLECF: EQU $ BSR RLCT < LIRE UNE CARTE JANE ERLECF < FIN DE LECTURE IC NOCAR < NOCAR=NOCAR+U RSR < A=0 : PAS FIN DE FICHIER. ERLECF: EQU $ CPZ N < POSITIONNEMENT EN FIN DE FICHIER ??? JGE ZZ001 < NON, DONC ERREUR... LY NOCAR < OUI, DONC NOCAR STY N < REMPLACE N (ASTUCE...). RSR < A#0 : FIN DE FICHIER. ZZ001: EQU $ LA ADRSEQ < ERREUR SI MANQUE DE CARTES BR MERR PAGE <*********************************************************************** <* * <* SP DE LECTURE D'UNE CARTE SUR NVPF. * <* * <*********************************************************************** SPRLCT: EQU $ CPZ ENFILE < FIN DE FICHIER DEJA TROUVEE? JNE ENDF < OUI LX INDIN < FIN DE SECTEUR LBY &ABSGII CPI 'FF JNE PLDSF LAD READF < OUI - RELIRE UN SECTEUR SVC 0 JNE ENDF CPZ &ABFSGI JL ENDF LXI 0 PLDSF: EQU $ LR X,Y < INDEX DEBUT CARTE LBI 0 REVFE: EQU $ LBY &ABSGII < TRANSFERER LE CARACTERE XR X,B STBY &ADBFCO ADRI 1,X XR X,B ADRI 1,X CPI 'FE JE FINLEC JMP REVFE FINLEC: EQU $ SBR X,Y NGR Y STX INDIN < SAUVER L'INDEX DANS BUFFER LAI 0 < PAS FIN DE FICHIER LR Y,B < LONGUEUR CARTE DANS B RSR ENDF: EQU $ IC ENFILE LAI 1 < FIN DE FICHIER RSR PAGE <*********************************************************************** <* * <* SP D'ECRITURE D'UNE CARTE SUR NVPT. * <* * <*********************************************************************** SPECRT: EQU $ LX PLACT < Y-A-T'IL DE LA PLACE DANS BUFFER CPR X,B JL PLDST NGR X < NON - PLACER FIN DE SECTEUR LAI 'FF STBY &ABSGOF BSR AWRITE < ECRITURE SGF. LX LUTBUF PLDST: EQU $ LR X,Y < CALCUL DE LA NOUVELLE PLACE SBR B,Y STY PLACT NGR X < DEPLACER LA CARTE LYI 0 ATPLCM: EQU $ XR X,Y LBY &ADBFCO ADRI 1,X XR X,Y STBY &ABSGOF ADRI 1,X ADRI -1,B CPZR B JG ATPLCM RSR PAGE <*********************************************************************** <* * <* SP D'INITIALISATION DE LA NUMEROTATION. * <* * <*********************************************************************** SPININ: EQU $ LXI 7 < LE NOMBRE EST DANS A LR A,B NEWCHF: EQU $ LAI 0 < DIVISER PAR DIX DV DIX XR A,B ORI '30 < PLACER LE CARACTERE STBY &ADNOLS CPZR B < EST-CE FINI? JE FINCHF JDX NEWCHF FINCHF: EQU $ LAI " " < COMPLETER AVEC DES BLANCS RECHF: EQU $ JDX NWBL STBY &ADNOLS RSR NWBL: EQU $ STBY &ADNOLS JMP RECHF <*********************************************************************** <* * <* SP D'INCREMENTATION DE LA NUMEROTATION. * <* * <*********************************************************************** SPINCN: EQU $ LXI 7 REPSUI: EQU $ LBY &ADNOLS CPI " " JNE NOBLAN LAI "1" JMP PASREP NOBLAN: EQU $ ADRI 1,A CPI "9" JLE PASREP LAI "0" STBY &ADNOLS ADRI -1,X JMP REPSUI PASREP: EQU $ STBY &ADNOLS RSR PAGE <*********************************************************************** <* * <* SP DE RELEVE D'UN NOMBRE. * <* * <*********************************************************************** SPNOMB: EQU $ EORR W < NOMBRE=0 LBI 1 < ET ABSENT A PRIORI STB VATRA1 DEBNB: EQU $ JIX VOICHI FINCH: EQU $ XR A,W < RESULTAT DANS A CPZ VATRA1 < NOMBRE TROUVE ??? JE FINCHR < OUI... LA NPREC < NON, ON PREND LE PRECEDENT... FINCHR: EQU $ STA NPREC < ET SAVE LE NOMBRE COURANT... RSR VOICHI: EQU $ LBY &ADBFEN < CHERCHER LE 1ER CHIFFRE CPI " " < SAUTER LES BLANCS JE DEBNB NEWCH: EQU $ LBY &ADBFEN CPI "0" JL FINCH CPI "9" JG FINCH STZ VATRA1 < PRESENT ANDI 'F < RELEVER LE CHIFFRE ET PASSER XR A,W < AU SUIVANT MP DIX ADR B,W JIX NEWCH JMP FINCH < < IDEM AVEC 0 PAR DEFAUT : < SPNOMC: EQU $ BSR NOMB < RECUPERATION DU NOMBRE : CPZ VATRA1 < EST-IL PRESENT ??? JE NOMC1 < OUI... LAI 0 < NON, 0 PAR DEFAUT... NOMC1: EQU $ RSR PAGE <*********************************************************************** <* * <* SP DE LECTURE D'UN BYTE POUR LE PUNCH COMPACTE. * <* * <*********************************************************************** SPLECB: EQU $ LBY &ABSGII CPI 'FF < FIN DE SECTEUR? JNE RETB LAD READF < OUI - RELIRE UN SECTEUR SVC 0 JNE FINLCB CPZ &ABFSGI JL FINLCB LXI 0 JMP SPLECB RETB: EQU $ ADRI 1,X LR A,B < B=CARACTERE LAI 0 < A=0 - OK RSR FINLCB: EQU $ LAI 1 < A=1 - FIN DE FICHIER RSR PAGE <*********************************************************************** <* * <* NUMEROTATION ET PUNCH D'UNE CARTE COMPACTEE. * <* * <*********************************************************************** SPNMPC: EQU $ XR X,Y < PLACER LE CARACTERE STA &ABINEN JIX PASECC SPPUPC: EQU $ LA NOCCP < SI LE NUMERO DE LA CARTE EST SARD 16 DV NUMCA CPZR B < 'NOCCP' DIVISIBLE PAR 'NUMCA' ??? JNE PASSPC < NON, ON PUNCHE... STZ PUCCOM CPZ BATCH < BATCH OU VISU ??? JNE PASSPC < BATCH... CPZ INDFI < EST-ON SOUS FI? JNE PASSPC < OUI,NE PAS ATTENDRE LAD ECCRLF < LIRE UN CARACTERE BSR ASPSIM LAD LECPPC BSR ASPSIM LBY &ABFSGO < SI "S", SAUTER CPI "S" JNE PASSPC IC PUCCOM PASSPC: EQU $ IC NOCCP < INCREMENTER LA NUMEROTATION CPZ PUCCOM < SAUTER EVENTUELLEMENT JNE PASPCO LXI -4 < MISE A ZERO ZONE NUMEROTATION STZ &ABINEF JIX $-1 LAI -1 < INDEX NUMEROTATION LR A,W LB NOCCP NWNUMC: EQU $ LAI 0 < RELEVER LE DERNIER CHIFFRE DV DIX LR B,X LR A,B LAI 1 < CARACTERE A PERFORER SLLS 13 SLRS 0,X LR W,X < LE PLACER STA &ABINEF ADRI -1,X LR X,W CPZR B < FIN? JNE NWNUMC STZ CHEKSM < OUI - CALCUL DU CHECKSUM LXI -76 RECHEK: EQU $ LA &ABINEN ADRI 1,X LB &ABINEN SLRS 4 SLRD 4 EOR CHEKSM EORR B,A SWBR B EORR B,A STA CHEKSM JIX RECHEK LXI -4 < LE PLACER LA CHEKSM < SI CHECKSUM=0 , ALORS =1 ANDI 'FF JANE NNCHEK ADRI 1,A NNCHEK: EQU $ LR A,B SLLD 8 RECK1: EQU $ LAI 0 SLLD 2 SLLS 14 OR &ABINEF STA &ABINEF JIX RECK1 PUPUCO: EQU $ LA ABINED < PUNCH DE LA CARTE SLLS 1 IF ORDI-"S",X103,,X103 STA DEMPCK+1 < ADRESSE DE LA CARTE EN BINAIRE, LAD DEMPCK SVC 0 < QUE L'ON PUNCHE D'UN COUP... X103: VAL 0 IF ORDI-"T",X103,,X103 LR A,B LXI 80 NWPCCO: EQU $ STB DEMPCH+1 PSR X LAD DEMPCH SVC 0 PLR X ADRI 2,B JDX NWPCCO X103: VAL 0 LAD SLEEP SVC 0 PASPCO: EQU $ LXI -76 PASECC: EQU $ XR X,Y RSR PAGE <*********************************************************************** <* * <* SP D'APPEL AU CCI. * <* * <*********************************************************************** SPCCI: EQU $ SLLS 1 < @ OCTET DU MESSAGE STA CCII+1 LAD CCII SVC 0 RSR PAGE <*********************************************************************** <* * <* SP D'ECRITURE D'UN MESSAGE D'ERREUR. * <* * <*********************************************************************** MSGERR: EQU $ LR A,W < @ OCTETS DU MESSAGE ADR A,A ADRI 1,A STA ECRERR+1 LBY 0,W < LONGUEUR DU MESSAGE STA ECRERR+2 LAD ECRERR < ECRIRE LE MESSAGE SVC 0 LR W,A < RETOUR SI ERREUR EN COMPACTE CP ADRLIR JNE ERRNOR RSR ERRNOR: EQU $ LAD KSTORE-1 < RESTAURER L'INDEX DE PILE LR A,K CPZ SSEDIT < NE SERAIT-CE PAS UN "KO" EN COURS < D'ANALYSE ("KO'FICHIER'") ??? JGE MSGER2 < NON... STZ SSEDIT < ET OUI, ON ANNULE 'ED'... MSGER2: EQU $ CPZ INDFI < EST-ON SOUS FI JE MSGER1 < NON LA LSRE < EDITION MESSAGE RC? CPI 3 JE MSGER1 < OUI STZ SSEDIT < OUI,SORTIE DE ED STZ INDFI < SORTIE DE FI STZ CR1 BSR ACLOSE < FERMETURE FICHIER LA ACLFI < FERMETURE FICHIER FI BSR ASPCCI LA CRLFPL STA CRLF < RESTAURATION DU + MSGER1: EQU $ BR ADCOM < AUTRE COMMANDE < < < E D I T I O N D ' U N M E S S A G E : < < PRINT: EQU $ LR A,W < W=BASE DU MESSAGE. SLLS 1 ADRI 1,A < A=ADRESSE OCTETS DU MESSAGE. STA ECRERR+1 LBY 0,W < A=LONGUEUR DU MESSAGE. STA ECRERR+2 LAD ECRERR SVC 0 < EDITION DU MESSAGE... RSR PAGE < < < T A I L L E : < < XWOR%1: VAL $-ZERO*2 SIZED: EQU ZERO+XWOR%1 NDS END