home *** CD-ROM | disk | FTP | other *** search
-
- MODULE OccurDemo;
- (*---------------------------------------------------------------------*)
- (* O C C U R - D E M O *)
- (* M 2 P R O L I B *)
- (* Copyright (C) 1987 Bühlmann Computer Software CH-8636 WALD *)
- (* -- All Rights Reserved -- *)
- (*---------------------------------------------------------------------*)
- (* Author: X. Bühlmann *)
- (* *)
- (* Version 1.0 Date: 30/01/88 *)
- (* Version 2.0 Date: 02/07/88 *)
- (* Version 2.1 Date: 28/09/88 Angepasst auf M2Prolib V3.03 *)
- (* und neue Funktionen eingebaut*)
- (*---------------------------------------------------------------------*)
- FROM SYSTEM IMPORT ADR, SIZE;
- IMPORT Ascii, Screen, ByteString, HelpDriver;
- FROM KeyDriver IMPORT Further, eDirection, FKeys, DirecOnOff;
- FROM OccurMask IMPORT userFunc, bFieldNum, eLineMode, SetEditMode,
- CurLine, LastLine, FieldOK, SetField, GetField, LineOK, eEditMode,
- rFieldDescrip, rOccurDescrip, ActivateOccur, DefineField,
- TransferLines, InsertLine, EditFields, RestoreFields, EndOccur,
- eInputMode, InputMode, DisplayInputMode;
- FROM NumConv IMPORT CardToStr, StrToCard;
- FROM String IMPORT Move;
- FROM SystemDef IMPORT eSwitch, eColor, rColor;
- FROM Windows IMPORT eActivate, rWinDescrip, tWindow, ActivateWindow,
- ActiveWindow, CreateWindow, ChangeWindowPos, DeleteWindow,
- ResetWindows;
- CONST
- cLinien = 17;
- cArrayLen = 40;
- TYPE
- DataRec =
- RECORD
- a : ARRAY [0..4] OF CHAR;
- b : ARRAY [0..30] OF CHAR;
- c : ARRAY [0..10] OF CHAR;
- d : ARRAY [0..60] OF CHAR;
- END;
- VAR
- PosY : INTEGER;
- OccurDesc : rOccurDescrip;
- FieldDesc : rFieldDescrip;
- Data : ARRAY [1..cArrayLen] OF DataRec;
- ActualPage, CursorSave : CARDINAL;
- editMode : BOOLEAN;
- (*
- *)
- PROCEDURE Funktion(w : eDirection; VAR W : eDirection): CARDINAL;
- VAR
- Ch : CARDINAL;
- string : ARRAY [0..40] OF CHAR;
- x, y : INTEGER;
- BEGIN
- Ch := 0;
- W := not;
- CASE w OF
- | ESC :
- RestoreFields();
- Ch := 0;
- W := w;
- | F1 :
- IF HelpDriver.CreateHelp('Ocr-HELP.HLP',1) THEN
- END;
- | F2 :
- SetField(4, 'Bühlmann Computer Software & Co.');
- | F3 :
- Screen.InqCursorPos(x, y);
- GetField(4, string);
- Screen.SetCursor(1, 20);
- Screen.ScrPutString(' ');
- Screen.SetCursor(1, 20);
- Screen.ScrPutString(string);
- Screen.SetCursor(x, y);
- | F4 :
- Screen.InqCursorPos(x, y);
- IF editMode THEN
- editMode := FALSE;
- Screen.SetCursor(45, 20);
- Screen.ScrPutString(' Field 2 : no edit ');
- SetEditMode(2, noEdit);
- ELSE
- editMode := TRUE;
- Screen.SetCursor(45, 20);
- Screen.ScrPutString(' Field 2 : edit ');
- SetEditMode(2, optional);
- END;
- Screen.SetCursor(x, y);
- ELSE
- Ch := 0;
- W := w;
- END;
- RETURN Ch;
- END Funktion;
- PROCEDURE CharOK(fieldNum : bFieldNum; VAR ch : CHAR): BOOLEAN;
- VAR
- Flag : BOOLEAN;
- BEGIN
- CASE fieldNum OF
- | 1, 3 :
- RETURN (ch>='0')&(ch<='9');
- | 2 :
- ch := CAP(ch);
- ELSE
- END;
- RETURN TRUE;
- END CharOK;
- (*---------------------------------------------------------------------*)
- PROCEDURE fieldOK(fieldNum : bFieldNum; VAR field : ARRAY OF CHAR):
- BOOLEAN;
- VAR
- C : CARDINAL;
- BEGIN
- CASE fieldNum OF
- | 1 :
- IF (field[0]>0C)&NOT StrToCard(field,10,C) THEN
- RETURN FALSE;
- END;
- ELSE
- END;
- RETURN TRUE;
- END fieldOK;
- (*---------------------------------------------------------------------*)
- PROCEDURE lineOK(lineNum : CARDINAL): BOOLEAN;
- BEGIN
- RETURN TRUE;
- END lineOK;
- (*---------------------------------------------------------------------*)
- PROCEDURE GetComment(fieldNum : bFieldNum; VAR comment : ARRAY OF
- CHAR);
- BEGIN
- CASE fieldNum OF
- | 1 :
- Move(
- '│F1 Help│F2 Set Field│F3 Get Field│F4 Edit Mode Field 2│ [0-9]', comment);
- | 2 :
- Move(
- '│F1 Help│F2 Set Field│F3 Get Field│F4 Edit Mode Field 2│ [a->A]', comment);
- | 3 :
- Move(
- '│F1 Help│F2 Set Field│F3 Get Field│F4 Edit Mode Field 2│ [0-9] obligatory', comment);
- | 4 :
- Move('│F1 Help│F2 Set Field│F3 Get Field│F4 Edit Mode Field 2│', comment);
- ELSE
- END;
- END GetComment;
- (*---------------------------------------------------------------------*)
- PROCEDURE InsertProc(LineNum, CurLine : CARDINAL);
- BEGIN
- WITH Data[LineNum] DO
- InsertLine(TRUE, CurLine, a);
- InsertLine(FALSE, CurLine, b);
- InsertLine(FALSE, CurLine, c);
- InsertLine(FALSE, CurLine, d);
- END;
- END InsertProc;
- PROCEDURE TransferProc(LineNum, CurLine : CARDINAL);
- BEGIN
- WITH Data[LineNum] DO
- TransferLines(TRUE, LineNum, CurLine, a);
- TransferLines(FALSE, LineNum, CurLine, b);
- TransferLines(FALSE, LineNum, CurLine, c);
- TransferLines(FALSE, LineNum, CurLine, d);
- END;
- END TransferProc;
- PROCEDURE line(LineMode : eLineMode; CurLine, LineNum, PageNum :
- CARDINAL): BOOLEAN;
- VAR
- Ind, firstLine, lastLine : CARDINAL;
- BEGIN
- CASE LineMode OF
- | nextLine, prevLine :
- TransferProc(LineNum, CurLine);
- RETURN TRUE;
- | prevPage :
- firstLine := (PageNum-1)*cLinien;
- lastLine := cLinien;
- IF (LastLine DIV cLinien)<PageNum THEN
- lastLine := LastLine MOD cLinien;
- END;
- FOR Ind := 1 TO lastLine DO
- InsertProc(Ind+firstLine, Ind);
- END;
- TransferProc(LineNum, CurLine);
- RETURN TRUE;
- | nextPage :
- firstLine := (PageNum-1)*cLinien;
- lastLine := cLinien;
- IF (LastLine DIV cLinien)<PageNum THEN
- lastLine := LastLine MOD cLinien;
- END;
- FOR Ind := 1 TO lastLine DO
- InsertProc(Ind+firstLine, Ind);
- END;
- TransferProc(LineNum, CurLine);
- RETURN TRUE;
- | newPage :
- INC(LastLine);
- ByteString.FillBytes(ADR(Data[LineNum]), SIZE(Data[LineNum]), 0C);
- TransferProc(LineNum, CurLine);
- RETURN TRUE;
- | insLineAbove :
- INC(LastLine);
- IF LineNum<LastLine THEN
- FOR Ind := LastLine TO LineNum+1 BY -1 DO
- Data[Ind] := Data[Ind-1];
- END;
- END;
- ByteString.FillBytes(ADR(Data[LineNum]), SIZE(Data[LineNum]), 0C);
- TransferProc(LineNum, CurLine);
- RETURN TRUE;
- | insLineBelow :
- INC(LastLine);
- IF LineNum<LastLine THEN
- FOR Ind := LastLine TO LineNum+1 BY -1 DO
- Data[Ind] := Data[Ind-1];
- END;
- END;
- ByteString.FillBytes(ADR(Data[LineNum]), SIZE(Data[LineNum]), 0C);
- TransferProc(LineNum, CurLine);
- RETURN TRUE;
- | delLine :
- FOR Ind := LineNum+1 TO LastLine DO
- Data[Ind-1] := Data[Ind];
- END;
- DEC(LastLine);
- RETURN TRUE;
- | updateCurPage :
- firstLine := (PageNum-1)*cLinien;
- lastLine := cLinien;
- IF (LastLine DIV cLinien)<PageNum THEN
- lastLine := LastLine MOD cLinien;
- END;
- FOR Ind := 1 TO lastLine DO
- InsertProc(Ind+firstLine, Ind);
- END;
- TransferProc(LineNum, CurLine);
- RETURN TRUE;
- ELSE
- END;
- RETURN FALSE;
- END line;
- PROCEDURE MakeScreen();
- VAR
- Ind : INTEGER;
- BEGIN
- Screen.SetCursor(0, 1);
- FOR Ind := 1 TO 78 DO
- Screen.ScrPutChar('─');
- END;
- Screen.SetCursor(5, 1);
- Screen.ScrPutChar('┬');
- Screen.SetCursor(26, 1);
- Screen.ScrPutChar('┬');
- Screen.SetCursor(37, 1);
- Screen.ScrPutChar('┬');
- (**)
- FOR Ind := 2 TO 18 DO
- Screen.SetCursor(5, Ind);
- Screen.ScrPutChar('│');
- Screen.SetCursor(26, Ind);
- Screen.ScrPutChar('│');
- Screen.SetCursor(37, Ind);
- Screen.ScrPutChar('│');
- (**)
- END;
- Screen.SetCursor(0, 19);
- FOR Ind := 1 TO 78 DO
- Screen.ScrPutChar('─');
- END;
- Screen.SetCursor(5, 19);
- Screen.ScrPutChar('┴');
- Screen.SetCursor(26, 19);
- Screen.ScrPutChar('┴');
- Screen.SetCursor(37, 19);
- Screen.ScrPutChar('┴');
- END MakeScreen;
- PROCEDURE displayInputMode();
- BEGIN
- IF InputMode=overtype THEN
- Screen.SetCursorType(CursorSave);
- ELSE
- Screen.SetCursorType(0DH);
- END;
- END displayInputMode;
- (*-----------------------------------------------------------------------*)
- PROCEDURE ActualLine(line : CARDINAL);
- VAR
- LinePos : ARRAY [0..10] OF CHAR;
- BEGIN
- Screen.SetCursor(18, 0);
- CardToStr(line, 10, LinePos);
- Screen.ScrPutString(' ');
- Screen.SetCursor(18, 0);
- Screen.ScrPutString(LinePos);
- END ActualLine;
- PROCEDURE WriteScreen();
- VAR
- Ind : CARDINAL;
- BEGIN
- FOR Ind := 1 TO LastLine DO
- Screen.ScrPutString(Data[Ind].a);
- Screen.ScrPutChar(' ');
- Screen.ScrPutString(Data[Ind].b);
- Screen.ScrPutChar(' ');
- Screen.ScrPutString(Data[Ind].c);
- Screen.ScrPutChar(' ');
- Screen.ScrPutString(Data[Ind].d);
- Screen.ScrPutChar(' ');
- Screen.ScrWriteLn();
- END;
- END WriteScreen;
- PROCEDURE Copyright();
- BEGIN
- Screen.ClearScrBound();
- Screen.ScrWriteLn();
- Screen.ScrPutString(
- ' O C C U R - M A S K - D E M O Version 2.1 ');
- Screen.ScrWriteLn();
- Screen.ScrPutString(
- ' 1 9 8 8 ');
- Screen.ScrWriteLn();
- Screen.ScrWriteLn();
- Screen.ScrPutString(
- ' Copyright by ');
- Screen.ScrWriteLn();
- Screen.ScrPutString(
- ' (c) Bühlmann Computer Software ');
- Screen.ScrWriteLn();
- Screen.ScrPutString(
- ' CH-8636 Wald ');
- Screen.ScrWriteLn();
- END Copyright;
- BEGIN
- Copyright();
- DisplayInputMode := displayInputMode;
- CursorSave := Screen.CursorType();
- CurLine := ActualLine;
- ByteString.FillBytes(ADR(Data), SIZE(Data), 0C);
- editMode := TRUE;
- LastLine := 1;
- ActualPage := 1;
- DirecOnOff := TRUE;
- FKeys := Funktion;
- LineOK := lineOK;
- FieldOK := fieldOK;
- WITH OccurDesc DO
- StatusColor.Fore := black;
- StatusColor.Back := white;
- NumOfLines := cLinien;
- WITH OccurAttr DO
- Bound.Upper := 1;
- Bound.Lower := 23;
- Bound.Left := 0;
- Bound.Right := 79;
- Color.Fore := black;
- Color.Back := white;
- Title := ' Occurrency-Mask ';
- END;
- END;
- WITH FieldDesc DO
- Color.Fore := black;
- Color.Back := white;
- ActiveColor.Fore := ltWhite;
- ActiveColor.Back := black;
- FieldChar := 137C;
- END;
- ActivateOccur(OccurDesc, FieldDesc);
- MakeScreen();
- Screen.SetCursor(10, 0);
- Screen.ScrPutString('Line : 1');
- (**)
- Screen.SetScrColor(FieldDesc.ActiveColor);
- Screen.SetCursor(1, 20);
- Screen.ScrPutString(' ');
- Screen.SetCursor(45, 20);
- Screen.ScrPutString(' Field 2 : edit ');
- Screen.SetScrColor(FieldDesc.Color);
- (**)
- DefineField(1, 2, optional, 4, 4);
- DefineField(6, 2, optional, 30, 20);
- DefineField(27, 2, obligatory, 10, 10);
- DefineField(38, 2, optional, 60, 39);
- TransferProc(1, 1);
- EditFields(userFunc, CharOK, line, GetComment);
- EndOccur();
- WriteScreen();
- END OccurDemo.