📄 sbpad.c
字号:
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 + -