gtc/ti68k/ide/main.c
2018-01-31 14:14:00 +00:00

306 lines
6.4 KiB
C

/*
* GTC source file explorer
*/
#if defined(_89)||defined(_92)
#define BATCH_COMPILE
#endif
#define TITLEBAR
//#define OPTIMIZE_ROM_CALLS
//#define USE_KERNEL
#define ONE_CALC
#ifndef USE_KERNEL
#define SAVE_SCREEN
#endif
#ifdef BATCH_COMPILE
#define RELEASE
#else
//#define RELEASE
/*#define _ONE_CALC_ONLY
#define _92_ONLY*/
#define PEDROM
//#define _89
#endif
#if defined(_89)&&defined(_92)
#error oops, both models specified...
#endif
#ifdef _89
#define USE_TI89
#define X 160
#define Y 100
#define q89(x,y) (x)
#else
#define USE_TI92PLUS
#define USE_V200
#define X 240
#define Y 128
#define q89(x,y) (y)
#endif
#ifdef RELEASE
#define NDEBUG
#endif
#ifndef PEDROM
#define MIN_AMS 205
#else
#define MIN_AMS 101
#endif
#include <tigcclib.h>
//#include <kernel.h>
#include <extgraph.h>
#define GTC_IDE
typedef unsigned long TI_LONG;
typedef unsigned short TI_SHORT;
#ifdef USE_ABSOLUTE_PATHS
#include "E:\Paul\89\_Projex\GtC\pch.h"
#include "E:\Paul\89\Ti-GCC\Projects\Gt-Dev\apphdr.h"
#include "E:\Paul\89\Ti-GCC\Projects\Gt-Dev\SecureComm.h"
#include "E:\Paul\89\Ti-GCC\Projects\Gt-Dev\Plugins.h"
#else
#include "pch.h"
#include "gtdev-apphdr.h"
#include "gtdev-securecomm.h"
#include "gtdev-plugins.h"
#endif
/*#undef ST_flags
#define ST_flags _ROM_CALL_443
extern unsigned long ST_flags;*/
void *kbdq=0;
//#define ST_flags (*(unsigned long *)_rom_call_addr(443))
//#define ST_flagsL ((unsigned int)ST_flags)
#ifndef PEDROM
#define ST_flagsL (*(unsigned int *)(_rom_call_addr(443)+2))
#else
unsigned int ST_flagsL=0;
#endif
char sUnpackBuf[500];
#ifndef ONE_CALC
int calc=0;
void init_calc() {
calc=CALCULATOR;
}
#endif
#undef CALCULATOR
#ifdef _89
#define CALCULATOR 0
#define _89_92(x,y) (x)
#else
#define CALCULATOR 1
#define _89_92(x,y) (y)
#endif
#define HD2
#include "Util.h"
#include "PchUtil.h"
#include "Display.h"
#include "Edit.h"
#include "Handlers.h"
#include "EditUI.h"
#include "Plugins.h"
#include "Editor.h"
#include "autoint_fix.h"
char _ti89[0],_ti92plus[0];
void memquit() {
ST_helpMsg("Not enough memory!");
ngetchx();
}
#if 0
void _main(void) {
ESI ap;
char *fold=(char *)$(source);
// int X=LCD_WIDTH,Y=LCD_HEIGHT;
char *port;
char b[50];
int key,sel=0;
if (AMS_1xx) {
ST_showHelp("Works only on AMS 2.0x");
ngetchx();
return;
}
kbdq=kbd_queue();
#ifndef ONE_CALC
init_calc();
#endif
/*#undef AMS_2xx
#define AMS_2xx 1
if (AMS_2xx) ST_flags &= ~(0x100000);*/
InitArgPtr(ap);
if (GetArgType(ap) == STR_TAG) {
fold=(char *)GetSymstrArg(ap);
}
if (GetArgType(ap) != END_TAG) {
ST_helpMsg("Syntax: explore(\"folder\")");
ngetchx();
return;
}
if (!SymFindHome(fold).folder) {
int ok=1; char c,*p=fold;
while ((c=*--p)) if (!(c=='_' || c>='a' || c<='z' || c>='0' || c<='9')) ok=0;
if (ok)
ok=FolderAdd(fold);
if (!ok) {
ST_helpMsg("Invalid folder name");
ngetchx();
return;
}
}
if (!(port=malloc(LCD_SIZE))) { memquit(); return; }
do {
char *data=malloc(400*9);
SYM_ENTRY *SymPtr;
int but[5];
int n=0,i,st,M;
void __attribute__((stkparm)) Button(int i,char *t) {
int x=i*32; char b[100];
but[i]=1;
sprintf(b,"F%d %s",i+1,t);
DrawLine(x+2,Y-9,x+31-2,Y-9,A_NORMAL);
DrawLine(x,Y-7,x,Y-1,A_NORMAL);
DrawLine(x+31,Y-7,x+31,Y-1,A_NORMAL);
DrawPix(x+1,Y-8,A_NORMAL);
DrawPix(x+31-1,Y-8,A_NORMAL);
DrawStr(x+2,Y-7,b,A_NORMAL);
}
if (!data) { memquit(); break; }
#define name(x) data+((x)+((x)<<3))
SymPtr = SymFindFirst(fold,1);
while (SymPtr) {
if (SymPtr->handle) {
unsigned int *p=HLock(SymPtr->handle);
if (((unsigned char *)p)[*p+1]==TEXT_TAG)
strcpy(name(n), SymPtr->name), n++;
HeapUnlock(SymPtr->handle);
}
SymPtr = SymFindNext();
}
PortSet(port,239,127);
ClrScr();
DrawLine(1,0,X-2,0,A_NORMAL);
DrawLine(0,Y-1,X-1,Y-1,A_NORMAL);
DrawLine(0,1,0,Y-1,A_NORMAL);
DrawLine(X-1,1,X-1,Y-1,A_NORMAL);
memset(but,0,5*2);
FontSetSys(0);
Button(0,"New");
if (n) {
Button(1,"Setup");
Button(2,"Build");
Button(3,"Run");
}
Button(4,"About");
/* 89 : 11 files / 92+/V200 : 14 files */
FontSetSys(1);
M=CALCULATOR?14:11;
st=sel-(M+1)/2;
if (st>n-M) st=n-M;
if (st<0) st=0;
for (i=0;i<M;i++) {
if (st+i>=n) break;
if (i==sel-st) {
SCR_RECT rect={{3,(i<<3)+1,X-3,(i<<3)+9}};
ScrRectFill(&rect,ScrRect,A_NORMAL);
}
DrawStr(3,(i<<3)+2,name(st+i),A_XOR);
}
PortRestore();
LCD_restore(port);
key=ngetchx();
if (key==(int)KEY_UP) sel--;
else if (key==(int)KEY_DOWN) sel++;
else if ((i=key-KEY_F1)>=0 && i<5 && but[i]) {
if (i==0) {
char buffer[21] = {0};
HANDLE handle = DialogNewSimple (140, 55);
DialogAddTitle(handle, "NEW PROJECT", BT_OK, BT_CANCEL);
DialogAddText(handle, 3, 20, "Follow the steps to create a new program");
DialogAddRequest(handle, 3, 30, "Program name :", 6, 20, 14);
DialogAddText(handle, 3, 40, "Program type :");
if (DialogDo(handle, CENTER, CENTER, buffer, NULL) == KEY_ENTER)
DlgMessage("GREETINGS", buffer, BT_OK, BT_NONE);
} else if (i==4) {
ST_flags &= ~(0x100000);
DlgMessage("ABOUT GTC",
"\n GTC C Compiler & IDE\n\n(c) 2001-2002 by Paul Froissart\n",
BT_OK,BT_NONE);
ST_flags |= 0x100000;
}
} else if (key==KEY_ENTER) {
char *p=fold;
while (*--p);
*b=0;
sprintf(b+1,"%s\\%s",p+1,name(sel));
free(port);
Edit(b+1+strlen(b+1),b+1+strlen(p+1)+1);
port=malloc(LCD_SIZE);
}
if (sel>=n) sel-=n;
if (sel<0) sel+=n;
free(data);
} while (key!=264);
free(port);
// if (AMS_2xx) ST_flags |= 0x100000;
}
#else
void _main(void) {
#ifndef PEDROM
if (AMS_1xx) {
ST_helpMsg("Please upgrade to AMS 2.0x");
ngetchx();
return;
}
#endif
kbdq=kbd_queue();
#ifndef ONE_CALC
init_calc();
#endif
ESI ap;
char cfold[20]; strcpy(cfold,"source");
InitArgPtr(ap);
if (GetArgType(ap) == STR_TAG) {
strcpy(cfold,GetStrnArg(ap));
}
FixAutoint();
while (1) {
Port=malloc(LCD_SIZE);
if (!Port) return;
PortSet(Port,239,127);
ClrScr();
XP_C *xc=XpLoadFat(cfold);
if (!xc) break;
XP_S *xs=XpLoop(xc,8,std_callback,NULL);
if (!xs) { free(xc); break; }
char file[20]; strcpy(file,(char *)xs->d);
while (xs->t!=1) xs--;
char fold[20]; strcpy(fold,(char *)xs->d);
strcpy(cfold,fold);
free(xc);
PortRestore();
free(Port);
#if 0
char b[100];
*b=0;
sprintf(b+1,"%s\\%s",fold,file);
Edit(b+1+strlen(b+1),file);
#else
char path[8+1+8+1];
sprintf(path,"%.8s\\%.8s",fold,file);
Edit(path);
#endif
}
RestoreAutoint();
PortRestore();
free(Port);
}
#endif