static GstBuffer * gst_rtp_jpeg_depay_process (GstRTPBaseDepayload * depayload, GstRTPBuffer * rtp) { GstRtpJPEGDepay *rtpjpegdepay; GstBuffer *outbuf; gint payload_len, header_len; guint8 *payload; guint frag_offset; gint Q; guint type, width, height; guint16 dri, precision, length; guint8 *qtable; rtpjpegdepay = GST_RTP_JPEG_DEPAY (depayload); if (GST_BUFFER_IS_DISCONT (rtp->buffer)) { GST_DEBUG_OBJECT (depayload, "DISCONT, reset adapter"); gst_adapter_clear (rtpjpegdepay->adapter); rtpjpegdepay->discont = TRUE; } payload_len = gst_rtp_buffer_get_payload_len (rtp); if (payload_len < 8) goto empty_packet; payload = gst_rtp_buffer_get_payload (rtp); header_len = 0; /* 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Type-specific | Fragment Offset | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Type | Q | Width | Height | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ frag_offset = (payload[1] << 16) | (payload[2] << 8) | payload[3]; type = payload[4]; Q = payload[5]; width = payload[6] * 8; height = payload[7] * 8; /* saw a packet with fragment offset > 0 and we don't already have data queued * up (most importantly, we don't have a header for this data) -- drop it * XXX: maybe we can check if the jpeg is progressive and salvage the data? * XXX: not implemented yet because jpegenc can't create progressive jpegs */ if (frag_offset > 0 && gst_adapter_available (rtpjpegdepay->adapter) == 0) goto no_header_packet; /* allow frame dimensions > 2040, passed in SDP session or media attributes * from gstrtspsrc.c (gst_rtspsrc_sdp_attributes_to_caps), or in caps */ if (!width) width = rtpjpegdepay->media_width; if (!height) height = rtpjpegdepay->media_height; if (width == 0 || height == 0) goto invalid_dimension; GST_DEBUG_OBJECT (rtpjpegdepay, "frag %u, type %u, Q %d, width %u, height %u", frag_offset, type, Q, width, height); header_len += 8; payload += 8; payload_len -= 8; dri = 0; if (type > 63) { if (payload_len < 4) goto empty_packet; /* 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Restart Interval |F|L| Restart Count | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ dri = (payload[0] << 8) | payload[1]; GST_DEBUG_OBJECT (rtpjpegdepay, "DRI %" G_GUINT16_FORMAT, dri); payload += 4; header_len += 4; payload_len -= 4; } if (Q >= 128 && frag_offset == 0) { if (payload_len < 4) goto empty_packet; /* 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | MBZ | Precision | Length | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Quantization Table Data | * | ... | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ precision = payload[1]; length = (payload[2] << 8) | payload[3]; GST_DEBUG_OBJECT (rtpjpegdepay, "precision %04x, length %" G_GUINT16_FORMAT, precision, length); if (Q == 255 && length == 0) goto empty_packet; payload += 4; header_len += 4; payload_len -= 4; if (length > payload_len) goto empty_packet; if (length > 0) qtable = payload; else qtable = rtpjpegdepay->qtables[Q]; payload += length; header_len += length; payload_len -= length; } else { length = 0; qtable = NULL; precision = 0; } if (frag_offset == 0) { GstMapInfo map; guint size; if (rtpjpegdepay->width != width || rtpjpegdepay->height != height) { GstCaps *outcaps; outcaps = gst_caps_new_simple ("image/jpeg", "framerate", GST_TYPE_FRACTION, rtpjpegdepay->frate_num, rtpjpegdepay->frate_denom, "width", G_TYPE_INT, width, "height", G_TYPE_INT, height, NULL); gst_pad_set_caps (depayload->srcpad, outcaps); gst_caps_unref (outcaps); rtpjpegdepay->width = width; rtpjpegdepay->height = height; } GST_LOG_OBJECT (rtpjpegdepay, "first packet, length %" G_GUINT16_FORMAT, length); /* first packet */ if (length == 0) { if (Q < 128) { /* no quant table, see if we have one cached */ qtable = rtpjpegdepay->qtables[Q]; if (!qtable) { GST_DEBUG_OBJECT (rtpjpegdepay, "making Q %d table", Q); /* make and cache the table */ qtable = g_new (guint8, 128); MakeTables (rtpjpegdepay, Q, qtable); rtpjpegdepay->qtables[Q] = qtable; } else { GST_DEBUG_OBJECT (rtpjpegdepay, "using cached table for Q %d", Q); } /* all 8 bit quantizers */ precision = 0; } else { if (!qtable) goto no_qtable; } } /* I think we can get here with a NULL qtable, so make sure we don't go dereferencing it in MakeHeaders if we do */ if (!qtable) goto no_qtable; /* max header length, should be big enough */ outbuf = gst_buffer_new_and_alloc (1000); gst_buffer_map (outbuf, &map, GST_MAP_WRITE); size = MakeHeaders (map.data, type, width, height, qtable, precision, dri); gst_buffer_unmap (outbuf, &map); gst_buffer_resize (outbuf, 0, size); GST_DEBUG_OBJECT (rtpjpegdepay, "pushing %u bytes of header", size); gst_adapter_push (rtpjpegdepay->adapter, outbuf); } /* take JPEG data, push in the adapter */ GST_DEBUG_OBJECT (rtpjpegdepay, "pushing data at offset %d", header_len); outbuf = gst_rtp_buffer_get_payload_subbuffer (rtp, header_len, -1); gst_adapter_push (rtpjpegdepay->adapter, outbuf); outbuf = NULL; if (gst_rtp_buffer_get_marker (rtp)) { guint avail; guint8 end[2]; GstMapInfo map; /* last buffer take all data out of the adapter */ avail = gst_adapter_available (rtpjpegdepay->adapter); GST_DEBUG_OBJECT (rtpjpegdepay, "marker set, last buffer"); if (avail < 2) goto invalid_packet; /* take the last bytes of the jpeg data to see if there is an EOI * marker */ gst_adapter_copy (rtpjpegdepay->adapter, end, avail - 2, 2); if (end[0] != 0xff && end[1] != 0xd9) { GST_DEBUG_OBJECT (rtpjpegdepay, "no EOI marker, adding one"); /* no EOI marker, add one */ outbuf = gst_buffer_new_and_alloc (2); gst_buffer_map (outbuf, &map, GST_MAP_WRITE); map.data[0] = 0xff; map.data[1] = 0xd9; gst_buffer_unmap (outbuf, &map); gst_adapter_push (rtpjpegdepay->adapter, outbuf); avail += 2; } outbuf = gst_adapter_take_buffer (rtpjpegdepay->adapter, avail); if (rtpjpegdepay->discont) { GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT); rtpjpegdepay->discont = FALSE; } gst_rtp_drop_meta (GST_ELEMENT_CAST (rtpjpegdepay), outbuf, g_quark_from_static_string (GST_META_TAG_VIDEO_STR)); GST_DEBUG_OBJECT (rtpjpegdepay, "returning %u bytes", avail); } return outbuf; /* ERRORS */ empty_packet: { GST_ELEMENT_WARNING (rtpjpegdepay, STREAM, DECODE, ("Empty Payload."), (NULL)); return NULL; } invalid_dimension: { GST_ELEMENT_WARNING (rtpjpegdepay, STREAM, FORMAT, ("Invalid Dimension %dx%d.", width, height), (NULL)); return NULL; } no_qtable: { GST_WARNING_OBJECT (rtpjpegdepay, "no qtable"); return NULL; } invalid_packet: { GST_WARNING_OBJECT (rtpjpegdepay, "invalid packet"); gst_adapter_flush (rtpjpegdepay->adapter, gst_adapter_available (rtpjpegdepay->adapter)); return NULL; } no_header_packet: { GST_WARNING_OBJECT (rtpjpegdepay, "discarding data packets received when we have no header"); return NULL; } }
static GstBuffer * gst_rtp_jpeg_depay_process (GstBaseRTPDepayload * depayload, GstBuffer * buf) { GstRtpJPEGDepay *rtpjpegdepay; GstBuffer *outbuf; gint payload_len, header_len; guint8 *payload; guint frag_offset; gint Q; guint type, width, height; guint16 dri, precision, length; guint8 *qtable; rtpjpegdepay = GST_RTP_JPEG_DEPAY (depayload); if (GST_BUFFER_IS_DISCONT (buf)) { gst_adapter_clear (rtpjpegdepay->adapter); } payload_len = gst_rtp_buffer_get_payload_len (buf); if (payload_len < 8) goto empty_packet; payload = gst_rtp_buffer_get_payload (buf); header_len = 0; /* 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Type-specific | Fragment Offset | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Type | Q | Width | Height | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ frag_offset = (payload[1] << 16) | (payload[2] << 8) | payload[3]; type = payload[4]; Q = payload[5]; width = payload[6] * 8; height = payload[7] * 8; if (width == 0 || height == 0) goto invalid_dimension; GST_DEBUG_OBJECT (rtpjpegdepay, "frag %u, type %u, Q %d, width %u, height %u", frag_offset, type, Q, width, height); header_len += 8; payload += 8; payload_len -= 8; dri = 0; if (type > 63) { if (payload_len < 4) goto empty_packet; /* 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Restart Interval |F|L| Restart Count | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ dri = (payload[0] << 8) | payload[1]; GST_DEBUG_OBJECT (rtpjpegdepay, "DRI %" G_GUINT16_FORMAT, dri); payload += 4; header_len += 4; payload_len -= 4; } if (Q >= 128 && frag_offset == 0) { if (payload_len < 4) goto empty_packet; /* 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | MBZ | Precision | Length | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Quantization Table Data | * | ... | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ precision = payload[1]; length = (payload[2] << 8) | payload[3]; GST_DEBUG_OBJECT (rtpjpegdepay, "precision %04x, length %" G_GUINT16_FORMAT, precision, length); if (Q == 255 && length == 0) goto empty_packet; payload += 4; header_len += 4; payload_len -= 4; if (length > payload_len) goto empty_packet; if (length > 0) qtable = payload; else qtable = rtpjpegdepay->qtables[Q]; payload += length; header_len += length; payload_len -= length; } else { length = 0; qtable = NULL; precision = 0; } if (frag_offset == 0) { guint size; if (rtpjpegdepay->width != width || rtpjpegdepay->height != height) { GstCaps *outcaps; outcaps = gst_caps_new_simple ("image/jpeg", "framerate", GST_TYPE_FRACTION, 0, 1, "width", G_TYPE_INT, width, "height", G_TYPE_INT, height, NULL); gst_pad_set_caps (depayload->srcpad, outcaps); gst_caps_unref (outcaps); rtpjpegdepay->width = width; rtpjpegdepay->height = height; } GST_LOG_OBJECT (rtpjpegdepay, "first packet, length %" G_GUINT16_FORMAT, length); /* first packet */ if (length == 0) { if (Q < 128) { /* no quant table, see if we have one cached */ qtable = rtpjpegdepay->qtables[Q]; if (!qtable) { GST_DEBUG_OBJECT (rtpjpegdepay, "making Q %d table", Q); /* make and cache the table */ qtable = g_new (guint8, 128); MakeTables (rtpjpegdepay, Q, qtable); rtpjpegdepay->qtables[Q] = qtable; } else { GST_DEBUG_OBJECT (rtpjpegdepay, "using cached table for Q %d", Q); } /* all 8 bit quantizers */ precision = 0; } else { if (!qtable) goto no_qtable; } } /* max header length, should be big enough */ outbuf = gst_buffer_new_and_alloc (1000); size = MakeHeaders (GST_BUFFER_DATA (outbuf), type, width, height, qtable, precision, dri); GST_DEBUG_OBJECT (rtpjpegdepay, "pushing %u bytes of header", size); GST_BUFFER_SIZE (outbuf) = size; gst_adapter_push (rtpjpegdepay->adapter, outbuf); } /* take JPEG data, push in the adapter */ GST_DEBUG_OBJECT (rtpjpegdepay, "pushing data at offset %d", header_len); outbuf = gst_rtp_buffer_get_payload_subbuffer (buf, header_len, -1); gst_adapter_push (rtpjpegdepay->adapter, outbuf); outbuf = NULL; if (gst_rtp_buffer_get_marker (buf)) { guint avail; guint8 end[2]; guint8 *data; /* last buffer take all data out of the adapter */ avail = gst_adapter_available (rtpjpegdepay->adapter); GST_DEBUG_OBJECT (rtpjpegdepay, "marker set, last buffer"); /* take the last bytes of the jpeg data to see if there is an EOI * marker */ gst_adapter_copy (rtpjpegdepay->adapter, end, avail - 2, 2); if (end[0] != 0xff && end[1] != 0xd9) { GST_DEBUG_OBJECT (rtpjpegdepay, "no EOI marker, adding one"); /* no EOI marker, add one */ outbuf = gst_buffer_new_and_alloc (2); data = GST_BUFFER_DATA (outbuf); data[0] = 0xff; data[1] = 0xd9; gst_adapter_push (rtpjpegdepay->adapter, outbuf); avail += 2; } outbuf = gst_adapter_take_buffer (rtpjpegdepay->adapter, avail); GST_DEBUG_OBJECT (rtpjpegdepay, "returning %u bytes", avail); } return outbuf; /* ERRORS */ empty_packet: { GST_ELEMENT_WARNING (rtpjpegdepay, STREAM, DECODE, ("Empty Payload."), (NULL)); return NULL; } invalid_dimension: { GST_ELEMENT_WARNING (rtpjpegdepay, STREAM, FORMAT, ("Invalid Dimension %dx%d.", width, height), (NULL)); return NULL; } no_qtable: { GST_WARNING_OBJECT (rtpjpegdepay, "no qtable"); return NULL; } }
// // main // void DoAnalysis(bool OnlyDraw=false) { // Style gROOT->ProcessLine(".L /Users/jaehyeok/macros/rootlogon.C"); // Load macros gROOT->LoadMacro("MakeHists.C+"); gROOT->LoadMacro("Make1DPlots.C+"); gROOT->LoadMacro("Make2DPlots.C+"); gROOT->LoadMacro("MakeTables.C+"); gROOT->LoadMacro("MakeCards.C+"); // ---------------------------------------- // Define chains // ---------------------------------------- TChain *ch_data = new TChain("tree", "DATA"); TChain *ch_ttbar_sl = new TChain("tree", "TT_sl"); TChain *ch_ttbar_ll = new TChain("tree", "TT_ll"); TChain *ch_wjets = new TChain("tree", "WJets"); TChain *ch_dy = new TChain("tree", "DY"); TChain *ch_t = new TChain("tree", "T"); TChain *ch_f1500_100 = new TChain("tree", "T1tttt_f1500_100"); TChain *ch_f1200_800 = new TChain("tree", "T1tttt_f1200_800"); TString BabyDir = "/Users/jaehyeok/Research/Tools/fastjet-3.0.6/example/babies/13TeV/Phys14/HT750MET250/"; //TString BabyDir = "/Users/jaehyeok/Research/Tools/fastjet-3.0.6/example/babies/13TeV/Phys14_JetPt20_16Mar2015_HT750MET250/"; // Data //ch_data->Add(BabyDir+"baby_MuHad_*.root"); // TT ch_ttbar_sl->Add(BabyDir+"baby_TTJets*.root"); ch_ttbar_ll->Add(BabyDir+"baby_TTJets*.root"); // WJets //ch_wjets->Add(BabyDir+"baby_WJetsToLNu*f1To*.root"); ch_wjets->Add(BabyDir+"baby_WJetsToLNu*.root"); // DY //ch_dy->Add(BabyDir+"baby_DYJetsToLL*f1To*.root"); ch_dy->Add(BabyDir+"baby_DYJetsToLL*.root"); // Singla top ch_t->Add(BabyDir+"baby_*channel*_f*.root"); // Signal ch_f1500_100->Add(BabyDir+"baby_*1500*.root"); ch_f1200_800->Add(BabyDir+"baby_*1200*.root"); // ---------------------------------------- // Get number of entries // ---------------------------------------- cout << "data : " << ch_data->GetEntries() << endl; cout << "ttbarl : " << ch_ttbar_sl->GetEntries() << endl; cout << "ttbarll : " << ch_ttbar_ll->GetEntries() << endl; cout << "wjets : " << ch_wjets->GetEntries() << endl; cout << "dy : " << ch_dy->GetEntries() << endl; cout << "Single top : " << ch_t->GetEntries() << endl; cout << "T1tttt(1500,100) : " << ch_f1500_100->GetEntries() << endl; cout << "T1tttt(1200,8000) : " << ch_f1200_800->GetEntries() << endl; // // Loop over SR and CR : make sure that these regions exist in "PassSelection.h" // //char* Region[] = {"Baseline","SR0", "SR1", "SR2", "SR3", "SR4", "SR5", "SR6", "SR7", "SR8", "SR9"}; char* Region[] = {"Baseline"}; int NRegion = sizeof(Region)/sizeof(Region[0]); for(int iregion=0; iregion<NRegion; iregion++) { cout << endl; cout << "[MJ Analysis] Analyzing " << Region[iregion] << endl; cout << endl; cout << "[MJ Analysis] Making directory for figures : Figures/" << Region[iregion] << endl; gSystem->mkdir(Form("Figures/%s",Region[iregion])); if(!OnlyDraw) { // ---------------------------------------- // Fill histrograms // ---------------------------------------- MakeHists(ch_data, Region[iregion]); MakeHists(ch_ttbar_sl, Region[iregion]); MakeHists(ch_ttbar_ll, Region[iregion]); MakeHists(ch_wjets, Region[iregion]); MakeHists(ch_dy, Region[iregion]); MakeHists(ch_t, Region[iregion]); MakeHists(ch_f1500_100, Region[iregion]); MakeHists(ch_f1200_800, Region[iregion]); // ---------------------------------------- // Make the final histogram file // ---------------------------------------- cout << "[MJ Analysis] Merging result files" << endl; gSystem->Exec(Form("rm HistFiles/Hist_%s.root", Region[iregion])); gSystem->Exec(Form("hadd -f HistFiles/Hist_%s.root HistFiles/*_%s.root", Region[iregion], Region[iregion])); gSystem->Exec(Form("mv HistFiles/Hist_%s.root HistFiles/Hist_%s.root.tmp", Region[iregion], Region[iregion])); gSystem->Exec(Form("rm HistFiles/*_%s.root", Region[iregion])); gSystem->Exec(Form("mv HistFiles/Hist_%s.root.tmp HistFiles/Hist_%s.root", Region[iregion], Region[iregion])); } // ---------------------------------------- // Draw histograms // ---------------------------------------- Make1DPlots("dRlep", Region[iregion]); Make1DPlots("dPhiMET", Region[iregion]); Make1DPlots("dRbmin", Region[iregion]); Make1DPlots("dPhiMETlep", Region[iregion]); Make1DPlots("muspT", Region[iregion]); Make1DPlots("musPhi", Region[iregion]); Make1DPlots("musEta", Region[iregion]); Make1DPlots("elspT", Region[iregion]); Make1DPlots("elsPhi", Region[iregion]); Make1DPlots("elsEta", Region[iregion]); Make1DPlots("mT", Region[iregion]); Make1DPlots("mj", Region[iregion]); Make1DPlots("MJ", Region[iregion]); Make1DPlots("MJ_ISR", Region[iregion]); Make1DPlots("HT", Region[iregion]); Make1DPlots("Nfatjet", Region[iregion]); Make1DPlots("Nskinnyjet", Region[iregion]); Make1DPlots("Ncsvm", Region[iregion]); Make1DPlots("MET", Region[iregion]); Make1DPlots("METPhi", Region[iregion]); Make1DPlots("WpT", Region[iregion]); Make1DPlots("FatjetPt1", Region[iregion]); Make1DPlots("FatjetPt2", Region[iregion]); Make1DPlots("FatjetPt3", Region[iregion]); Make1DPlots("FatjetPt4", Region[iregion]); Make1DPlots("FatjetPhi1", Region[iregion]); Make1DPlots("FatjetPhi2", Region[iregion]); Make1DPlots("FatjetPhi3", Region[iregion]); Make1DPlots("FatjetPhi4", Region[iregion]); Make1DPlots("FatjetEta1", Region[iregion]); Make1DPlots("FatjetEta2", Region[iregion]); Make1DPlots("FatjetEta3", Region[iregion]); Make1DPlots("FatjetEta4", Region[iregion]); Make1DPlots("mj1", Region[iregion]); Make1DPlots("mj2", Region[iregion]); Make1DPlots("mj3", Region[iregion]); Make1DPlots("mj4", Region[iregion]); Make1DPlots("mj1OverMJ", Region[iregion]); Make1DPlots("mj2OverMJ", Region[iregion]); Make1DPlots("mj3OverMJ", Region[iregion]); Make1DPlots("mj4OverMJ", Region[iregion]); Make1DPlots("N1", Region[iregion]); Make1DPlots("N2", Region[iregion]); Make1DPlots("N3", Region[iregion]); Make1DPlots("N4", Region[iregion]); Make1DPlots("mjOverPt1", Region[iregion]); Make1DPlots("mjOverPt2", Region[iregion]); Make1DPlots("mjOverPt3", Region[iregion]); Make1DPlots("mjOverPt4", Region[iregion]); Make1DPlots("mj3overmj2", Region[iregion]); Make1DPlots("mj2overmj1", Region[iregion]); // ---------------------------------------- // Make table of yields // ---------------------------------------- MakeTables(0, Region[iregion], false); MakeTables(11, Region[iregion], false); MakeTables(13, Region[iregion], false); // ---------------------------------------- // Make cards for combine/LandS // ---------------------------------------- MakeCards(0, Region[iregion]); MakeCards(11, Region[iregion]); MakeCards(13, Region[iregion]); } //for(int iregion=0; iregion<2; iregion++) }
void main(void) { int j,k; long xp=6*CELL_WIDTH, yp=6*CELL_HEIGHT,dx,dy, angle = 500; char key; float rad; clrscr(); SetMode(); LoadMap("RayMap.Dat"); Wall = (unsigned char *)malloc(64*64); Wall1 = (unsigned char *)malloc(64*64); ClearScreen(SCREEN); MakeTables(); // get mem for double buffer. VSCREEN = (char far*)farmalloc(64000); Fondo = (char far*)farmalloc(64000); LoadImage(Fondo,"fondo.cel"); LoadImage(Wall,"walltext.cel"); LoadImage(Wall1,"wall1.cel"); InstallKeyboardHandler(); while (!keypress[ESC]) { Dest = VSCREEN; Source = Fondo; ShowPage32(); RayCast(xp,yp,angle); Dest = SCREEN; Source = VSCREEN; ShowPage32(); dx=dy=0; if (keypress[RIGHT]) if ((angle += WorldAngles[6]) > WorldAngles[360]) angle = WorldAngles[0]; if (keypress[LEFT]) if ((angle -=WorldAngles[6]) < WorldAngles[0]) angle = WorldAngles[360]; if (keypress[UP]) { rad = 6.28*angle/WorldAngles[360]; dx=cos(rad)*30; dy=sin(rad)*30; } if (keypress[DOWN]) { rad = 6.28*angle/WorldAngles[360]; dx=-cos(rad)*30; dy=-sin(rad)*30; } // move player xp+=dx; yp+=dy; } RemoveKeyboardHandler(); SetText(); farfree(VSCREEN); farfree(Fondo); FreeTables(); // if (Wall != NULL) free(Wall); free(Wall1); // farfree(Wall1); }