⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sbpad.c

📁 smallbasic for linux
💻 C
📖 第 1 页 / 共 5 页
字号:
		p = text;		while ( *p )	{			if	( *p == '\n' )	{				c ++;				if	( c == line )	{					setTextPos(pos+1);					found ++;					break;					}				}			p ++;			pos ++;			}		if	( !found )			setTextPos(pos+1);		}}void	searchFor(const char *src) SEC(IDE);void	searchFor(const char *src){	char	*p, *text;	int		pos = 0;	StrCopy(lastSearchString, src);	text = FldGetTextPtr(fld_ptr(fldTEXT));	p = text;	while ( *p )	{		if	( StrNCaselessCompare(p, lastSearchString, StrLen(lastSearchString)) == 0 )	{			setTextPos(pos+1);			break;			}		p ++;		pos ++;		}}void	searchAgain() SEC(IDE);void	searchAgain(){	char	*p, *text;	int		pos;	text = FldGetTextPtr(fld_ptr(fldTEXT));	p = text;	p += ((pos = getTextPos()) + 1);	while ( *p )	{		if	( StrNCaselessCompare(p, lastSearchString, StrLen(lastSearchString)) == 0 )	{			setTextPos(pos+1);			break;			}		p ++;		pos ++;		}}void	mkPutFileExt(char *text)	SEC(IDE);void	mkPutFileExt(char *text){	char	*p;	p = str_istr(text, ".bas");	if	( p == NULL )			StrCat(text, ".bas");}//// EDIT /////////////////////////////////////////////////////////////////////////////////////////////////////////////////void	IDESaveStatus(const char *file, word lastSec, word lastPos, int font)	SEC(IDE);void	IDESaveStatus(const char *file, word lastSec, word lastPos, int font){	file_t	f;	int		i, recs, found = 0;	byte	*buff;	f = dbOpenAlw("SmBa.IDE.DAT", SmBa, idDATA);	buff = tmp_alloc(128);	recs = DmNumRecords(f);	for ( i = 0; i < recs; i ++ )	{		dbRead(f, i, buff, 128);		if	( StrCompare(buff, file) == 0 )	{			buff[66] = (lastSec >> 8);		buff[67] = lastSec & 0xFF;			buff[68] = (lastPos >> 8);		buff[69] = lastPos & 0xFF;			buff[70] = (font >> 8);			buff[71] = font    & 0xFF;			dbWrite(f, i, buff, 128);			found = 1;			break;			}		}	if	( !found )	{		StrCopy(buff, file);		buff[64] = 0;		buff[65] = 1;		buff[66] = (lastSec >> 8);		buff[67] = lastSec & 0xFF;		buff[68] = (lastPos >> 8);		buff[69] = lastPos & 0xFF;		buff[70] = (font >> 8);			buff[71] = font    & 0xFF;		dbWrite(f, 0xFFFF, buff, 128);		}	tmp_free(buff);	dbClose(f);}int		IDELoadStatus(const char *file, word *lastSec, word *lastPos, int *font) SEC(IDE);int		IDELoadStatus(const char *file, word *lastSec, word *lastPos, int *font){	file_t	f;	int		i, recs, found = 0;	byte	*buff;	f = dbOpenAlw("SmBa.IDE.DAT", SmBa, idDATA);	buff = tmp_alloc(128);	recs = DmNumRecords(f);	for ( i = 0; i < recs; i ++ )	{		dbRead(f, i, buff, 128);		if	( StrCompare(buff, file) == 0 )	{			*lastSec = (buff[66] << 8) + buff[67];			*lastPos = (buff[68] << 8) + buff[69];			*font    = (buff[70] << 8) + buff[71];			found = 1;			break;			}		}	tmp_free(buff);	dbClose(f);	return found;}Boolean		ViewFormHandleEventSEG(EventPtr e)	SEC(IDE);Boolean		ViewFormHandleEventSEG(EventPtr e){    Boolean handled = false;    FormPtr frm;	ListPtr	list;        switch (e->eType) {    case frmOpenEvent:		frm = FrmGetActiveForm();		mkSmallTitle(curFileName, smtitle, 60, boldFont);		FrmSetTitle(frm, smtitle);		FrmDrawForm(frm);		sbpref.lastDocForm = ViewForm;		openDOC(curFileName);		if	( !IDELoadStatus(curFileName, &lastDocSec, &lastDocPos, &lastDocFont) )	{			lastDocSec = 0;			lastDocPos = 0;			lastDocFont = sbpref.lastDocFont;			}		FldSetFont(GetFieldPtr(fldTEXT), lastDocFont);		if	( lastDocFont == HK40CustomFont )				lastDocPageSize = 20;		else if	( lastDocFont == SM10CustomFont )				lastDocPageSize = 13;		else if	( lastDocFont == DOSCustomFont )				lastDocPageSize = 13;		else if	( lastDocFont == DOS4CustomFont )				lastDocPageSize = 13;		else if	( lastDocFont == 0 || lastDocFont == 1 )			lastDocPageSize = 10;		else if ( lastDocFont == 2 )			lastDocPageSize = 8;		else			lastDocPageSize = 7;		list = GetListPtr(lstSection);		LstSetListChoices(list, secListStr, secCount);		UpdatePopup(trgSection, lstSection, lastDocSec, secListStr);		dispSection(lastDocSec);		setTextPos(lastDocPos);		autoReturnToForm = 0;		FrmSetFocus(frm, FrmGetObjectIndex(frm, fldTEXT));		handled = true;		break;	case popSelectEvent:    	switch (e->data.popSelect.controlID) {	    case trgSection:			if	( lastDocSec != e->data.popSelect.selection )	{				UpdatePopup(trgSection, lstSection, e->data.popSelect.selection, secListStr);				lastDocSec = e->data.popSelect.selection;				dispSection(lastDocSec);				setTextPos(0);				}			handled = 1;			break;			}		break;    case menuEvent:		switch(e->data.menu.itemID) {		case mnuNew:			lastDocPos = getTextPos();			IDESaveStatus(curFileName, lastDocSec, lastDocPos, lastDocFont);			if	( BasicInputBox("New FileName:", temp, 255) )	{				checkSaveDOC();				mkPutFileExt(temp);				if	( createNewDOC(temp) )	{					openDOC(temp);										lastDocSec = lastDocPos = 0;					StrCopy(curFileName, temp);					frm = FrmGetActiveForm();					mkSmallTitle(curFileName, smtitle, 60, boldFont);					FrmSetTitle(frm, smtitle);					FrmDrawForm(frm);					list = GetListPtr(lstSection);					LstSetListChoices(list, secListStr, secCount);					UpdatePopup(trgSection, lstSection, lastDocSec, secListStr);					dispSection(lastDocSec);					setTextPos(lastDocPos);					}				}			break;		case mnuBeam:			lastDocPos = getTextPos();			IDESaveStatus(curFileName, lastDocSec, lastDocPos, lastDocFont);			checkSaveDOC();			beamSendDB(curFileName);			break;		case mnuEdit:			lastDocPos = getTextPos();			IDESaveStatus(curFileName, lastDocSec, lastDocPos, lastDocFont);			checkSaveDOC();			closeDOC();			FrmGotoForm(MainForm);			break;		case mnuRun:			lastDocPos = getTextPos();			IDESaveStatus(curFileName, lastDocSec, lastDocPos, lastDocFont);			checkSaveDOC();			autoReturnToForm = ViewForm;			closeDOC();			FrmGotoForm(SBOutForm);			break;		case mnuSave:			if ( curFile )	{				lastDocPos = getTextPos();				IDESaveStatus(curFileName, lastDocSec, lastDocPos, lastDocFont);				saveSection(curSection);				FldSetDirty(fld_ptr(fldTEXT), 0);				}			break;		case mnuSaveAs:			lastDocPos = getTextPos();			IDESaveStatus(curFileName, lastDocSec, lastDocPos, lastDocFont);			if ( curFile )	{				if	( BasicInputBox("New FileName:", temp, 255) )	{					frm = FrmGetActiveForm();					closeDOC();					mkPutFileExt(temp);					copyDOC(curFileName, temp);					StrCopy(curFileName, temp);					openDOC(curFileName);					list = GetListPtr(lstSection);					LstSetListChoices(list, secListStr, secCount);					UpdatePopup(trgSection, lstSection, lastDocSec, secListStr);					mkSmallTitle(curFileName, smtitle, 60, boldFont);					FrmSetTitle(frm, smtitle);					FrmDrawForm(frm);					saveSection(lastDocSec);					setTextPos(lastDocPos);					}				}			break;		case mnuClose:			lastDocPos = getTextPos();			IDESaveStatus(curFileName, lastDocSec, lastDocPos, lastDocFont);			checkSaveDOC();			closeDOC();			FrmGotoForm(MainForm);			break;		case mnuGoto:			if	( BasicInputBox("Go to line...", temp, 64) )	{				gotoLine(xstrtol(temp));				lastDocPos = getTextPos();				}	      	break;		case mnuSearch:			if	( BasicInputBox("Search for:", temp, 255) )	{				searchFor(temp);				lastDocPos = getTextPos();				}	      	break;		case mnuSearchAgain:			searchAgain();			lastDocPos = getTextPos();			break;		case mnuAbout:			DoAboutForm();	      	break;		case mnuHelp:			GPlmAlert(HelpStrTID, HelpStringID);			break;		case mnuHelpFS:			GPlmAlert(HelpFSStrTID, HelpFSStringID);			break;		case mnuHelpMisc:			GPlmAlert(HelpMiscStrTID, HelpMiscStringID);			break;		case mnuHelpSys:			GPlmAlert(HelpSysStrTID, HelpSysStringID);			break;		case mnuHelpGraf:			GPlmAlert(HelpGrafStrTID, HelpGrafStringID);			break;		case mnuHelpMS:			GPlmAlert(HelpMSStrTID, HelpMSStringID);			break;		case mnuHelpCon:			GPlmAlert(HelpConStrTID, HelpConStringID);			break;		case mnuUndo:			FldUndo(fld_ptr(fldTEXT));			break;		case mnuCut:			FldCut(fld_ptr(fldTEXT));			break;		case mnuCopy:			FldCopy(fld_ptr(fldTEXT));			break;		case mnuSelAll:			FldSetSelection(fld_ptr(fldTEXT), 0, 0xFFFF);			break;	   	case mnuPaste:			  			FldPaste(fld_ptr(fldTEXT));			break;	   	case mnuKeyboard:			SysKeyboardDialog(kbdDefault);			break;		 case mnuGraffiti:			SysGraffitiReferenceDialog(referenceDefault);			break;	   	case mnuFont0:			FldSetFont(fld_ptr(fldTEXT), (lastDocFont = stdFont));			lastDocPageSize = 10;			break;	   	case mnuFont1:			FldSetFont(fld_ptr(fldTEXT), (lastDocFont = boldFont));			lastDocPageSize = 10;			break;	   	case mnuFont2:			FldSetFont(fld_ptr(fldTEXT), (lastDocFont = largeFont));			lastDocPageSize = 8;			break;	   	case mnuFont7:			FldSetFont(fld_ptr(fldTEXT), (lastDocFont = largeBoldFont));			lastDocPageSize = 7;			break;	   	case mnuFontHK:			if	( os_charset == enc_utf8 )	{				FldSetFont(fld_ptr(fldTEXT), (lastDocFont = HK40CustomFont));				lastDocPageSize = 20;				}			else				FrmAlert(AlertCFontMB);			break;	   	case mnuFontSM10:			if	( os_charset == enc_utf8 )	{				FldSetFont(fld_ptr(fldTEXT), (lastDocFont = SM10CustomFont));				lastDocPageSize = 13;				}			else				FrmAlert(AlertCFontMB);			break;	   	case mnuFontDOS:			if	( os_charset == enc_utf8 )	{				FldSetFont(fld_ptr(fldTEXT), (lastDocFont = DOSCustomFont));				lastDocPageSize = 15;				}			else				FrmAlert(AlertCFontMB);			break;	   	case mnuFontDOS4:			if	( os_charset == enc_utf8 )	{				FldSetFont(fld_ptr(fldTEXT), (lastDocFont = DOS4CustomFont));				lastDocPageSize = 15;				}			else				FrmAlert(AlertCFontMB);			break;		case	mnuNewSec:			if	( BasicInputBox("Section Name:", temp, 255) )	{				temp[32] = '\0';				checkSaveDOC();				createNewSec(temp);				destroySecList();				buildSecList();				lastDocSec = secCount - 1;				list = GetListPtr(lstSection);				LstSetListChoices(list, secListStr, secCount);				UpdatePopup(trgSection, lstSection, lastDocSec, secListStr);				dispSection(lastDocSec);				setTextPos(lastDocPos = 0);				}			break;		case	mnuChangeSec:			if	( BasicInputBox("New name:", temp, 255) )	{				temp[32] = '\0';				saveSectionName(curSection, temp);				destroySecList();				buildSecList();				list = GetListPtr(lstSection);				LstSetListChoices(list, secListStr, secCount);				UpdatePopup(trgSection, lstSection, lastDocSec, secListStr);				}			break;		case	mnuDelSec:			if	( FrmCustomAlert(ConfAlertID, "Do you want to delete the current section ?", "", "") == 0 )		{				dispSection(0);				setTextPos((lastDocPos = 0));				deleteSec(lastDocSec);				destroySecList();				buildSecList();				lastDocSec = 0;				list = GetListPtr(lstSection);				LstSetListChoices(list, secListStr, secCount);				UpdatePopup(trgSection, lstSection, lastDocSec, secListStr);				}			break;		  	};    	handled = true;		break;	case keyDownEvent:		switch ( e->data.keyDown.chr )	{		case	pageUpChr: /* Prev */			if ( FldScrollable(fld_ptr(fldTEXT), winUp) ) 				FldScrollField(fld_ptr(fldTEXT), lastDocPageSize, winUp);			handled = true;			break;		case pageDownChr: /* next */			if	( FldScrollable(fld_ptr(fldTEXT), winDown) )					FldScrollField(fld_ptr(fldTEXT), lastDocPageSize, winDown);			handled = 1;			break;			};		break;    case ctlSelectEvent:		switch(e->data.ctlSelect.controlID) {		case	btnSFT:			FldInsert(fld_ptr(fldTEXT), "\t", 1);	    	handled = true;			break;		case	btnCLOSE:			lastDocPos = getTextPos();			IDESaveStatus(curFileName, lastDocSec, lastDocPos, lastDocFont);			checkSaveDOC();			closeDOC();			FrmGotoForm(MainForm);	    	handled = true;			break;		case	btnUP:			if ( FldScrollable(fld_ptr(fldTEXT), winUp) ) 				FldScrollField(fld_ptr(fldTEXT), 1, winUp);	    	handled = true;			break;		case	btnDOWN:			if	( FldScrollable(fld_ptr(fldTEXT), winDown) )					FldScrollField(fld_ptr(fldTEXT), 1, winDown);	    	handled = true;			break;		case	btnPGUP:			if ( FldScrollable(fld_ptr(fldTEXT), winUp) ) 				FldScrollField(fld_ptr(fldTEXT), lastDocPageSize, winUp);	    	handled = true;			break;		case	btnPGDN:			if	( FldScrollable(fld_ptr(fldTEXT), winDown) )					FldScrollField(fld_ptr(fldTEXT), lastDocPageSize, winDown);	    	handled = true;			break;		case	btnSAVE:			lastDocPos = getTextPos();			IDESaveStatus(curFileName, lastDocSec, lastDocPos, lastDocFont);			saveSection(curSection);			FldSetDirty(fld_ptr(fldTEXT), 0);	    	handled = true;			break;		case btnQRUN:			// SAVE			lastDocPos = getTextPos();			IDESaveStatus(curFileName, lastDocSec, lastDocPos, lastDocFont);			saveSection(curSection);			FldSetDirty(fld_ptr(fldTEXT), 0);			// AND RUN			autoReturnToForm = ViewForm;			closeDOC();			FrmGotoForm(SBOutForm);			break;			}		break;		       default:        break;    	}    return handled;}Boolean		ViewFormHandleEvent(EventPtr e){	return ViewFormHandleEventSEG(e);}//// FILEVIEW /////////////////////////////////////////////////////////////////////////////////////////////////////////////////void	FSVSaveStatus(const char *file, word lastPos, int font)	SEC(IDE);void	FSVSaveStatus(const char *file, word lastPos, int font){	file_t	f;	int		recs;	byte	*buff;	f = dbOpenAlw("SmBa.FSV.DAT", SmBa, idDATA);	buff = tmp_alloc(128);	recs = DmNumRecords(f);	StrCopy(buff, file);	buff[68] = (lastPos >> 8);		buff[69] = lastPos & 0xFF;	buff[70] = (font >> 8);			buff[71] = font    & 0xFF;	if	( recs > 0 )			dbWrite(f, 0, buff, 128);	else		dbWrite(f, 0xFFFF, buff, 128);	tmp_free(buff);	dbClose(f);}int		FSVLoadStatus(char *file, word *lastPos, int *font) SEC(IDE);int		FSVLoadStatus(char *file, word *lastPos, int *font){	file_t	f;	int		recs, found = 0;	byte	*buff;	f = dbOpenAlw("SmBa.FSV.DAT", SmBa, idDATA);	buff = tmp_alloc(128);	recs = DmNumRecords(f);	if	( recs > 0 )	{		dbRead(f, 0, buff, 128);		StrCopy(file, buff);		*lastPos = (buff[68] << 8) + buff[69];		*font    = (buff[70] << 8) + buff[71];		found = 1;		}	else	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -