home *** CD-ROM | disk | FTP | other *** search
- {================================================================}
- { WRITE MESSAGE PROCEDURE }
- {================================================================}
- PROCEDURE WRITEMESSAGE(VAR MESSAGE : STRING60);
- BEGIN
- REVVIDEO;
- WRITE(MESSAGE);
- REGVIDEO;
- END;
-
- {================================================================}
- { KEYIN PROCEDURE }
- {================================================================}
- PROCEDURE KEYIN(VAR MESSAGE : STRING60; XPOS,YPOS,LEN : INTEGER);
-
- CONST
- CONTROLS : SET OF CHAR = [^H..^R,^U..^Y,^[..^_,'\'];
-
- VAR
- W, COUNT : INTEGER;
- FLDLEN : INTEGER;
- CONDITION : BOOLEAN;
-
- BEGIN
- IF DATAFORM[Z] = ASCII THEN FLDLEN := LEN
- ELSE
- BEGIN
- IF DATAFORM[Z] = 0 THEN FLDLEN := LEN +((LEN-1)DIV 3)
- ELSE FLDLEN := LEN+((LEN-DATAFORM[Z]-2)DIV 3);
- EDIT(MESSAGE);
- END;
- COUNT := 0;
- IF LENGTH(MESSAGE)>FLDLEN THEN MESSAGE := COPY(MESSAGE,1,FLDLEN);
- IF DATAFORM[Z] <> ASCII THEN TIDE(MESSAGE);
- GOTOXY(XPOS,YPOS);
- WRITEMESSAGE(MESSAGE);
- GOTOXY(XPOS+COUNT,YPOS);
- REPEAT
- READ (KBD,CH);
- IF CH = #27 THEN
- READ (KBD,CH1)
- ELSE CH1 := ' '; { INTIIALIZE FOR CHAR WHICH FOLLOWS ESC }
-
- IF ABORTCHAR = TRUE THEN { THIS CODE IS REQUIRED TO }
- BEGIN { ELIMINATE THE ENTRY OF }
- ABORTCHAR := FALSE; { UNWANTED CHARACTERS AFTER }
- CH := ^S; { A SEARCH IS ABORTED }
- END;
- CASE CH OF
-
- ^A : { LEFT ONE WORD }
- BEGIN
- WHILE(MESSAGE[COUNT-1] = ' ') AND (COUNT>1) DO
- COUNT := PRED(COUNT);
- WHILE(MESSAGE[COUNT-1] <> ' ') AND (COUNT>1) DO
- COUNT := PRED(COUNT);
- IF COUNT>0 THEN COUNT := PRED(COUNT);
- END;
-
- ^C : { EXIT FIELD MODE, RETURN TO RRECORD MODE }
- BEGIN
- CH := #27; { SAME AS F1 FUNCTION KEY }
- CH1 := #59;
- END;
-
- ^D : { RIGHT 1 CHARACTER }
- BEGIN
- IF COUNT < LEN THEN COUNT := COUNT +1;
- END;
-
- ^E :
- BEGIN
- CH := #27; { CTRL E = WORDSTAR'S UP 1 LINE }
- CH1 := #64;
- END;
-
- ^F : { RIGHT 1 WORD }
- BEGIN
- WHILE(MESSAGE[COUNT+1] <> ' ') AND (COUNT<FLDLEN) DO
- COUNT := SUCC(COUNT);
- WHILE(MESSAGE[COUNT+1] = ' ') AND (COUNT<FLDLEN) DO
- COUNT := SUCC(COUNT);
- END;
-
- ^G : { DELETE CHARACTER UNDER CURSOR }
- BEGIN
- IF COUNT>=0 THEN
- BEGIN
- MESSAGE := MESSAGE + ' ';
- DELETE(MESSAGE,COUNT+1,1);
- GOTOXY(XPOS,YPOS);
- WRITEMESSAGE(MESSAGE);
- END;
- END;
-
- ^I : { TAB = MOVE CURSOR 6 CHAR TO RIGHT }
- BEGIN
- COUNT := COUNT + 6;
- IF COUNT > LEN THEN COUNT := LEN;
- END;
-
- ^Q : COUNT := 0; { CURSOR TO LEFT END }
-
- ^S : { LEFT 1 CHARACTER }
- BEGIN
- IF COUNT >0 THEN COUNT := COUNT -1;
- END;
-
- ^T : { DELETE WORD TO RIGHT }
- BEGIN
- W := FLDLEN - COUNT;
- IF MESSAGE[COUNT+1] = ' ' THEN
- BEGIN
- WHILE (MESSAGE[COUNT+1] = ' ') AND (W>0) DO
- BEGIN
- DELETE(MESSAGE,COUNT+1,1);
- MESSAGE := MESSAGE + ' ';
- W := PRED(W);
- END;
- END
- ELSE
- BEGIN
- WHILE MESSAGE[COUNT+1] <> ' ' DO
- BEGIN
- DELETE (MESSAGE,COUNT+1,1);
- MESSAGE := MESSAGE + ' ';
- W := PRED(W);
- END;
- WHILE (MESSAGE[COUNT+1] = ' ') AND (W>0) DO
- BEGIN
- DELETE (MESSAGE,COUNT+1,1);
- MESSAGE := MESSAGE + ' ';
- W := PRED(W);
- END;
- END;
- GOTOXY(XPOS,YPOS);
- WRITEMESSAGE(MESSAGE);
- END;
-
- ^W : COUNT := LEN-1; { CURSOR TO RIGHT END }
-
- ^X : CH := ^M; { WORDSTAR'S DOWN 1 LINE }
-
- ^Y : { WORDSTAR'S CLEAR FIELD }
- BEGIN
- MESSAGE := '';
- FOR W := 1 TO FLDLEN DO
- MESSAGE := MESSAGE + '_';
- GOTOXY(XPOS,YPOS);
- WRITEMESSAGE(MESSAGE);
- END;
-
- ^Z : { CLEAR REMAINDER OF FIELD }
- BEGIN
- FOR W := COUNT +1 TO FLDLEN+1 DO
- MESSAGE[W] := '_';
- IF LENGTH(MESSAGE)>FLDLEN THEN
- MESSAGE := COPY(MESSAGE,1,FLDLEN);
- GOTOXY(XPOS,YPOS);
- WRITEMESSAGE(MESSAGE);
- END;
-
- ^H : { DELETE CHARACTER BEFORE CURSOR }
- BEGIN
- IF COUNT>0 THEN
- BEGIN
- DELETE(MESSAGE,COUNT,1);
- MESSAGE := MESSAGE + ' ';
- IF LENGTH(MESSAGE)>FLDLEN THEN
- MESSAGE := COPY(MESSAGE,1,FLDLEN);
- GOTOXY(XPOS,YPOS);
- WRITEMESSAGE(MESSAGE);
- COUNT := COUNT-1;
- END;
- END;
-
-
- END; { CASE CH OF }
-
- IF ORD(CH) IN [32..91,93..126] THEN { PROCESS IF ALPHA/NUMERIC }
- BEGIN
- IF COUNT < FLDLEN THEN
- BEGIN
- COUNT := COUNT +1;
- INSERT(CH,MESSAGE,COUNT);
- IF LENGTH(MESSAGE)>FLDLEN THEN
- MESSAGE := COPY(MESSAGE,1,FLDLEN);
- GOTOXY(XPOS,YPOS);
- WRITEMESSAGE(MESSAGE);
- END;
- END;
- GOTOXY(XPOS+COUNT,YPOS);
-
-
- UNTIL CH IN [#27,^J..^M,^R,^V,'\']; { EXIT KEYIN ONLY ON THESE CHAR }
-
-
- IF DATAFORM[Z] <> ASCII THEN TIDE(MESSAGE); {ELIM COMMAS IF NUMERIC}
- IF LENGTH(MESSAGE)>0 THEN
- BEGIN
- IF CH = ^M THEN CH := MESSAGE[1];
- END;
- COUNT := FLDLEN+1;
- CONDITION := FALSE;
- REPEAT { ESTABLISH END OF DATA IN STRING }
- COUNT := COUNT -1;
- IF MESSAGE[COUNT] = '_' THEN MESSAGE[COUNT] := ' ';
- IF MESSAGE[COUNT] <> ' ' THEN CONDITION := TRUE;
- IF COUNT = 0 THEN CONDITION := TRUE;
- UNTIL CONDITION = TRUE;
- MESSAGE := COPY(MESSAGE,1,COUNT);
- END;
- {================================================================}
- { CALCULATE DISKRECORD & PRECBYTE PROCEDURE }
- {================================================================}
- PROCEDURE CALCULATE;
- BEGIN
- DISKRECORD := TRUNC((DATARECORD-1)/BLOCKINGFACTOR)*2+7;
- PRECBYTE := ((DATARECORD-1) MOD BLOCKINGFACTOR)*RCDLEN;
- END;
- {================================================================}