/*-- AutoRev header do NOT edit! * * Program : Goto.c * Copyright : Copyright © 1991-92 Jab Development * Author : Jan van den Baard * Creation Date : 05-Apr-92 * Current version : 2.0 * Translator : Dice v2.06.40 * * REVISION HISTORY * * Date Version Comment * --------- ------- ------------------------------------------ * 05-Apr-92 2.0 Goto % & line routine. (rewrite) * *-- REV_END --*/ #include "View.h" Prototype void Goto( long ); extern struct Window *vwWindow; extern struct AsciiText *vwText; extern struct Line *vwFirst, *vwLast; extern ULONG vwNum, vwShown; extern UWORD vwMaxLin; extern UBYTE ClearStr[]; #ifdef __DETACH extern ULONG *vwArgs; #else extern ULONG vwArgs[]; #endif extern __far struct Custom custom; void Goto( long how ) { struct Line *line; ULONG sizex = NULL, sizen = NULL, i, ln, max, min, num; UBYTE *title; if ( ! vwText ) return; if ( how == GT_PERC ) { title = "Type percentage..."; min = 0; max = 100; num = vwNum; } else { title = "Type line number..."; min = 1; max = vwText->NumLines - vwText->NumSplit; for ( line = vwText->First, num = 1; line != vwFirst; line = line->Next ) { if (( line->Flags & LNF_Split ) != LNF_Split ) num++; } } if ( vwArgs[ 11 ] ) ON_SPRITE; if ( rtGetLong( &num, title, NULL, RT_ReqPos, REQPOS_CENTERSCR, RT_WaitPointer, TRUE, RTGL_Min, min, RTGL_Max, max, RTGL_ShowDefault, TRUE, TAG_DONE )) { switch( how ) { case GT_PERC: vwNum = num; if ( vwNum == 100 ) Bottom(); else if ( ! vwNum ) Top(); else { sizen = vwNum * vwText->NumBytes / 100; for ( line = vwText->First; line->Next; line = line->Next ) { sizex += line->Size; if ( sizex > sizen ) break; } vwFirst = line; for ( i = 1; i < vwMaxLin; i++ ) if (( vwFirst = vwFirst->Prev ) == vwText->First ) break; vwLast = vwFirst; for ( i = 1; i < vwMaxLin; i++ ) if (( vwLast = vwLast->Next ) == vwText->Last->Next ) break; displayIt: vwShown = NULL; for ( line = vwText->First; line != vwLast->Next; line = line->Next ) vwShown += line->Size; Inform( ClearStr ); DisplayText(); } break; case GT_LINE: for ( line = vwText->First, ln = 1; ln != num; line = line->Next ) { if (( line->Flags & LNF_Split ) != LNF_Split ) ln++; } vwLast = line; for ( i = 1; i < vwMaxLin; i++ ) { if (( vwLast = vwLast->Next ) == vwText->Last->Next ) { vwLast = vwText->Last; break; } } vwFirst = vwLast; for ( i = 1; i < vwMaxLin; i++ ) if (( vwFirst = vwFirst->Prev ) == vwText->First ) break; goto displayIt; } } if ( vwArgs[ 11 ] ) OFF_SPRITE; }