|
|
DataMuseum.dkPresents historical artifacts from the history of: MIKADOS |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about MIKADOS Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 20224 (0x4f00)
Notes: Mikados TextFile, Mikados_K
Names: »TIME«
└─⟦73057b25a⟧ Bits:30003619 MIKADOS start diskette (flerbruger)
└─⟦this⟧ »TIME«
PROGRAM MCCOPY(RBCFILE);
(***********************************************************
UDVÆLGER DE(N) "RBCFILE(S)" SOM SKAL KONVERTERES OG PRINTES
DANNER/ÆNDRER FILES: RBCFILE
WORKFILE
KOMFILE
201186 / BS - Fjernet overflødigt check af LEGO-headers.
Indlagt kald af "START"-programmet, hvor
SPC1'erens dato og klokkeslet kan ændres.
*************************************************************)
(*$P*)
CONST
TXT1 = '** ERROR ** NO FILE !';
TXT2 = '** ERROR ** END-RECORD NOT FOUND !';
TYPE
PARAMETER = ARRAY (1..39) OF CHAR;
KLOKKEN = RECORD
QDATE : PACKED ARRAY (1..10) OF CHAR;
QTIME : PACKED ARRAY (1..8) OF CHAR;
END;
DIRECTBUF = PACKED ARRAY (1..10) OF CHAR;
VAR
PARM :^PARAMETER;
UR : ^KLOKKEN;
PCB : ^INTEGER;
RBCFILE : TEXT;
KOMFILE : TEXT;
HEADERTAB : ARRAY (1..200) OF STRING(73);
RESULTTAB : ARRAY (1..200) OF STRING(69);
REC : STRING(77);
RECBACK : STRING(77);
FILDREV : STRING(11);
INVERS : STRING(2);
ENDINVERS : STRING(2);
IOVÆRDI : INTEGER;
X : INTEGER;
Y : INTEGER;
CURSORY : INTEGER;
RECNUMBER : INTEGER;
RECNO : INTEGER;
FILENUMBER : INTEGER;
NIVEAU : INTEGER;
TIMEOK : BOOLEAN;
DOCHECK : BOOLEAN;
ERRORSWITCH : BOOLEAN;
ANSWER : STRING(1);
PROCEDURE SETUP(VAR BUFFER: DIRECTBUF; LENGTH: INTEGER);EXTERNAL;
FUNCTION AVAIL: BOOLEAN;EXTERNAL;
FUNCTION NEXT: CHAR;EXTERNAL;
PROCEDURE FINIS;EXTERNAL;
(*$P*)
SEGMENT PROCEDURE SETTIME;
BEGIN
CLEARSCREEN;
BEGIN
GOTOXY(1,5);
WRITE(' ');
WRITELN('******************************');
WRITE(' ');
WRITELN('* *');
WRITE(' ');
WRITELN('* Spc1-clock: *');
WRITE(' ');
WRITE('* ',UR^.QDATE,' - ');
WRITE(LIST,UR^.QTIME(1));
WRITE(LIST,UR^.QTIME(2));
WRITE('.');
WRITE(LIST,UR^.QTIME(4));
WRITE(LIST,UR^.QTIME(5));
WRITELN(' *');
WRITE(' ');
WRITELN('* *');
WRITE(' ');
WRITELN('******************************');
END;
ANSWER:='N';
REPEAT
GOTOXY(24,20);
WRITE('Is the date and time ok (Y/N) ? ');
EDIT(ANSWER:1);
UNTIL ANSWER(1) IN (.'Y','y','n','N'.);
CLEARSCREEN;
IF ANSWER(1) IN (.'Y','y'.) THEN TIMEOK:=TRUE;
END;
SEGMENT PROCEDURE CHOSEFILES;
PROCEDURE WRITEHEAD;
BEGIN
CLEARSCREEN;
GOTOXY(8,1);
WRITELN('$$ $$ $$$$ $$$$ $$$$ $$$$$ $ $');
GOTOXY(8,2);
WRITELN('$ $ $ $ $ $ $ $ $ $ $');
GOTOXY(8,3);
WRITELN('$ $ $ $ $ $ $$$$$ $');
GOTOXY(8,4);
WRITELN('$ $ $$$$ $$$$ $$$$ $ $');
END;
PROCEDURE WRITEFILES(FNO: INTEGER);
VAR
TABNO : INTEGER;
CURSORY : INTEGER;
CURSORX : INTEGER;
BEGIN
TABNO:=(FNO*2)-1;
CURSORY:=7;
REPEAT
IF HEADERTAB(TABNO,1)=' ' THEN
CURSORX:=7
ELSE
CURSORX:=8;
GOTOXY(1,CURSORY);
WRITE('<Z>',FNO:4);
GOTOXY(CURSORX,CURSORY);
WRITELN(HEADERTAB(TABNO));
GOTOXY(CURSORX,CURSORY+1);
WRITELN('<Z>',HEADERTAB(TABNO+1));
CURSORY:=CURSORY+3;
TABNO:=TABNO+2;
FNO:=FNO+1;
UNTIL CURSORY>19;
END;
PROCEDURE INDEXERROR;
VAR
CHECKSTR : STRING(5);
BACKCHECKSTR : STRING(5);
BEGIN
GOTOXY(11,13);
WRITELN('INDEX ERROR IN TABLE ''HEADERTAB'' - ABORTED');
GOTOXY(1,23);
EXIT(MCCOPY);
END;
PROCEDURE FINDHEADER;
VAR
CHECKSTR : STRING(5);
BACKCHECKSTR : STRING(5);
BEGIN
GOTOXY(11,12);
WRITE(CHR(27),'^WAIT ! - SEARCHING FOR RBC-FILES',CHR(27),'q');
FILDREV:='RBCFILE:P3';
RESET(RBCFILE,FILDREV);
IF IORESULT<>0 THEN
BEGIN
FILDREV:='RBCFILE:P4';
RESET(RBCFILE,FILDREV);
END;
IF IORESULT<>0 THEN
BEGIN
IOVÆRDI:=IORESULT;
GOTOXY(11,13);
WRITELN('ERROR NO.',IOVÆRDI:3,' IN FILE ''RBCFILE'' - ABORTED');
GOTOXY(1,23);
EXIT(MCCOPY);
END;
READLN(RBCFILE);READ(RBCFILE,REC);
IF EOF(RBCFILE) THEN
BEGIN
GOTOXY(11,13);
WRITE('NO RECORDS IN ''RBCFILE'' - ABORTED');
GOTOXY(1,23);
EXIT(MCCOPY);
END;
HEADERTAB(1):=CONCAT(' ',COPY(REC,1,69),ENDINVERS);
RECBACK :=REC;
READLN(RBCFILE);READ(RBCFILE,REC);
X:=2;
WHILE NOT EOF(RBCFILE) DO
BEGIN
CHECKSTR:=COPY(REC,10,5);
BACKCHECKSTR:=COPY(RECBACK,10,5);
IF (CHECKSTR='START') AND
(BACKCHECKSTR<>'STOP ') THEN
BEGIN
HEADERTAB(X):=CONCAT(' ',COPY(RECBACK,1,69),ENDINVERS);
X:=X+1;
HEADERTAB(X):=CONCAT(' ',COPY(REC,1,69),ENDINVERS);
X:=X+1;
IF ((X DIV 2) * 2) <> X THEN INDEXERROR;
END;
IF (BACKCHECKSTR='STOP ') AND
(CHECKSTR<>'START') THEN
BEGIN
HEADERTAB(X):=CONCAT(' ',COPY(RECBACK,1,69),ENDINVERS);
X:=X+1;
HEADERTAB(X):=CONCAT(' ',COPY(REC,1,69),ENDINVERS);
X:=X+1;
IF ((X DIV 2) * 2) <> X THEN INDEXERROR;
END;
IF (COPY(REC,2,7)='BC LEGO') AND
(COPY(RECBACK,2,7)='BC LEGO') THEN
BEGIN
HEADERTAB(X):=CONCAT(' ',COPY(RECBACK,1,69),ENDINVERS);
X:=X+1;
HEADERTAB(X):=CONCAT(' ',COPY(REC,1,69),ENDINVERS);
X:=X+1;
IF (CHECKSTR='START')
AND (((X DIV 2) * 2) <> X) THEN INDEXERROR;
IF (CHECKSTR='STOP ')
AND (((X DIV 2) * 2) = X) THEN INDEXERROR;
END;
RECBACK:=REC;
READLN(RBCFILE);READ(RBCFILE,REC);
END;
HEADERTAB(X):=CONCAT(' ',COPY(REC,1,69),ENDINVERS);
CLOSE(RBCFILE);
(* FJERNER ALLE HEADERS - STARTENDE MED STJENE *)
X:=1;NIVEAU:=0;
REPEAT
IF HEADERTAB(X,3)='*' THEN
NIVEAU:=NIVEAU-1
ELSE
HEADERTAB(X+NIVEAU):=HEADERTAB(X);
X:=X+1;
UNTIL (X>200) OR (HEADERTAB(X)=' ');
FOR Y:=X+NIVEAU TO 200 DO HEADERTAB(Y):=' ';
END;
PROCEDURE FINDFILES;
VAR
DATBUF : DIRECTBUF;
XCHAR : CHAR;
NCHAR : INTEGER;
FILENO : INTEGER;
TABNO : INTEGER;
CURSORY : INTEGER;
BEGIN
FILENO:=1;
CURSORY:=7;
GOTOXY(1,5);
WRITELN(CHR(27),'Y');
WRITEFILES(FILENO);
GOTOXY(1,21);
WRITELN('USE FOLLOWING KEYS : ^ v (arrows up/down)');
GOTOXY(23,22);
WRITELN('S (select)');
GOTOXY(23,23);
WRITELN('C (continue)');
GOTOXY(23,24);
WRITE ('Q (quit)');
GOTOXY(4,CURSORY);
ERRORSWITCH:=FALSE;
SETUP(DATBUF,8);
REPEAT
WHILE NOT AVAIL DO;
XCHAR:=NEXT;
IF ERRORSWITCH THEN
BEGIN
GOTOXY(51,21);
WRITELN('<Z>');
ERRORSWITCH:=FALSE;
END;
NCHAR:=ORD(XCHAR);
CASE NCHAR OF
11 : BEGIN
FILENO:=FILENO-1;
CURSORY:=CURSORY-3;
IF FILENO < 1 THEN
BEGIN
FILENO:=1;
CURSORY:=7;
END
ELSE
IF CURSORY<7 THEN
BEGIN
CURSORY:=7;
WRITEFILES(FILENO);
END;
GOTOXY(4,CURSORY);
END;
10 : BEGIN
CURSORY:=CURSORY+3;
FILENO:=FILENO+1;
IF FILENO > 100 THEN
BEGIN
FILENO:=100;
CURSORY:=19;
END
ELSE
IF CURSORY>19 THEN
BEGIN
CURSORY:=19;
WRITEFILES(FILENO-4);
END;
GOTOXY(4,CURSORY);
END;
83,115 : BEGIN
TABNO:=(FILENO-1)+FILENO;
IF HEADERTAB(TABNO)=' ' THEN
BEGIN
GOTOXY(51,21);
WRITELN(CHR(7),CHR(27),'^',TXT1,CHR(27),'q');
GOTOXY(4,CURSORY);
ERRORSWITCH:=TRUE;
END
ELSE
BEGIN
INVERS:=' ';
IF HEADERTAB(TABNO,2)=' ' THEN
BEGIN
INVERS(1):=CHR(27);
INVERS(2):='j';
END;
HEADERTAB(TABNO,1):=INVERS(1);
HEADERTAB(TABNO,2):=INVERS(2);
HEADERTAB(TABNO+1,1):=INVERS(1);
HEADERTAB(TABNO+1,2):=INVERS(2);
X:=(CURSORY-7) DIV 3;
WRITEFILES(FILENO-X);
GOTOXY(4,CURSORY);
END;
END;
27,81,113 : BEGIN
FINIS;
GOTOXY(1,5);
WRITELN(CHR(27),'Y');
GOTOXY(1,22);
WRITELN('NO CHANGE IS MADE');
WRITELN('END OF MCCOPY');
EXIT(PROGRAM);
END;
END;
UNTIL (XCHAR='C') OR (XCHAR='c');
GOTOXY(1,5);
WRITELN(CHR(27),'Y');
FINIS;
END;
BEGIN
ENDINVERS :=' ';
ENDINVERS(1):=CHR(27);
ENDINVERS(2):='k';
FOR IOVÆRDI:=1 TO 200 DO HEADERTAB(IOVÆRDI):=' ';
WRITEHEAD;
FINDHEADER;
FINDFILES;
END;
(*$P*)
SEGMENT PROCEDURE FILECOPY;
VAR
DATBUF : DIRECTBUF;
XCHAR : CHAR;
PROCEDURE CHECKHEADER(STR : STRING);
VAR
TALSTR : STRING(8);
TAL1 : REAL;
TAL2 : REAL;
EXP : REAL;
ERROR1 : BOOLEAN;
ERROR2 : BOOLEAN;
ERROR3 : BOOLEAN;
BEGIN
ERROR1:=FALSE;
ERROR2:=FALSE;
ERROR3:=FALSE;
IF COPY(REC,10,5) <> STR THEN ERROR1:=TRUE;
IF COPY(REC,16,21) <> 'TO SPC/1 FROM NCR ' THEN ERROR2:=TRUE;
IF STR='STOP ' THEN
BEGIN
TALSTR:=COPY(REC,70,8);
TAL1 :=0;
TAL2 :=0;
EXP :=1;
FOR Y:=8 DOWNTO 1 DO
BEGIN
TAL1:=TAL1+((ORD(TALSTR(Y))-48)*EXP);
EXP :=EXP*10;
END;
TAL2:=RECNO;
IF TAL1<>TAL2 THEN ERROR3:=TRUE;
END;
IF ERROR1 THEN WRITELN
('** ERROR ** THIS IS NOT A ',STR,'-HEADER');
IF ERROR2 THEN WRITELN
('** ERROR ** THIS FILE IS NOT ''TO SPC/1 FROM NCR''');
IF ERROR3 THEN WRITELN
('** ERROR ** NUMBER OF RECORDS DOESN''T FIT');
IF ERROR1 OR ERROR2 OR ERROR3 THEN
BEGIN
WRITELN(REC);
GOTOXY(1,23);
WRITELN('PROGRAM ABORTED');
EXIT(MCCOPY);
END;
END;
PROCEDURE FILECOP1;
BEGIN
IF DOCHECK THEN CHECKHEADER('START');
RECNO:=1;
WRITELN(KOMFILE,REC);
REPEAT
READLN(RBCFILE);READ(RBCFILE,REC);
WRITELN(KOMFILE,REC);
RECNO:=RECNO+1;
UNTIL (COPY(REC,1,69)=RESULTTAB(X+1)) OR (EOF(RBCFILE));
IF EOF(RBCFILE) THEN
BEGIN
GOTOXY(11,12);
WRITELN(CHR(27),'^',TXT2,CHR(27),'q');
GOTOXY(1,23);
EXIT(MCCOPY);
END;
IF DOCHECK THEN CHECKHEADER('STOP ');
RECNUMBER:=RECNUMBER+RECNO;
END;
BEGIN
GOTOXY(1,5);
WRITELN(CHR(27),'Y');
RECNUMBER:=0;
FILENUMBER:=0;
RESET(RBCFILE,FILDREV);
IF IORESULT<>0 THEN
BEGIN
IOVÆRDI:=IORESULT;
GOTOXY(11,12);
WRITELN('ERROR NO.',IOVÆRDI:3,' IN FILE ''RBC-FILE'' - ABORTED');
GOTOXY(1,23);
EXIT(MCCOPY);
END;
REWRITE(KOMFILE,'KOMFILE:P2:5:K');
IF IORESULT<>0 THEN
BEGIN
IOVÆRDI:=IORESULT;
GOTOXY(11,13);
WRITELN('ERROR NO.',IOVÆRDI:3,' IN FILE ''RBCFILE'' - ABORTED');
GOTOXY(1,23);
EXIT(MCCOPY);
END;
(* Overflødigt check fjernet nov 86 /bs
SETUP(DATBUF,8);
GOTOXY(1,7);
WRITE('CHECK OF LEGO-HEADERS ? (Y/N) ');
REPEAT
WHILE NOT AVAIL DO ;
XCHAR:=NEXT;
UNTIL XCHAR IN (.'Y','y','n','N'.);
GOTOXY(33,7);
IF XCHAR IN (.'Y','y'.) THEN
WRITELN('Yes')
ELSE
WRITELN('No ');
FINIS;
IF XCHAR IN (.'Y','y'.) THEN
DOCHECK:=TRUE
ELSE
DOCHECK:=FALSE;
*)
DOCHECK:=FALSE;
GOTOXY(1,10);
WRITELN('COPYING FILES FROM ''RBCFILE'' TO ''KOMFILE''');
FOR X:=1 TO 200 DO
RESULTTAB(X):=' ';
X:=1;Y:=1;
WHILE HEADERTAB(X)<>' ' DO
BEGIN
IF HEADERTAB(X,1)=CHR(27) THEN
BEGIN
RESULTTAB(Y):=COPY(HEADERTAB(X),3,69);
Y:=Y+1;
END;
X:=X+1;
END;
X:=1;
READLN(RBCFILE);READ(RBCFILE,REC);
REPEAT
IF COPY(REC,1,69)=RESULTTAB(X) THEN
BEGIN
FILENUMBER:=FILENUMBER+1;
RECNO:=1;
FILECOP1;
X:=X+2;
END;
READLN(RBCFILE);READ(RBCFILE,REC);
UNTIL EOF(RBCFILE) OR (RESULTTAB(X)=' ');
GOTOXY(1,12);
WRITELN('NUMBER OF RECORDS COPIED ',RECNUMBER:4);
WRITELN('NUMBER OF FILES COPIED ',FILENUMBER:4);
CLOSE(RBCFILE);
CLOSE(KOMFILE);
END;
(*$P*)
SEGMENT PROCEDURE COMPRBCFILE;
VAR
WORKFILE : TEXT;
BEGIN
RESET(RBCFILE,FILDREV);
IF IORESULT<>0 THEN
BEGIN
IOVÆRDI:=IORESULT;
GOTOXY(1,16);
WRITELN('ERROR NO.',IOVÆRDI,' IN ''RBCFILE'' - ABORTED');
GOTOXY(1,23);
EXIT(MCCOPY);
END;
REWRITE(WORKFILE,'WORKFIL:P2:10:K');
IF IORESULT<>0 THEN
BEGIN
IOVÆRDI:=IORESULT;
GOTOXY(1,16);
WRITELN('ERROR NO.',IOVÆRDI:3,' IN FILE ''W-FILE'' - ABORTED');
GOTOXY(1,23);
EXIT(MCCOPY);
END;
(* FILERNE ER ÅBNE *)
X:=1;Y:=1;
REPEAT
IF HEADERTAB(X,1)=CHR(27) THEN
BEGIN
RESULTTAB(X):=COPY(HEADERTAB(X),3,69);
Y:=Y+1;
END;
X:=X+1;
UNTIL (X>200) OR (HEADERTAB(X)=' ');
(* --RESULTATTAB-- INDEHOLDER DE FILES, SOM SKAL MARKERES *)
X:=1;
READLN(RBCFILE);READ(RBCFILE,REC);
REPEAT
IF COPY(REC,1,69)=RESULTTAB(X) THEN
BEGIN
REC(1):='*';
X:=X+1;
END;
WRITELN(WORKFILE,REC);
READLN(RBCFILE);READ(RBCFILE,REC);
UNTIL EOF(RBCFILE);
CLOSE(RBCFILE);
CLOSE(WORKFILE);
(* --WORKFILE-- INDEHOLDER DEN KORREKTE RBCFILE *)
RESET(WORKFILE,'WORKFIL:P2');
IF IORESULT<>0 THEN
BEGIN
IOVÆRDI:=IORESULT;
GOTOXY(1,16);
WRITELN('ERROR NO.',IOVÆRDI,' IN ''WORKFILE'' - ABORRTED');
GOTOXY(1,23);
EXIT(PROGRAM);
END;
REWRITE(RBCFILE,FILDREV);
IF IORESULT<>0 THEN
BEGIN
IOVÆRDI:=IORESULT;
GOTOXY(1,16);
WRITELN('ERROR NO.',IOVÆRDI,' IN ''RBCFILE'' - ABORRTED');
GOTOXY(1,23);
EXIT(PROGRAM);
END;
READLN(WORKFILE);READ(WORKFILE,REC);
REPEAT
WRITELN(RBCFILE,REC);
READLN(WORKFILE);READ(WORKFILE,REC);
UNTIL EOF(WORKFILE);
CLOSE(RBCFILE);
CLOSE(WORKFILE);
(* MARKERING AF FILE-HEADERS I RBCFILE OK *)
END;
(*$P*)
(*$P*)
BEGIN
TIMEOK:=FALSE;
SETTIME;
(* "TIMEOK" kan sættes til true i proceduren "SETTIME" *)
IF TIMEOK THEN
BEGIN
CHOSEFILES;
FILECOPY;
COMPRBCFILE;
GOTOXY(1,23);
WRITELN('END OF MCCOPY');
END;
IF NOT TIMEOK THEN
BEGIN
CHAIN('START *1',' ',PCB);
CHAIN('MCCOPY *1',' ',PCB);
END;
END.