koreth@ssyx.ucsc.edu (Steven Grimm) (06/10/88)
Submitted-by: cst.prl.philips.nl!meulenbr (Frans Meulenbroeks) Posting-number: Volume 1, Issue 52 Archive-name: assist2/part01 [This accessory contains a clock-setter and some disk utilities. Uuencoded resource files are included. I got it to compile under Laser C. -sg] #!/bin/sh # shar: Shell Archiver (v1.22) # # This is part 1 of a multipart archive # do not concatenate these parts, unpack them in order with /bin/sh # # Run the following text with /bin/sh to create: # ASSIST2.C # ASSIST2.H # ASSIST2.MAK # ASSIST2.RSC # ASSIST2.RSD # INCLUDE.H # if test -r s2_seq_.tmp then echo "Must unpack archives in sequence!" next=`cat s2_seq_.tmp`; echo "Please unpack part $next next" exit 1; fi sed 's/^X//' << 'SHAR_EOF' > ASSIST2.C && X#include "assist2.h" X#include "include.h" X#include "gemdefs.h" X#include "gembind.h" X X#define FILENAME "ASSIST2.RSC" X#define ACCNAME " The Assistant " X X X/****************************************************************/ X/*** If you have a battery backup of your systemclock ***/ X/*** please tell the compiler witch timer keeps on running ***/ X/*** >>> System clock (GEM) ***/ X/*** >>> Keyboard processor clock (KEY) ***/ X/****************************************************************/ X X#define GEM 0 X X/****************************************************************/ X/*** In Europa there is another date-format then ***/ X/*** there is in the USA ***/ X/*** define the date-format here ***/ X/*** >>> 31-12-87 (EUR) ***/ X/*** >>> 12-31-87 (USA) ***/ X/****************************************************************/ X X#define EUR 0 X X/****************************************************************/ X/*** Decaration of the variables ***/ X/****************************************************************/ X XOBJECT *tree; Xint contrl[12],intin[128],intout[128],ptsin[128],ptsout[128]; Xint in[11],out[57]; Xextern int gl_apid; Xshort btime=TRUE,bdate=FALSE,balarm=FALSE; Xchar td_string[18] = "00.00.00 00:00:00"; Xchar *time_string="000000",*date_string="000000"; Xchar wait[] = { 0xff, 20 ,0xff, 0 }; Xint first,vn,zh,button,wh; Xint bx,by,bw,bh,xdesk,ydesk,wdesk,hdesk; X X Xint info_track; Xint info_sector; Xint info_side; Xlong info_free; Xchar info_name[14]; X X X Xmain() X{ Xregister long time; /*** use register for speed ***/ Xregister char temp; Xint event,h; X Xint eind; Xchar bfree[7]; XOBJECT *tree; Xappl_init(); Xfirst=TRUE; X /********************************************/ X /*** Copy the time and date ***/ X /*** From GEM (system) to BIOS (keyboard) ***/ X /*** or ***/ X /*** From BIOS (keyboard) to GEM (system) ***/ X /********************************************/ X/* X#ifdef GEM Xtel_bios(Tgetdate(),Tgettime()); X#else Xtel_gem(Gettime()); X#endif X X*/ Xif(!rsrc_load(FILENAME)) /*** try to load the RSC-file ***/ X { X form_alert(1,"[3][I'm sorry, but I can't find|the RESOURCE-file.][ #&%$*##&^ ]"); X appl_exit(); X } Xelse X { X vn = graf_handle(&h,&zh,&h,&h); zh -= 2; X v_opnvwk(&h,&vn,out); X vst_color(vn,1); X wind_get(0,WF_WXYWH,&xdesk,&ydesk,&wdesk,&hdesk); X /*** Put program-name into the desktop ***/ X X menu_register(gl_apid,ACCNAME); X rsrc_gaddr(0,CLOCK,&tree); X set_text(tree,TIME,time_string); X set_text(tree,DATE,date_string); X while(TRUE) /*** means always ***/ X { X time = Gettime(); /*** get the time and date ***/ X /*** from the keyboard ***/ X X /*get the second's*/ X temp = ((((char)time) & 0x1f)*2); X convert_time(temp,15,4); X X /*get the minutes*/ X time >>= 5; X temp = ((char)time) & 0x3f; X convert_time(temp,12,2); X X /*get the hours*/ X time >>=6; X temp = time & 0x1f; X convert_time(temp,9,0); X X /*get the day*/ X time >>=5; X temp = ((char)time) & 0x1f; X #ifdef EUR X convert_date(temp,0,0); /*Europe format*/ X #else X convert_date(temp,3,2); /*USA format*/ X #endif X X /*get the month*/ X time >>=5; X temp = ((char)time) & 0x0f; X #ifdef EUR X convert_date(temp,3,2); X #else X convert_date(temp,0,0); X #endif X X /*get the year*/ X temp = ((char)((time >> 4) + 80L) % 100) & 0x7f; X convert_date(temp,6,4); X X rsrc_gaddr(0,CLOCK,&tree); X X /********************************************/ X /*** if alarm is set then ***/ X /*** check if the timestring is the same ***/ X /*** as the alarmstring. ***/ X /********************************************/ X X if (balarm==TRUE && (strncmp(( (TEDINFO *) (tree + ALARM)->ob_spec )->te_ptext,time_string,4))==0) X { X balarm=FALSE; /*** set alarm off ***/ X setp(tree,ALARMON,NORMAL); X setp(tree,ALARMOFF,SELECTED); X ping(); /*** give some sound ***/ X do_dialog(ALERT1,0); /*** tel the user it's time ***/ X } X if (btime == TRUE && bdate == TRUE) X { X /*** display the ***/ X /*** whole timestring ***/ X X v_gtext(vn,502,zh,td_string); X } X else X { X if (btime == TRUE && bdate == FALSE) X { X /*** display only ***/ X /*** the date ***/ X X v_gtext(vn,574,zh,&td_string[9]); X } X else X { X if (btime == FALSE && bdate == TRUE) X { X /*** make an early end to ***/ X /*** the string and display ***/ X /*** the time ***/ X X td_string[9]=0; X v_gtext(vn,574,zh,td_string); X } X } X } X if (((date_string[5]-'0')<7)&&( first==TRUE)) X { X ping(); X first=FALSE; X wnd_opn(); X clock(); X wnd_cls(); X } X X /********************************************/ X /*** check wat's happening. ***/ X /********************************************/ X X event = evnt_multi(MU_TIMER | MU_MESAG,0,0,0,0,0,0,0,0,0,0,0, X 0,0,out,2000,0,&h,&h,&h,&h,&h,&h); X if((event & MU_MESAG) && (*out == AC_OPEN)) X { X wnd_opn(); X rsrc_gaddr(0,MAIN,&tree); X eind = FALSE; X while(eind != TRUE) X { X ltoa(Malloc(-1L),bfree); X set_text(tree,MBFREE,bfree); X form_center(tree,&bx,&by,&bw,&bh); X form_dial(0,0,0,0,0,bx,by,bw,bh); X form_dial(1,0,0,0,0,bx,by,bw,bh); X objc_draw(tree,0,32,bx,by,bw,bh); X button=form_do(tree,0); X objc_change(tree,button,0,bx,by,bw,bh,NORMAL,0); X form_dial(3,0,0,0,0,bx,by,bw,bh); /*** erase dialog ***/ X switch(button) X { X X case ABOUT: X do_dialog(INTRO,0); X break; X X case MCLOCK: X clock(); X break; X X case MFORMAT: X format(); X break; X X case MAKEDIR: X makedir(); X break; X X case MINFOA: X case MINFOB: X disk_info(button-MINFOA); X break; X X case MERASEA: X case MERASEB: X disk_erase(button-MERASEA); X break; X X case MCANCEL: X eind=TRUE; X break; X } /* end of switch */ X } /* end of while */ X wnd_cls(); X } X } X appl_exit(); X } X} X X X Xdisk_erase(drive) Xint drive; X{ Xif (insert(drive)==OKINSERT) X { X if (get_info(drive)==TRUE) X { X make_boot(info_track,info_sector,info_side-1,drive,"ASSIST2 FMT"); X disk_info(drive); X } X } X} X X X Xdisk_info(drive) Xint drive; X{ XOBJECT *tree; Xint again=TRUE; Xchar *track="00",*sector="00",*side="0",*free="000000"; X Xrsrc_gaddr(0,DISKINFO,&tree); Xwhile (again == TRUE) X { X Fsfirst("$%&&&&.&^&",255); X again=FALSE; X info_name[0]=0; X if (get_info(drive)==TRUE) X { X ltoa((long)info_track,track); X ltoa((long)info_sector,sector); X ltoa((long)info_side,side); X ltoa((long)info_free,free); X set_text(tree,INFOTRAC,track); X set_text(tree,INFOSECT,sector); X set_text(tree,INFOSIDE,side); X set_text(tree,INFOFREE,free); X set_text(tree,INFONAME,info_name); X do_dialog(DISKINFO,0); X if (button == INFOAGAI) again=TRUE; X } X } X} X X X Xget_info(drive) Xint drive; X{ Xint dummy,error,old_drive; Xchar *buffer; Xlong buf[4]; XDTABUF *dtabuf; Xbuffer = malloc(20000); Xdtabuf = (DTABUF *) Fgetdta(); Xold_drive=Dgetdrv(); XDsetdrv(drive); Xdummy=Floprd(buffer,0L,drive,1,0,0,1); Xif(dummy < 0) X { X do_dialog(DISKERRO,0); X error=FALSE; X } Xelse X { X if (Fsfirst("*.*",8)==0) X { X for(dummy=0; dummy<14; dummy++) info_name[dummy]=dtabuf->name[dummy]; X info_name[dummy++]=0; X } X Dfree(&buf,drive+1); X info_free=buf[0]*buf[2]*buf[3]; X info_side=get_no(0x1a,buffer); X info_track=get_no(0x13,buffer)/(get_no(0x18,buffer) * get_no(0x1a,buffer)); X info_sector=get_no(0x18,buffer); X error=TRUE; X } Xfree(buffer); XDsetdrv(old_drive); Xreturn(error); X} X X X X X/****************************************************************/ X/*** convert the integer time ***/ X/*** to ASCII and put that into ***/ X/*** two strings. ***/ X/****************************************************************/ Xconvert_time(time,n1,n2) Xregister char time; Xint n1,n2; X{ Xtd_string[n1] = time_string[n2] = time /10 +'0'; Xtd_string[n1+1] = time_string[n2+1] = time %10 +'0'; X} X X X/****************************************************************/ X/*** convert the integer date ***/ X/*** to ASCII and put that into ***/ X/*** two strings. ***/ X/****************************************************************/ Xconvert_date(date,n1,n2) Xregister char date; Xint n1,n2; X{ Xtd_string[n1] = date_string[n2] = date / 10 + '0'; Xtd_string[n1+1] = date_string[n2+1] = date % 10 + '0'; X} X X X/****************************************************************/ X/*** function to let the user set the date, ***/ X/*** time and alarm and how to display it. ***/ X/****************************************************************/ Xclock() X{ Xchar date2[6],time2[6]; Xint time=0,date=0; X X /*** copy the date and time ***/ X /*** currently in the dialogbox ***/ Xstrcpy(date2,date_string); Xstrcpy(time2,time_string); X /*** ask for user respond ***/ Xdo_dialog(CLOCK,TIME); X /*** set some controle var.'s ***/ Xbtime=selectp(tree,TIMEON); Xbdate=selectp(tree,DATEON); Xbalarm=selectp(tree,ALARMON); X /*** if exit is SETTIME ***/ X /*** set the time and date ***/ Xif (button == SETTIME) X { X time |= convert(time_string,0); X time <<=6; X time |= convert(time_string,2); X time <<=5; X time |= (convert(time_string,4)/2); X Tsettime(time); X date |= (convert(date_string,4)-80); X date <<=4; X#ifdef EUR X date |= convert(date_string,2); X date <<=5; X date |= convert(date_string,0); X#else X date |= convert(date_string,0); X date <<=5; X date |= convert(date_string,2); X#endif X Tsetdate(date); X tel_bios(Tgetdate(),Tgettime()); X } Xv_gtext(vn,502,zh," "); /***clear the desktop***/ X} X X X X/****************************************************************/ X/*** function to convert a 2byte-string into an integer ***/ X/****************************************************************/ Xconvert(string,number) Xchar *string; Xint number; X{ Xreturn((string[number]-'0')*10 +(string[number+1]-'0')); X} X X X X X/****************************************************************/ X/*** function to give some sound ***/ X/****************************************************************/ Xping() X{ XCconout(7); Xwhile(Dosound(-1L)); XDosound(wait); Xwhile(Dosound(-1L)); XCconout(7); X} X X X/****************************************************************/ X/***function to get the time from GEM and send it to the bios ***/ X/****************************************************************/ Xtel_bios(timedate) Xlong timedate; X{ XSettime(timedate); X} X X X/****************************************************************/ X/*** reverse of the above ***/ X/****************************************************************/ Xtel_gem(date,time) Xint date,time; X{ XTsetdate(date); XTsettime(time); X} X X X X/****************************************************************/ X/*** function to set the state of an object ***/ X/*** to NORMAL,SELECTED,...... ***/ X/****************************************************************/ X Xsetp(tree,object,bit) XOBJECT *tree; Xint object,bit; X{ Xobjc_change(tree,object,0,bx,by,bw,bh,bit,0); X} X X X Xdo_format(tr,se,si,dr,diskn) Xint tr,se,si,dr; Xchar *diskn; X{ XOBJECT *tree; Xint dt,button; Xchar trs[2],sis[2],*buffer; Xsis[0]= '0'; Xbuffer = malloc(20000); Xrsrc_gaddr(0,GO,&tree); X /*** set walking-bar to start ***/ Xinit_prog(); X /*** let some RSC-strings point ***/ X /*** to our own strings ***/ Xset_text(tree,GOTRACK,trs); Xset_text(tree,GOSIDE,sis); X /*** display a dialog box ***/ Xform_center(tree,&bx,&by,&bw,&bh); /*** get coordinates ***/ Xform_dial(0,0,0,0,0,bx,by,bw,bh ); /*** reserve screen ***/ Xform_dial(1,0,0,0,0,bx,by,bw,bh); /*** make growbox ***/ Xobjc_draw(tree,0,MAX_DEPTH,bx,by,bw,bh); Xfor(dt=0;dt<tr;dt++) X { X /*** let the user see ***/ X /*** what's going on ***/ X set_prog((float)dt,(float)tr-1,bx,by,bw,bh); X ltoa((long)dt,trs); X objc_draw(tree,GOTRACK,0,bx,by,bw,bh); X objc_draw(tree,GOSIDE,0,bx,by,bw,bh); X /*** and format side one ***/ X button = Flopfmt(buffer,0L,dr,se,dt,0,01,0x87654321L,0xe5e5); X /*** if asked for. ***/ X /*** format side two ***/ X if((si == 1) && (button == 0)) X { X sis[0] +=1; X objc_draw(tree,GOSIDE,0,bx,by,bw,bh); X sis[0] -=1; X button = Flopfmt(buffer,0L,dr,se,dt,1,01,0x87654321L,0xe5e5); X } X /*** if something goes wrong ***/ X /*** button is true ***/ X if(button != 0) dt = (tr+1); X } Xform_dial(3,0,0,0,0,bx,by,bw,bh); /*** erase dialog ***/ Xfree(buffer); Xif (button == FALSE) make_boot(tr,se,si,dr,diskn); Xelse do_dialog(DISKERRO,0); X} X X X X X Xformat() X{ X XOBJECT *tree; Xint sectors,tracks=80,sides,drive,eind; Xchar *diskname="EXTENDEDFMT",*track="80"; X Xrsrc_gaddr(0,EXFORMAT,&tree); Xset_text(tree,DISKNAME,diskname); Xset_text(tree,TRACKNUM,track); Xform_center(tree,&bx,&by,&bw,&bh); Xform_dial(0,0,0,0,0,bx,by,bw,bh); Xform_dial(1,0,0,0,0,bx,by,bw,bh); Xobjc_draw(tree,0,32,bx,by,bw,bh); Xeind = FALSE; Xwhile(eind != TRUE) X { X button=form_do(tree,DISKNAME); X objc_change(tree,button,0,bx,by,bw,bh,NORMAL,0); X switch(button){ X X case FORMAT: X sides= selectp(tree,DS); X drive= selectp(tree,DRIVEB); X sectors=selectp(tree,SEC10)+9; X form_dial(3,0,0,0,0,bx,by,bw,bh); /*** erase dialog ***/ X if (insert(drive)==OKINSERT) X { X do_format(tracks,sectors,sides,drive,diskname); X disk_info(drive); X } X eind=TRUE; X break; X X case CANCEL: X eind=TRUE; X form_dial(3,0,0,0,0,bx,by,bw,bh); /*** erase dialog ***/ X break; X X X case TRACKDWN: X case TRACKUP: X if ((button==TRACKUP)&(tracks<83)) tracks+=1; X if ((button==TRACKDWN)&(tracks>80)) tracks-=1; X ltoa((long)tracks,track); X evnt_timer(100,0); X objc_draw(tree,TRACKNUM,0,bx,by,bw,bh); X break; X X } X } X} X X X X/****************************************************************/ X/*** function to set the width of the object used by the ***/ X/*** progress-indicator to zero ***/ X/****************************************************************/ Xinit_prog() X{ XOBJECT *tree; X Xrsrc_gaddr(0, GO, &tree); X(tree + BAR)->ob_width = 0; X} X X Xinsert(drive) Xint drive; X{ Xchar *str_drive="X"; XOBJECT *tree; Xrsrc_gaddr(0,INSERT,&tree); Xstr_drive[0]=drive+'A'; Xset_text(tree,AINSERT,str_drive); Xdo_dialog(INSERT,0); Xreturn(button); X} X X Xltoa(number,string) Xlong number; Xchar *string; X{ Xsprintf(string,"%ld ",number); X} X X X X/****************************************************************/ X/*** function to make an adjusted bootsector ***/ X/****************************************************************/ X Xmake_boot(tr,se,si,dr,diskn) Xint tr,se,si,dr; Xchar *diskn; X{ Xint total,dummy; Xchar *buffer; Xbuffer=malloc(20000); X /*** Make a new bootsector and ***/ X /*** write is to disk ***/ X Xtotal=(tr * se); Xfor(dummy=0; dummy<(se*512); *(buffer + dummy++)=0); XProtobt(buffer,0x01000000L,(((tr>40)*2)+si),0); X*(buffer + 0x13)=(total+(si ? total : 0)) &0xff; X*(buffer + 0x14)=((total+(si ? total : 0)) >> 8) &0xff; X*(buffer + 0x18)=se; XFlopwr(buffer,0L,dr,1,0,0,se); X Xfor(dummy=0; dummy<512; buffer[dummy++]=0); Xfor (dummy=0; dummy<strlen(diskn); dummy++) X { X diskn[dummy]=toupper(diskn[dummy]); X } Xsprintf(buffer,diskn); Xbuffer[11]=8; XFlopwr(buffer,0L,dr,(12-se),(1-si),si,(se-4)); Xfree(buffer); X} X X X/****************************************************************/ X/*** function to check if an object is SELECTED ***/ X/****************************************************************/ Xselectp(tree,which) Xlong tree; Xint which; X{ Xreturn statep(tree,which,SELECTED); X} X X X X X/****************************************************************/ X/*** function to set the width of an object ***/ X/*** changing the width of an object and redraw that object ***/ X/*** wil give us a process-indicator ***/ X/****************************************************************/ Xset_prog(value, maxc,x,y,w,h) Xfloat value, maxc; Xint x,y,w,h; X{ XOBJECT *tree; XGRECT box; X Xrsrc_gaddr(0, GO, &tree); X(tree + BAR)->ob_width=((((tree + BOX)->ob_width ) / maxc) * value); Xobjc_draw(tree,BAR,0,x,y,w,h); X} X X X Xset_text(tree,object,string) XOBJECT *tree; Xint object; Xchar *string; X{ XTEDINFO *obspec; X Xobspec= (TEDINFO *) (tree +object)->ob_spec; Xobspec->te_ptext=string; Xobspec->te_txtlen=strlen(string)+1; X} X X X X X X/****************************************************************/ X/*** function to get the state of an object ***/ X/*** to NORMAL,SELECTED,...... ***/ X/****************************************************************/ X Xstatep(tree,which,bit) Xlong tree; Xint which,bit; X{ Xreturn((LWGET(OB_STATE(which)) & bit) != FALSE); X} X X X/****************************************************************/ X/*** function to convert an integer in MSDOS-format ***/ X/*** to ATARI format ***/ X/****************************************************************/ Xget_no(i,buffer) Xint i; Xchar *buffer; X{ Xint low,high; Xlow = *(buffer + i); high = *(buffer+ i+1); Xif(low < 0) high += 1; Xreturn(low + (256*high)); X} X Xmakedir() X{ XOBJECT *tree; Xchar *path,*name="12345678.123\0"; Xint dummy; Xpath = (char *)Malloc(40L); Xstrcpy(name,"FILENAME.EXT\0"); Xstrcpy(path,"A:\\*.*\0"); Xpath[0]=(Dgetdrv()+'A'); XDsetpath(path); Xfsel_input(path,name,&button); Xif (button==1) X { X for(dummy=strlen(path); dummy>0;dummy--) X { X if (path[dummy]=='\\') X { X path[dummy]=0; X dummy=0; X } X } X Dsetdrv(path[0]-'A'); X Dsetpath(path); X if(Dcreate(name)) do_dialog(DISKERRO,0); X } XMfree(path); X} X X X X/****************************************************************/ X/** function to get user-respond from a already drawn dialog. **/ X/** And to set the exitbutton to NORMAL. **/ X/****************************************************************/ X Xdo_dialog(dialog,edit) Xint dialog,edit; X{ Xrsrc_gaddr(0,dialog,&tree); Xform_center(tree,&bx,&by,&bw,&bh); /*** get coordinates ***/ Xform_dial(0,0,0,0,0,bx,by,bw,bh ); /*** reserve screen ***/ Xform_dial(1,0,0,0,0,bx,by,bw,bh); /*** make growbox ***/ Xobjc_draw(tree,0,MAX_DEPTH,bx,by,bw,bh); Xbutton = form_do(tree,edit); Xform_dial(2,0,0,0,0,bx,by,bw,bh); /*** schrink box ***/ Xform_dial(3,0,0,0,0,bx,by,bw,bh); /*** erase dialog ***/ Xsetp(tree,button,NORMAL); X} X Xwnd_opn() X{ Xwh=wind_create(0,xdesk,ydesk,wdesk,hdesk); Xwind_open(wh,xdesk,ydesk,wdesk,hdesk); X} X Xwnd_cls() X{ Xwind_close(wh); Xwind_delete(wh); X} X SHAR_EOF chmod 0600 ASSIST2.C || echo "restore of ASSIST2.C fails" sed 's/^X//' << 'SHAR_EOF' > ASSIST2.H && X/* resource set indicies for ASSIST2 */ X X#define EXFORMAT 0 /* form/dialog */ X#define TRACKUP 6 /* BUTTON in tree EXFORMAT */ X#define TRACKDWN 7 /* BUTTON in tree EXFORMAT */ X#define TRACKNUM 8 /* FTEXT in tree EXFORMAT */ X#define SEC9 12 /* BUTTON in tree EXFORMAT */ X#define SEC10 13 /* BUTTON in tree EXFORMAT */ X#define DISKNAME 14 /* FBOXTEXT in tree EXFORMAT */ X#define FORMAT 15 /* BUTTON in tree EXFORMAT */ X#define CANCEL 16 /* BUTTON in tree EXFORMAT */ X#define SS 20 /* BUTTON in tree EXFORMAT */ X#define DS 21 /* BUTTON in tree EXFORMAT */ X#define DRIVEA 25 /* BUTTON in tree EXFORMAT */ X#define DRIVEB 26 /* BUTTON in tree EXFORMAT */ X X#define GO 1 /* form/dialog */ X#define GOTRACK 7 /* FTEXT in tree GO */ X#define GOSIDE 8 /* FTEXT in tree GO */ X#define BOX 9 /* TEXT in tree GO */ X#define BAR 10 /* BOXTEXT in tree GO */ X X#define MAIN 2 /* form/dialog */ X#define MBFREE 3 /* FBOXTEXT in tree MAIN */ X#define MCLOCK 4 /* BUTTON in tree MAIN */ X#define MFORMAT 5 /* BUTTON in tree MAIN */ X#define MCANCEL 6 /* BUTTON in tree MAIN */ X#define MAKEDIR 7 /* BUTTON in tree MAIN */ X#define MINFOA 10 /* BUTTON in tree MAIN */ X#define MINFOB 11 /* BUTTON in tree MAIN */ X#define MERASEA 14 /* BUTTON in tree MAIN */ X#define MERASEB 15 /* BUTTON in tree MAIN */ X#define ABOUT 16 /* BUTTON in tree MAIN */ X X#define INSERT 3 /* form/dialog */ X#define AINSERT 3 /* FTEXT in tree INSERT */ X#define OKINSERT 5 /* BUTTON in tree INSERT */ X#define NOINSERT 6 /* BUTTON in tree INSERT */ X X#define DISKERRO 4 /* form/dialog */ X X#define INTRO 5 /* form/dialog */ X X#define CLOCK 6 /* form/dialog */ X#define TIME 4 /* FTEXT in tree CLOCK */ X#define TIMEOFF 5 /* BUTTON in tree CLOCK */ X#define TIMEON 6 /* BUTTON in tree CLOCK */ X#define DATE 9 /* FTEXT in tree CLOCK */ X#define DATEOFF 10 /* BUTTON in tree CLOCK */ X#define DATEON 11 /* BUTTON in tree CLOCK */ X#define CLOCKEXI 13 /* BUTTON in tree CLOCK */ X#define ALARM 15 /* FTEXT in tree CLOCK */ X#define ALARMON 16 /* BUTTON in tree CLOCK */ X#define ALARMOFF 18 /* BUTTON in tree CLOCK */ X#define SETTIME 19 /* BUTTON in tree CLOCK */ X X#define DISKINFO 7 /* form/dialog */ X#define INFOTRAC 2 /* FTEXT in tree DISKINFO */ X#define INFOSECT 3 /* FTEXT in tree DISKINFO */ X#define INFOSIDE 4 /* FTEXT in tree DISKINFO */ X#define INFOFREE 6 /* FBOXTEXT in tree DISKINFO */ X#define INFOEXIT 7 /* BUTTON in tree DISKINFO */ X#define INFOAGAI 8 /* BUTTON in tree DISKINFO */ X#define INFONAME 10 /* FBOXTEXT in tree DISKINFO */ X X#define ALERT1 8 /* form/dialog */ X XSHAR_EOF chmod 0600 ASSIST2.H || echo "restore of ASSIST2.H fails" sed 's/^X//' << 'SHAR_EOF' > ASSIST2.MAK && Xkey.c Xmegamax\mmlink.ttp key.o megamax\acc.l -o key.acc SHAR_EOF chmod 0600 ASSIST2.MAK || echo "restore of ASSIST2.MAK fails" sed 's/^X//' << 'SHAR_EOF' > s2_temp_.tmp && Xbegin 600 ASSIST2.RSC XM``$/4`M\#U`*N`JX`"0#N`M\&I``>``)`",````.`````!JT#@\.#R!&3U)- SHAR_EOF echo "End of part 1, continue with part 2" echo "2" > s2_seq_.tmp exit 0