PROGRAM ZEICHENEDITOR(INPUT,OUTPUT); (*BENUTZT INCLUDE-FILE 'READNAME.P' *) (*14.4.1985 FLORIAN MATTHES *) CONST MAXCHAR=63; LCHAR=32; HCHAR=96; TYPE CHARDEF=RECORD C:PACKED ARRAY[0..7] OF CHAR; END; FNAME=ARRAY[1..15]OF CHAR; VAR CHARTAB:ARRAY[0..MAXCHAR] OF CHARDEF; LEER:CHARDEF; KOMMANDO:TEXT; C:CHAR; X,Y:INTEGER; ENDFLG:BOOLEAN; PROCEDURE DISK; VAR BYTE1,BYTE2:CHAR; BEGIN READ(KOMMANDO,BYTE1,BYTE2); IF BYTE1>="2" THEN BEGIN WRITELN("FEHLER AUF DISKETTE:"); WRITELN("NUMMER:",BYTE1,BYTE2); END END;(*DISK*) (*$"EDIT1.INC"*) PROCEDURE EDIT(N:INTEGER); CONST CUP=145;CDOWN=17; CLEFT=157;CRIGHT=29; CLR=147;PLUS=43;MINUS=45; CANCEL=67;RETURN=82; VAR ZEICHEN:ARRAY[0..7,0..7] OF CHAR; ZEILE,SPALTE,MASKE,Z,S:INTEGER; ENDFLG:BOOLEAN; BEGIN WITH CHARTAB[N] DO BEGIN WRITELN(CHR(147),"EDIT-CHAR":15); WRITELN("·········":15); MASKE:=1; FOR ZEILE:=7 DOWNTO 0 DO BEGIN FOR SPALTE:=0 TO 7 DO IF (ORD(C[SPALTE])AND MASKE)<>0 THEN ZEICHEN[ZEILE,SPALTE]:="*" ELSE ZEICHEN[ZEILE,SPALTE]:="."; MASKE:=MASKE*2;WRITELN END; WRITELN(CHR(17),CHR(17),"OPTIONS:"); WRITELN("········"); WRITELN("+’ SET POINT"); WRITELN("-’ RESET POINT"); WRITELN("C’ CANCEL"); WRITELN("R’ RETURN"); WRITELN("USE CURSOR & [CLR] !"); ENDFLG:=FALSE;ZEILE:=0;SPALTE:=0; REPEAT WRITELN(CHR(19),CHR(13)); FOR Z:=0 TO 7 DO IF Z<>ZEILE THEN WRITELN(ZEICHEN[Z]) ELSE BEGIN FOR S:=0 TO 7 DO IF S=SPALTE THEN WRITE("",ZEICHEN[Z,S],"’") ELSE WRITE(ZEICHEN[Z,S]); WRITELN END; WRITELN("X:",ZEILE:2," Y:",SPALTE:2); CASE ORD(GETKEY) OF CUP :BEGIN ZEILE:=ZEILE-1; IF ZEILE<0 THEN ZEILE:=7 END; CDOWN :BEGIN ZEILE:=ZEILE+1; IF ZEILE>7 THEN ZEILE:=0 END; CRIGHT :BEGIN SPALTE:=SPALTE+1; IF SPALTE>7 THEN SPALTE:=0 END; CLEFT :BEGIN SPALTE:=SPALTE-1; IF SPALTE<0 THEN SPALTE:=7 END; PLUS :ZEICHEN[ZEILE,SPALTE]:="*"; MINUS :ZEICHEN[ZEILE,SPALTE]:="."; CLR :FOR Z:=0 TO 7 DO FOR S:=0 TO 7 DO ZEICHEN[Z,S]:="."; CANCEL :ENDFLG:=TRUE; RETURN :BEGIN ENDFLG:=TRUE;(*UPDATE*) FOR SPALTE:=0 TO 7 DO BEGIN MASKE:=1;Z:=0; FOR ZEILE:=7 DOWNTO 0 DO BEGIN IF ZEICHEN[ZEILE,SPALTE]="*" THEN Z:=Z OR MASKE; MASKE:=MASKE*2; END; C[SPALTE]:=CHR(Z) END END ELSE (*LEER*) END;(*CASE*) UNTIL ENDFLG END(*WITH*) END;(*EDIT*) PROCEDURE PRINTUSER; VAR S:INTEGER; PRT,USR:TEXT; BEGIN OPEN(PRT,4,0);OPEN(USR,4,5); FOR S:=LCHAR TO HCHAR-1 DO WRITE(PRT,CHR(S)); WRITELN(PRT); FOR S:=0 TO MAXCHAR DO WITH CHARTAB[S] DO BEGIN WRITELN(USR,C[0],C[1],C[2],C[3], C[4],C[5],C[6],C[7]); WRITE(PRT,CHR(254):S+1,CHR(141)); END; WRITELN(PRT); CLOSE(PRT);CLOSE(USR) END;(*PRINTUSER*) BEGIN OPEN(KOMMANDO,8,15,"I0"); FOR X:=0 TO 7 DO LEER.C[X]:=CHR(0); ENDFLG:=FALSE;SHOWPANEL; REPEAT CASE GETKEY OF "E":BEGIN EDIT(CURRENT);SHOWPANEL END; "N":BEGIN X:=CURRENT;CHARTAB[X]:=LEER; EDIT(X);SHOWPANEL END; "C":BEGIN WRITE("FROM ");X:=CURRENT; WRITE(" TO ");Y:=CURRENT; CHARTAB[Y]:=CHARTAB[X]; SHOWPANEL; END; "L":BEGIN LOADTABLE;SHOWPANEL END; "S":BEGIN SAVETABLE;SHOWPANEL END; "P":PRINTUSER; "X":BEGIN WRITELN("ARE YOU SHURE?");READLN(C); ENDFLG:=C="Y";SHOWPANEL END ELSE (*LEER*) END;(*CASE*) UNTIL ENDFLG; END.